From: Brendan Hansen Date: Mon, 28 Feb 2022 00:09:50 +0000 (-0600) Subject: misc treaks and improvements X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=23d52eb7d4c9b138d59567f66f35d40489659d77;p=bar-game.git misc treaks and improvements --- diff --git a/run_tree/scenes/quick_save_new.scene b/run_tree/scenes/quick_save_new.scene index 7851bba..8d39eec 100644 --- a/run_tree/scenes/quick_save_new.scene +++ b/run_tree/scenes/quick_save_new.scene @@ -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" diff --git a/src/entity/editor.onyx b/src/entity/editor.onyx index dcf2cf7..b9de56f 100644 --- a/src/entity/editor.onyx +++ b/src/entity/editor.onyx @@ -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; diff --git a/src/entity/manager.onyx b/src/entity/manager.onyx index f648ce6..5b18c1f 100644 --- a/src/entity/manager.onyx +++ b/src/entity/manager.onyx @@ -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); } } diff --git a/src/entity/player.onyx b/src/entity/player.onyx index 9118d79..cf207d8 100644 --- a/src/entity/player.onyx +++ b/src/entity/player.onyx @@ -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); } diff --git a/src/game.onyx b/src/game.onyx index 021459b..8a218bd 100644 --- a/src/game.onyx +++ b/src/game.onyx @@ -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); diff --git a/src/main.onyx b/src/main.onyx index 3c7c6dd..42138c5 100644 --- a/src/main.onyx +++ b/src/main.onyx @@ -141,6 +141,7 @@ create_window :: () => { } main :: (args) => { + debug_set_level(.Info); if !glfwInit() { debug_log(.Critical, "Failed to initialize GLFW!"); os.exit(1); diff --git a/src/utils/logger.onyx b/src/utils/logger.onyx index 4947e53..57b0ffc 100644 --- a/src/utils/logger.onyx +++ b/src/utils/logger.onyx @@ -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) => {