pos.y = 312.0000
size.x = 352.0000
size.y = 16.0000
+:RenderComponent
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
[Wall]
id = 11
pos.y = 160.0000
size.x = 16.0000
size.y = 320.0000
+:RenderComponent
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
[Player]
id = 12
pos.y = 356.0881
size.x = 32.0000
size.y = 32.0000
-:PlayerComponent
-color.r = 0.0000
-color.g = 1.0000
-color.b = 0.0000
-color.a = 1.0000
-holding = 0
:MovementComponent
controls.up = 87
controls.down = 83
controls.interact = 70
controls.pick_up = 71
facing = 1
+:PlayerComponent
+holding = 0
+:RenderComponent
+color.r = 0.0000
+color.g = 1.0000
+color.b = 0.0000
+color.a = 1.0000
[Door]
id = 13
max_openness = 0.8000
target_openness = 0.8000
openness = 0.8000
+:RenderComponent
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
[Item_Entity]
id = 14
pos.y = 375.2260
size.x = 16.0000
size.y = 16.0000
+:RenderComponent
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
:ItemComponent
item = "beer"
}
#local render_struct_fields :: (v: any, i: i32, x, y, w, h: f32, depth := 0) -> (new_y: f32, new_i: i32) {
- Field_Height :: 22.0f;
+ Field_Height :: 24.0f;
info := cast(^type_info.Type_Info_Struct) type_info.get_type_info(v.type);
for^ info.members {
}
#local {
- background_color :: Color.{0.5, 0.5, 0.5, 0.7};
+ background_color :: Color.{0.5, 0.5, 0.5, 1};
editor_font: Font;
editor_big_font: Font;
RenderComponent :: struct {
use base: Component;
+
+ #tag Editor_Hidden, Entity_Store.Skip
func : (e: ^Entity) -> void;
- #struct_tag Entity_Store.Skip
+ color := Color.{1,1,1};
}
SizeComponent :: struct {
schematics[s_info.name] = schematic;
debug_log(.Debug, "Discovered schematic: '{}'", s_info.name);
+ continue continue;
+ }
+ }
+
+ if struct_inherits(~~ index, Component) {
+ debug_log(.Debug, "Discovered component: '{}'", s_info.name);
+
+ comp_type := cast(type_expr) index;
+ if !component_vtables->has(comp_type) {
+ vtable := new(Component_Vtable, allocator=entity_allocator);
+ type_info.populate_struct_vtable(vtable, comp_type, safe=false);
+ component_vtables[comp_type] = vtable;
}
}
}
for entities {
render_comp := it->get(RenderComponent);
if render_comp != null {
+ immediate_set_color(render_comp.color);
render_comp.func(it);
}
}
this.size = .{32, 32};
this.flags |= .Solid;
- scene->create_and_add(this, PlayerComponent) {
- comp.holding = Entity_Nothing;
- comp.color = .{1,1,1};
- }
-
scene->create_and_add(this, MovementComponent) {
comp.controls = controls;
}
+ scene->create_and_add(this, PlayerComponent) {
+ comp.holding = Entity_Nothing;
+ }
+
scene->create_and_add(this, RenderComponent) {
comp.func = PlayerComponent.render;
+ comp.color = .{1,1,1};
}
return this;
PlayerComponent :: struct {
use base: Component;
- color := Color.{1,1,1};
holding : Entity_ID;
update :: (player: ^PlayerComponent, use this: ^Entity, dt: f32) {
}
render :: (use this: ^Entity) {
- player := this->get(PlayerComponent);
- immediate_set_color(player.color);
-
rect := Entity.get_rect(this);
immediate_image(^player_assets.texture, rect.x, rect.y, rect.w, rect.h);
}
#local Wall :: struct {
render :: (use this: ^Entity) {
- immediate_set_color(.{1,1,1});
-
r := Entity.get_rect(this);
immediate_rectangle(r.x, r.y, r.w, r.h);
}
view_rect.y = ~~ ((window_height - scene_canvas.height) / 2);
view_rect.w = ~~ scene_canvas.width;
view_rect.h = ~~ scene_canvas.height;
+ // view_rect := Rect.{0, 0, ~~window_width, ~~window_height};
scene_render_offset = Rect.top_left(view_rect);
glDisable(GL_CULL_FACE);
}
main :: (args) => {
+ debug_set_level(.Info);
if !glfwInit() {
debug_log(.Critical, "Failed to initialize GLFW!");
os.exit(1);
use package core
+Enable_Log_Colors :: false
+
Log_Level :: enum {
Debug;
Info;
buf: [2048] u8;
output := conv.format_va(buf, format, args);
- printf("[{w5}] {}\n", level_string(level), output);
+ #if Enable_Log_Colors {
+ color_spec: str;
+ switch level {
+ case .Critical do color_spec = "1;91";
+ case .Error do color_spec = "1;31";
+ case .Warning do color_spec = "1;33";
+ case .Info do color_spec = "94";
+ }
+
+ printf("\x1b[{}m[{w5}] {}\x1b[0m\n", color_spec, level_string(level), output);
+ } else {
+ printf("[{w5}] {}\n", level_string(level), output);
+ }
}
#local level_string :: (level: Log_Level) => {