--- /dev/null
+[Background]
+id = 100
+flags = 0
+pos.x = 0.0000
+pos.y = 0.0000
+size.x = 0.0000
+size.y = 0.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Wall]
+id = 10
+flags = 2
+pos.x = 192.0000
+pos.y = 104.0000
+size.x = 352.0000
+size.y = 16.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Wall]
+id = 11
+flags = 3
+pos.x = 456.0000
+pos.y = 64.0000
+size.x = 16.0000
+size.y = 96.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Door]
+id = 13
+flags = 3
+pos.x = 368.0000
+pos.y = 104.0000
+size.x = 160.0000
+size.y = 16.0000
+:DoorComponent
+max_openness = 0.8000
+target_openness = 0.8000
+openness = 0.8000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Wall]
+id = 25
+flags = 2
+pos.x = 408.0000
+pos.y = 8.0000
+size.x = 816.0000
+size.y = 16.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Wall]
+id = 27
+flags = 2
+pos.x = 8.0000
+pos.y = 312.0000
+size.x = 16.0000
+size.y = 592.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Wall]
+id = 28
+flags = 2
+pos.x = 792.0000
+pos.y = 312.0000
+size.x = 16.0000
+size.y = 592.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 30
+flags = 2
+pos.x = 136.0000
+pos.y = 336.0000
+size.x = 16.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 0
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 32.0000
+sprite.pos.y = 32.0000
+sprite.size.x = 16.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 31
+flags = 2
+pos.x = 184.0000
+pos.y = 336.0000
+size.x = 16.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 0
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 48.0000
+sprite.pos.y = 32.0000
+sprite.size.x = -16.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 32
+flags = 2
+pos.x = 160.0000
+pos.y = 336.0000
+size.x = 32.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 1
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 48.0000
+sprite.pos.y = 32.0000
+sprite.size.x = 32.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 40
+flags = 2
+pos.x = 136.0000
+pos.y = 256.0000
+size.x = 16.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 0
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 32.0000
+sprite.pos.y = 32.0000
+sprite.size.x = 16.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 41
+flags = 2
+pos.x = 184.0000
+pos.y = 256.0000
+size.x = 16.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 0
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 48.0000
+sprite.pos.y = 32.0000
+sprite.size.x = -16.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 42
+flags = 2
+pos.x = 160.0000
+pos.y = 256.0000
+size.x = 32.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 1
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 48.0000
+sprite.pos.y = 32.0000
+sprite.size.x = 32.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 55
+flags = 2
+pos.x = 536.0000
+pos.y = 256.0000
+size.x = 16.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 0
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 32.0000
+sprite.pos.y = 32.0000
+sprite.size.x = 16.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 54
+flags = 2
+pos.x = 584.0000
+pos.y = 256.0000
+size.x = 16.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 0
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 48.0000
+sprite.pos.y = 32.0000
+sprite.size.x = -16.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 53
+flags = 2
+pos.x = 560.0000
+pos.y = 256.0000
+size.x = 32.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 1
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 48.0000
+sprite.pos.y = 32.0000
+sprite.size.x = 32.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 52
+flags = 2
+pos.x = 536.0000
+pos.y = 336.0000
+size.x = 16.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 0
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 32.0000
+sprite.pos.y = 32.0000
+sprite.size.x = 16.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 51
+flags = 2
+pos.x = 584.0000
+pos.y = 336.0000
+size.x = 16.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 0
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 48.0000
+sprite.pos.y = 32.0000
+sprite.size.x = -16.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Furniture]
+id = 50
+flags = 2
+pos.x = 560.0000
+pos.y = 336.0000
+size.x = 32.0000
+size.y = 32.0000
+:FurnitureComponent
+furniture_type = 1
+taken = false
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 48.0000
+sprite.pos.y = 32.0000
+sprite.size.x = 32.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Wall]
+id = 35
+flags = 2
+pos.x = 192.0000
+pos.y = 592.0000
+size.x = 352.0000
+size.y = 32.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Wall]
+id = 36
+flags = 2
+pos.x = 608.0000
+pos.y = 592.0000
+size.x = 352.0000
+size.y = 32.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Wall]
+id = 37
+flags = 2
+pos.x = 140.0000
+pos.y = -142.0000
+size.x = 16.0000
+size.y = 16.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Tap]
+id = 14
+flags = 3
+pos.x = 240.0000
+pos.y = 32.0000
+size.x = 32.0000
+size.y = 32.0000
+:SpriteRenderComponent
+sprite.sheet = "./assets/images/spritesheet.png"
+sprite.pos.x = 0.0000
+sprite.pos.y = 32.0000
+sprite.size.x = 32.0000
+sprite.size.y = 32.0000
+sprite.color.r = 1.0000
+sprite.color.g = 1.0000
+sprite.color.b = 1.0000
+sprite.color.a = 1.0000
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+:DispenserComponent
+item = "beer"
+max_timeout = 2.0000
+
+[Player]
+id = 152
+flags = 2
+pos.x = 276.7525
+pos.y = 229.4652
+size.x = 16.0000
+size.y = 32.0000
+:MovementComponent
+controls.up = 265
+controls.down = 264
+controls.left = 263
+controls.right = 262
+controls.interact = 44
+controls.pick_up = 46
+facing = 1
+velocity.x = 0.0000
+velocity.y = -0.0000
+:PlayerComponent
+holding = 155
+:RenderComponent
+layer = 0
+color.r = 1.0000
+color.g = 0.0000
+color.b = 1.0000
+color.a = 1.0000
+
+[Player]
+id = 12
+flags = 2
+pos.x = 334.4180
+pos.y = 246.6519
+size.x = 16.0000
+size.y = 32.0000
+:MovementComponent
+controls.up = 87
+controls.down = 83
+controls.left = 65
+controls.right = 68
+controls.interact = 70
+controls.pick_up = 71
+facing = 3
+velocity.x = -0.0000
+velocity.y = 0.0000
+:PlayerComponent
+holding = 150
+:RenderComponent
+layer = 10
+color.r = 0.0000
+color.g = 1.0000
+color.b = 0.0000
+color.a = 1.0000
+
+[Item_Entity]
+id = 150
+flags = 6
+pos.x = 334.4180
+pos.y = 222.6519
+size.x = 16.0000
+size.y = 16.0000
+:RenderComponent
+layer = 10
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+:ItemComponent
+item = "burger"
+
+[Item_Entity]
+id = 155
+flags = 0
+pos.x = 276.7525
+pos.y = 205.4652
+size.x = 16.0000
+size.y = 16.0000
+:RenderComponent
+layer = 10
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
+:ItemComponent
+item = "beer"
+
editor_font = font_lookup(.{"./assets/fonts/calibri.ttf", 18});
editor_big_font = font_lookup(.{"./assets/fonts/calibri.ttf", 24});
selected_entity_id = Entity_Nothing;
+
+ array.ensure_capacity(^save_path, 512);
+ save_path.count = 512;
+ s := conv.format(save_path, "./scenes/level1.scene");
+ save_path.count = s.count;
}
editor_shown :: () => editor_openness != 0.0f || editor_target_openness != 0.0f;
editor_update :: (dt: f32) {
move_towards(^editor_openness, editor_target_openness, dt * 6);
- if is_key_just_up(GLFW_KEY_1) do clicked_tab = .Edit;
- if is_key_just_up(GLFW_KEY_2) do clicked_tab = .Create;
+ if is_key_just_up(GLFW_KEY_1) do clicked_tab = .File;
+ if is_key_just_up(GLFW_KEY_2) do clicked_tab = .Edit;
+ if is_key_just_up(GLFW_KEY_3) do clicked_tab = .Create;
if is_key_just_up(GLFW_KEY_G) do editor_grid_shown = !editor_grid_shown;
handle_clicking_tab(dt);
if active_index < 0 do return;
mouse_pos := mouse_get_position_vector() - scene_render_offset;
- if is_button_just_down(GLFW_MOUSE_BUTTON_LEFT) && mouse_pos.x < ~~window_width - sidebar_width {
+ if is_button_just_up(GLFW_MOUSE_BUTTON_LEFT) && mouse_pos.x < ~~window_width - sidebar_width {
schematic := scene.schematics.entries[active_index].value;
entity := schematic.create(^scene);
entity.schematic = schematic.type;
mouse_pos := mouse_get_position_vector() - scene_render_offset;
if mouse_pos.x < ~~window_width - sidebar_width {
- if is_button_just_up(GLFW_MOUSE_BUTTON_LEFT) || is_button_just_up(GLFW_MOUSE_BUTTON_RIGHT) {
+ if is_button_just_down(GLFW_MOUSE_BUTTON_LEFT) || is_button_just_down(GLFW_MOUSE_BUTTON_RIGHT) {
if active_tab == .Edit do active_index = -1;
selected_entity_id = Entity_Nothing;
for scene.entities {
if Entity.get_rect(it) |> Rect.contains(mouse_pos) {
selected_entity_id = it.id;
- // break_just_up;
+ // break;
}
}
- dragging = is_button_just_up(GLFW_MOUSE_BUTTON_LEFT) && selected_entity_id != Entity_Nothing;
- resizing = is_button_just_up(GLFW_MOUSE_BUTTON_RIGHT) && selected_entity_id != Entity_Nothing;
+ dragging = is_button_just_down(GLFW_MOUSE_BUTTON_LEFT) && selected_entity_id != Entity_Nothing;
+ resizing = is_button_just_down(GLFW_MOUSE_BUTTON_RIGHT) && selected_entity_id != Entity_Nothing;
}
}
xcount := cast(i32) math.ceil(height / editor_grid_size);
ycount := cast(i32) math.ceil(width / editor_grid_size);
- immediate_set_color(.{1,1,0});
+ immediate_set_color(.{1,1,0, 0.4});
for xcount {
y := ~~it * editor_grid_size + scene_render_offset.y;
immediate_line(scene_render_offset.x, y, width + scene_render_offset.x, y);
immediate_rectangle(x, y, w, h);
switch active_tab {
+ case .File {
+ @Relocate
+ draw_textbox(.{ x, y, w, 40 }, ^save_path);
+
+ if draw_button(.{ x, y + 40, w / 2, 40 }, "Save") {
+ scene->save_to_file(save_path);
+ }
+
+ if draw_button(.{ x + w / 2, y + 40, w / 2, 40 }, "Load") {
+ scene->load_from_file(save_path);
+ }
+ }
+
case .Create {
render_create_sidebar(x, y, w, h);
}
active_index = i;
}
}
-
- #persist test : [..] u8;
- if test.data == null {
- test << #char "t";
- test << #char "e";
- test << #char "s";
- test << #char "t";
- }
-
- draw_textbox(.{x, y + 72.0f, w / 2.0f, 36.0f}, ^test);
}
#local render_entity_list :: (x, y, w, h: f32) {
+ #persist search_value: [..] u8;
+ draw_textbox(.{x, y, w, 40}, ^search_value);
+ h -= 40;
+ y += 40;
+
scrolling_region_start(.{x, y, w, h});
buf: [256] u8;
for scene.entities {
msg := conv.format(buf, "{} ({})", it.schematic, cast(u32) it.id);
+ if search_value.count != 0 {
+ if !string.contains(msg, search_value) do continue;
+ }
+
if draw_button(.{ x, y, w, 32 }, msg, increment=~~it) {
selected_entity_id = it.id;
}
} else {
value_buf: [1024] u8;
value_str := conv.format_va(value_buf, "{}", .[member_any]);
+ font_set_color(.{1,1,1});
font_print(editor_font, x + w - font_get_width(editor_font, value_str) - 2, y + Field_Height - 2, value_str);
}
}
Tabs :: enum {
None;
+ File;
Edit;
Create;
}
editor_grid_shown := false;
editor_grid_size := 16.0f; @TODO // This should be configurable
+
+ save_path: [..] u8;
}
load_assets();
scene = scene_create();
- scene->load_from_file(quick_save_file);
+ // scene->load_from_file(quick_save_file);
item_store = item_store_make();
item_store->load_items_from_file("scenes/default.items");
texture := canvas_to_texture(^scene_canvas);
view_rect: Rect;
- view_rect.x = math.lerp(editor_open_percent(), cast(f32) ((window_width - scene_canvas.width) / 2), 0);
- view_rect.y = ~~ ((window_height - scene_canvas.height) / 2);
- view_rect.w = ~~ scene_canvas.width;
- view_rect.h = ~~ scene_canvas.height;
if !editor_shown() {
view_rect = Rect.{0, 0, ~~window_width, ~~window_height};
+ } else {
+ view_rect.x = math.lerp(editor_open_percent(), cast(f32) ((window_width - scene_canvas.width) / 2), cast(f32) ((window_width - scene_canvas.width - 400) / 2));
+ view_rect.y = ~~ ((window_height - scene_canvas.height) / 2);
+ view_rect.w = ~~ scene_canvas.width;
+ view_rect.h = ~~ scene_canvas.height;
}
scene_render_offset = Rect.top_left(view_rect);
for^ animation_states.entries {
it.value.accessed_this_frame = false;
}
+
+ if active_countdown > 0 {
+ active_countdown -= 1;
+ if active_countdown == 0 do set_active_item(0);
+ }
}
//
contains := Rect.contains(r, .{~~mx, ~~my});
if is_active_item(hash) {
+ renew_active_item(hash);
if is_button_just_up(GLFW_MOUSE_BUTTON_LEFT) {
if is_hot_item(hash) && contains {
result = true;
}
if is_active_item(hash) {
+ renew_active_item(hash);
if is_button_just_down(GLFW_MOUSE_BUTTON_LEFT) && !contains {
set_active_item(0);
input_release_keys();
contains := Rect.contains(r, .{~~mx, ~~my});
if is_active_item(hash) {
+ renew_active_item(hash);
if is_button_just_up(GLFW_MOUSE_BUTTON_LEFT) {
if is_hot_item(hash) && contains {
result = true;
#local {
hot_item : UI_Id = 0
- active_item : UI_Id = 0
hot_item_was_set := false
hot_item_depth := 0;
hot_item_depth_needed := 0;
+ active_item : UI_Id = 0
+ active_countdown := 0
+
set_active_item :: (id: UI_Id) -> bool {
active_item = id;
+ active_countdown = 2;
return true;
}
+ renew_active_item :: (id: UI_Id) {
+ if active_item == id {
+ active_countdown = 2;
+ }
+ }
+
set_hot_item :: (id: UI_Id, force := false) -> bool {
if active_item != 0 do return false;