misc treaks and improvements
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 28 Feb 2022 00:09:50 +0000 (18:09 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 28 Feb 2022 00:09:50 +0000 (18:09 -0600)
run_tree/scenes/quick_save_new.scene
src/entity/editor.onyx
src/entity/manager.onyx
src/entity/player.onyx
src/game.onyx
src/main.onyx
src/utils/logger.onyx

index 7851bba7bc84f0cacfd0d4251f5e4c6197f4c9dc..8d39eec9d63becbc97cec583304cd658cdc7edd5 100644 (file)
@@ -5,6 +5,11 @@ pos.x = 176.0000
 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
@@ -13,6 +18,11 @@ pos.x = 440.0000
 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
@@ -21,12 +31,6 @@ pos.x = 452.6227
 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
@@ -35,6 +39,13 @@ controls.right = 68
 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
@@ -47,6 +58,11 @@ size.y = 16.0000
 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
@@ -55,6 +71,11 @@ pos.x = 508.3851
 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"
 
index dcf2cf724b9750193f14346abad2ff84621b932b..b9de56f0d31bf7a383bf87cee439448f7cefd2d6 100644 (file)
@@ -283,7 +283,7 @@ editor_draw :: () {
 }
 
 #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 {
@@ -416,7 +416,7 @@ editor_draw :: () {
 }
 
 #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;
index f648ce63fefdf468889e47bd75ffc01dc682a3bb..5b18c1f1c8013b9a08f24b08dbf29ec655723315 100644 (file)
@@ -34,9 +34,11 @@ IsComponent :: interface (c: $C) {
 
 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 {
@@ -158,6 +160,18 @@ entity_manager_create :: () -> Entity_Manager {
                 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;
             }
         }
     }
@@ -242,6 +256,7 @@ entity_manager_draw :: (use this: ^Entity_Manager) {
     for entities {
         render_comp := it->get(RenderComponent);
         if render_comp != null {
+            immediate_set_color(render_comp.color);
             render_comp.func(it);
         }
     }
index 9118d799ffcc0ed330a7fb878c024e62a63aec8f..cf207d8cd5bfc66fab3a140fd288ae136685a49a 100644 (file)
@@ -56,17 +56,17 @@ player_create :: (scene: ^Entity_Manager, pos: Vector2, controls := player_1_con
     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;
@@ -119,7 +119,6 @@ MovementComponent :: struct {
 PlayerComponent :: struct {
     use base: Component;
 
-    color    := Color.{1,1,1};
     holding  : Entity_ID;
 
     update :: (player: ^PlayerComponent, use this: ^Entity, dt: f32) {
@@ -186,9 +185,6 @@ PlayerComponent :: struct {
     }
 
     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);
     }
@@ -196,8 +192,6 @@ PlayerComponent :: struct {
 
 #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);
     }
index 021459b6f734e6dcfcba8781a5394cf5ee9d3661..8a218bdac91586ceeb81d6f6ff01d7440c8cd9a8 100644 (file)
@@ -65,6 +65,7 @@ game_draw :: () {
     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);
index 3c7c6ddd2731a903b688581bc8fa6f60561078da..42138c5c08fa9af236aac81ac699e21056be8b80 100644 (file)
@@ -141,6 +141,7 @@ create_window :: () => {
 }
 
 main :: (args) => {
+    debug_set_level(.Info);
     if !glfwInit() {
         debug_log(.Critical, "Failed to initialize GLFW!");
         os.exit(1);
index 4947e53f5ed3a5effe7daff2c4cb9f868a864fec..57b0ffc976bc127798ff4d74303c70bf7991e348 100644 (file)
@@ -4,6 +4,8 @@
 
 use package core
 
+Enable_Log_Colors :: false
+
 Log_Level :: enum {
     Debug;
     Info;
@@ -25,7 +27,19 @@ debug_log_va :: (level: Log_Level, format: str, args: [] any) {
 
     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) => {