if is_button_just_down(GLFW_MOUSE_BUTTON_LEFT) && mouse_pos.x < ~~window_width - sidebar_width && mouse_pos.y > menubar_height {
selected_entity_id = Entity_Nothing;
- for entity_manager.entities {
- get_rect := entity_manager.entity_types[it.type].get_rect;
+ for scene.entities {
+ get_rect := scene.entity_types[it.type].get_rect;
if get_rect == null_proc do continue;
if get_rect(it) |> Rect.contains(mouse_pos) {
}
if selected_entity_id != Entity_Nothing && active_tab == .Edit {
- selected_entity := entity_manager->get(selected_entity_id);
+ selected_entity := scene->get(selected_entity_id);
if dragging {
selected_entity.pos += mouse_get_delta_vector();
}
editor_draw :: () {
- entity_manager->draw();
+ scene->draw();
immediate_flush();
if selected_entity_id != Entity_Nothing {
- selected_entity := entity_manager->get(selected_entity_id);
- get_rect := entity_manager.entity_types[selected_entity.type].get_rect;
+ selected_entity := scene->get(selected_entity_id);
+ get_rect := scene.entity_types[selected_entity.type].get_rect;
r := get_rect(selected_entity);
immediate_set_color(.{1,1,0,0.5});
x = 2;
y += 2;
- h = 36;
+ h -= 4;
w = 100;
for type_info.enum_values(Tabs) {
case .Edit {
if selected_entity_id != Entity_Nothing {
- selected_entity := entity_manager->get(selected_entity_id);
+ selected_entity := scene->get(selected_entity_id);
render_entity_fields(selected_entity, x, y, w, h);
}
}
} elseif it.type == Entity_ID {
value_buf: [1024] u8;
- entity_type := (entity_manager->get(*cast(^Entity_ID) member_any.data)).type; // Dereferencing null here
+ entity_type := (scene->get(*cast(^Entity_ID) member_any.data)).type; // Dereferencing null here
value_str := conv.format_va(value_buf, "{} ({})", .[member_any, .{^entity_type, type_expr}]);
font_print(editor_font, x + w - font_get_width(editor_font, value_str) - 2, y + Field_Height, value_str);
if is_key_down(controls.left) do delta.x -= speed * dt;
if is_key_down(controls.right) do delta.x += speed * dt;
- walls := entity_manager->query_by_flags(.{pos.x - 100, pos.y - 100, 200, 200}, .Solid);
+ walls := scene->query_by_flags(.{pos.x - 100, pos.y - 100, 200, 200}, .Solid);
defer memory.free_slice(^walls);
try_move(this, .{delta.x, 0}, walls);
//
if is_key_just_up(controls.pick_up) {
if holding != Entity_Nothing {
- holding_object := entity_manager->get(holding);
+ holding_object := scene->get(holding);
holding_object.flags |= .Carryable;
- vtable := ^entity_manager.entity_types[holding_object.type];
+ vtable := ^scene.entity_types[holding_object.type];
if vtable.get_rect != null_proc {
r := vtable.get_rect(holding_object);
holding_object.pos = pos + .{Size + r.w / 2 + 4, 0};
} else {
area := Rect.{pos.x - Size * 2, pos.y - Size * 2, Size * 4, Size * 4};
- objects := entity_manager->query_by_flags(area, .Carryable);
+ objects := scene->query_by_flags(area, .Carryable);
defer memory.free_slice(^objects);
// This should first sort by the distance to the object
//
if is_key_just_up(controls.interact) {
area := Rect.{pos.x - Size * 2, pos.y - Size * 2, Size * 4, Size * 4};
- objects := entity_manager->query_by_flags(area, .Interactable);
+ objects := scene->query_by_flags(area, .Interactable);
defer memory.free_slice(^objects);
for objects {
- vtable := ^entity_manager.entity_types[it.type];
+ vtable := ^scene.entity_types[it.type];
if vtable.interact == null_proc do continue;
vtable.interact(it, this);
}
// to be above the players head.
//
if holding != Entity_Nothing {
- holding_object := entity_manager->get(holding);
- vtable := ^entity_manager.entity_types[holding_object.type];
+ holding_object := scene->get(holding);
+ vtable := ^scene.entity_types[holding_object.type];
if vtable.get_rect != null_proc {
r := vtable.get_rect(holding_object);
holding_object.pos = pos - .{0, Size + r.h / 2};
if it == this do continue;
if it.id == this.holding do continue;
- vtable := ^entity_manager.entity_types[it.type];
+ vtable := ^scene.entity_types[it.type];
if Rect.intersects(ent_rect, vtable.get_rect(~~ it)) {
pos -= delta;
break;
@GlobalVariable
window: GLFWwindow_p
+@GlobalVariable
+scene: Entity_Manager;
+
@GlobalVariable
window_width: u32
window_height: u32
#if DEBUG { debug_font: Font; }
-entity_manager: Entity_Manager;
init :: () {
create_window();
#if DEBUG { debug_font = font_lookup(.{"./assets/fonts/calibri.ttf", 16}); }
- entity_manager = entity_manager_create();
- entity_manager->make(Player, .{ pos = .{300, 300}, controls=player_1_controls });
- entity_manager->make(Player, .{ pos = .{400, 300}, controls=player_2_controls, color=.{1,0,0} });
+ scene = entity_manager_create();
+ scene->make(Player, .{ pos = .{300, 300}, controls=player_1_controls });
+ scene->make(Player, .{ pos = .{400, 300}, controls=player_2_controls, color=.{1,0,0} });
- entity_manager->make(Wall, .{ .{100, 100}, .{400, 50} });
- // entity_manager->make(Wall, .{ .{100, 100}, .{50, 400} });
- // entity_manager->make(Wall, .{ .{450, 100}, .{50, 400} });
- // entity_manager->make(Wall, .{ .{100, 450}, .{400, 50} });
+ scene->make(Wall, .{ .{100, 100}, .{400, 50} });
+ // scene->make(Wall, .{ .{100, 100}, .{50, 400} });
+ // scene->make(Wall, .{ .{450, 100}, .{50, 400} });
+ // scene->make(Wall, .{ .{100, 450}, .{400, 50} });
- entity_manager->make(Door, .{ .{150, 150}, .{50, 50} });
- entity_manager->make(Door, .{ .{400, 150}, .{50, 50} });
- entity_manager->make(Door, .{ .{400, 400}, .{50, 50} });
- entity_manager->make(Door, .{ .{150, 400}, .{50, 50} });
+ scene->make(Door, .{ .{150, 150}, .{50, 50} });
+ scene->make(Door, .{ .{400, 150}, .{50, 50} });
+ scene->make(Door, .{ .{400, 400}, .{50, 50} });
+ scene->make(Door, .{ .{150, 400}, .{50, 50} });
- entity_manager->make(Item, .{ pos=.{ 250, 250 }, color=.{1,0,0} });
- entity_manager->make(Item, .{ pos=.{ 275, 250 }, color=.{0,1,0} });
- entity_manager->make(Item, .{ pos=.{ 300, 250 }, color=.{0,0,1} });
+ scene->make(Item, .{ pos=.{ 250, 250 }, color=.{1,0,0} });
+ scene->make(Item, .{ pos=.{ 275, 250 }, color=.{0,1,0} });
+ scene->make(Item, .{ pos=.{ 300, 250 }, color=.{0,0,1} });
#if DEBUG {
println("Registered Entity types:");
- for entity_manager.entity_types.entries {
+ for scene.entity_types.entries {
info := cast(^type_info.Type_Info_Struct) type_info.get_type_info(it.key);
printf(" {}\n", info.name);
}
return;
}
- entity_manager->update(dt);
+ scene->update(dt);
}
draw :: () {
return;
}
- entity_manager->draw();
+ scene->draw();
#if false {
mx, my := mouse_get_position();