code cleanup
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 2 Mar 2022 03:28:02 +0000 (21:28 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 2 Mar 2022 03:28:02 +0000 (21:28 -0600)
12 files changed:
run_tree/scenes/quick_save_new.scene
src/entity/components/dispenser.onyx
src/entity/components/furniture.onyx
src/entity/components/patron.onyx
src/entity/entities.onyx
src/entity/items.onyx
src/entity/scene.onyx
src/entity/schematics/background.onyx
src/entity/schematics/furniture.onyx
src/entity/schematics/patron.onyx
src/entity/schematics/player.onyx
src/entity/schematics/tap.onyx

index 45034deec5d2e978cb748cc3f00ab5cbf1b5e256..97090ee41923c88f1c3866338bc3b61451ca6943 100644 (file)
@@ -1,14 +1,16 @@
 [Background]
 id = 100
 flags = 0
-pos.x = 0
-pos.y = 0
+pos.x = 0.0000
+pos.y = 0.0000
+size.x = 0.0000
+size.y = 0.0000
 :RenderComponent
-layer = -1
-color.r = 1
-color.g = 1
-color.b = 1
-color.a = 1
+layer = 0
+color.r = 1.0000
+color.g = 1.0000
+color.b = 1.0000
+color.a = 1.0000
 
 [Wall]
 id = 10
@@ -38,32 +40,6 @@ color.g = 1.0000
 color.b = 1.0000
 color.a = 1.0000
 
-[Player]
-id = 12
-flags = 2
-pos.x = 312.5422
-pos.y = 271.0389
-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.4420
-velocity.y = 0.4767
-:PlayerComponent
-holding = 0
-:RenderComponent
-layer = 10
-color.r = 0.0000
-color.g = 1.0000
-color.b = 0.0000
-color.a = 1.0000
-
 [Door]
 id = 13
 flags = 3
@@ -131,15 +107,10 @@ pos.x = 136.0000
 pos.y = 336.0000
 size.x = 16.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 0
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 32.0000
 sprite.pos.y = 32.0000
@@ -157,15 +128,10 @@ pos.x = 184.0000
 pos.y = 336.0000
 size.x = 16.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 0
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 48.0000
 sprite.pos.y = 32.0000
@@ -183,15 +149,10 @@ pos.x = 160.0000
 pos.y = 336.0000
 size.x = 32.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 1
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 48.0000
 sprite.pos.y = 32.0000
@@ -209,15 +170,10 @@ pos.x = 136.0000
 pos.y = 256.0000
 size.x = 16.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 0
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 32.0000
 sprite.pos.y = 32.0000
@@ -235,15 +191,10 @@ pos.x = 184.0000
 pos.y = 256.0000
 size.x = 16.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 0
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 48.0000
 sprite.pos.y = 32.0000
@@ -261,15 +212,10 @@ pos.x = 160.0000
 pos.y = 256.0000
 size.x = 32.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 1
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 48.0000
 sprite.pos.y = 32.0000
@@ -287,15 +233,10 @@ pos.x = 536.0000
 pos.y = 256.0000
 size.x = 16.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 0
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 32.0000
 sprite.pos.y = 32.0000
@@ -313,15 +254,10 @@ pos.x = 584.0000
 pos.y = 256.0000
 size.x = 16.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 0
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 48.0000
 sprite.pos.y = 32.0000
@@ -339,15 +275,10 @@ pos.x = 560.0000
 pos.y = 256.0000
 size.x = 32.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 1
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 48.0000
 sprite.pos.y = 32.0000
@@ -365,15 +296,10 @@ pos.x = 536.0000
 pos.y = 336.0000
 size.x = 16.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 0
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 32.0000
 sprite.pos.y = 32.0000
@@ -391,15 +317,10 @@ pos.x = 584.0000
 pos.y = 336.0000
 size.x = 16.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 0
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 48.0000
 sprite.pos.y = 32.0000
@@ -417,15 +338,10 @@ pos.x = 560.0000
 pos.y = 336.0000
 size.x = 32.0000
 size.y = 32.0000
-:RenderComponent
-layer = 0
-color.r = 1.0000
-color.g = 1.0000
-color.b = 1.0000
-color.a = 1.0000
 :FurnitureComponent
 furniture_type = 1
 taken = false
+:SpriteRenderComponent
 sprite.sheet = "./assets/images/spritesheet.png"
 sprite.pos.x = 48.0000
 sprite.pos.y = 32.0000
@@ -485,8 +401,18 @@ 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 = 1
+layer = 0
 color.r = 1.0000
 color.g = 1.0000
 color.b = 1.0000
@@ -495,3 +421,29 @@ color.a = 1.0000
 item = "beer"
 max_timeout = 2.0000
 
+[Player]
+id = 12
+flags = 2
+pos.x = 312.4881
+pos.y = 271.0974
+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 = 0
+:RenderComponent
+layer = 10
+color.r = 0.0000
+color.g = 1.0000
+color.b = 0.0000
+color.a = 1.0000
+
index 512e7d8622b3bd9bd4368e729f593677454d56ff..eb73ec1e0fecc46b63b71d937559a7b3c01f2370 100644 (file)
@@ -22,7 +22,7 @@ DispenserComponent :: struct {
             debug_log(.Error, "DispenserComponent expected entity to not have an InteractableComponent");
         }
 
-        scene->create_and_add(entity, InteractableComponent) {
+        scene->modify_component(entity, InteractableComponent) {
             comp.interact = interact;
         }
     }
index 07611d86876c8f383aed264ecf81db1744ec23b5..0ddd68894311e4ed3a920f52eab56aad65768b0c 100644 (file)
@@ -11,13 +11,6 @@ FurnitureComponent :: struct {
 
     furniture_type: Furniture_Type;
     taken := false;
-    sprite: Sprite;
-
-    init :: (use this: ^FurnitureComponent) {
-        sprite.pos = .{0, 32};
-        sprite.size = .{32, 32};
-        sprite.color = .{1, 1, 1};
-    }
 
     try_take :: (use this: ^FurnitureComponent) -> bool {
         if taken do return false;
index 87b4d828a07cd4a2d840da03f7794ca2f74763e3..bb94c8df539fdf979cfdfb11b9276d77e6605d67 100644 (file)
@@ -26,7 +26,7 @@ PatronComponent :: struct {
     added :: (use this: ^PatronComponent, entity: ^Entity) {
         entity.flags |= .Interactable;
 
-        scene->create_and_add(entity, InteractableComponent) {
+        scene->modify_component(entity, InteractableComponent) {
             comp.interact = interact;
         }
     }
index f5c52344b1c4bdb6b735cc44a280d01c8a48be89..8e91e0bed1f466d2131a7da6ea0b1022c6034167 100644 (file)
@@ -20,7 +20,7 @@ wall_create :: (scene: ^Scene, pos, size: Vector2) -> ^Entity {
     this.size = size;
     this.flags |= .Solid;
 
-    scene->create_and_add(this, RenderComponent) {
+    scene->modify_component(this, RenderComponent) {
         comp.func = Wall.render;
     }
 
@@ -80,10 +80,10 @@ door_create :: (scene: ^Scene, pos, size: Vector2) -> ^Entity {
     this.flags |= .Interactable;
     this.flags |= .Solid;
 
-    scene->create_and_add(this, DoorComponent)         {}
-    scene->create_and_add(this, RenderComponent)       { comp.func = Door.render; }
-    scene->create_and_add(this, SizeComponent)         { comp.func = Door.get_rect; }
-    scene->create_and_add(this, InteractableComponent) { comp.interact = Door.interact; }
+    scene->modify_component(this, DoorComponent)         {}
+    scene->modify_component(this, RenderComponent)       { comp.func = Door.render; }
+    scene->modify_component(this, SizeComponent)         { comp.func = Door.get_rect; }
+    scene->modify_component(this, InteractableComponent) { comp.interact = Door.interact; }
 
     return this;
 }
index 12d3d085601d2dce5d94cded3cb2d83c2af9731a..eebbf0a7cab06410e057fa7c7e9d5605e0fc6e53 100644 (file)
@@ -97,8 +97,8 @@ item_store_get_item :: (use this: ^Item_Store, id: str) -> ^Item {
         this.size = .{0, 0};
         this.flags |= .Carryable;
 
-        scene->create_and_add(this, RenderComponent) { comp.func = render; comp.layer = 10; }
-        scene->create_and_add(this, ItemComponent)   {}
+        scene->modify_component(this, RenderComponent) { comp.func = render; comp.layer = 10; }
+        scene->modify_component(this, ItemComponent)   {}
         return this;
     }
 
index 968afba1a69ca4226ed9cba52a1aa8c98bf8cb4f..7ee3beb87ef6a91ac9cbdc020cd9e70fe77c0b17 100644 (file)
@@ -64,6 +64,22 @@ RenderComponent :: struct {
     color := Color.{1, 1, 1};
 }
 
+SpriteRenderComponent :: struct {
+    use base: Component;
+    sprite: Sprite;
+
+    added :: (use comp: ^SpriteRenderComponent, entity: ^Entity) {
+        scene->modify_component(entity, RenderComponent) {
+            comp.func = SpriteRenderComponent.render;
+        }
+    }
+
+    render :: (entity: ^Entity) {
+        sprite := entity->get(SpriteRenderComponent);
+        sprite.sprite->render(entity->get_rect());
+    }
+}
+
 SizeComponent :: struct {
     use base: Component;
     func : (e: ^Entity) -> Rect;
@@ -148,7 +164,7 @@ Scene :: struct {
 
     query_by_component :: scene_query_by_component;
     create_component :: scene_create_component;
-    create_and_add :: scene_create_and_add;
+    modify_component :: scene_modify_component;
 
     create_from_schematic :: scene_create_from_schematic;
 
@@ -255,16 +271,19 @@ scene_create_component :: (use this: ^Scene, component_type: type_expr) -> ^Comp
     return comp;
 }
 
-scene_create_and_add :: macro (this: ^Scene, entity: ^Entity, $component_type: type_expr, init_block: Code) where IsComponent(^component_type) {
+scene_modify_component :: macro (this: ^Scene, entity: ^Entity, $component_type: type_expr, init_block: Code) where IsComponent(^component_type) {
     use package core.intrinsics.onyx {__initialize}
 
-    comp := cast(^component_type) this->create_component(component_type);
+    comp: ^component_type;
+    if !entity->has(component_type) {
+        comp = cast(^component_type) this->create_component(component_type);
 
-    // The 'create_component' function does not initailize the component, as it is not
-    // a compile time known parameter and therefore cannot know how to initialize it.
-    // This 'create_and_add' function is more often used by the programmer, so initializing
-    // the component here before returning is a good idea.
-    __initialize(comp);
+        // The 'create_component' function does not initailize the component, as it is not
+        // a compile time known parameter and therefore cannot know how to initialize it.
+        // This 'modify_component' function is more often used by the programmer, so initializing
+        // the component here before returning is a good idea.
+        __initialize(comp);
+    }
 
     #insert init_block;
     entity->add(comp);
index ca5a7dbe509ea2714be1247813c012f0a3717a9e..7aefc89f6bcc93783698d05d7f5349a50849003c 100644 (file)
@@ -8,7 +8,7 @@ Background :: struct {
             this.pos = .{0, 0};
             this.size = .{0, 0};
 
-            scene->create_and_add(this, RenderComponent) {
+            scene->modify_component(this, RenderComponent) {
                 comp.func = Background.render;
             }
 
index c21ca8442e3b3f6356165b543b28eeb355e0d1b1..1a7af358344791f2bd93dbd11a8f854b28328073 100644 (file)
@@ -12,17 +12,15 @@ Furniture :: struct {
         this.size = .{16, 16};
         this.flags |= .Solid;
 
-        scene->create_and_add(this, RenderComponent) {
-            comp.func = render;
-        }
+        scene->modify_component(this, FurnitureComponent) {}
 
-        scene->create_and_add(this, FurnitureComponent) {}
+        scene->modify_component(this, SpriteRenderComponent) {
+            comp.sprite.sheet = "./assets/images/spritesheet.png";
+            comp.sprite.pos = .{0, 32};
+            comp.sprite.size = .{32, 32};
+            comp.sprite.color = .{1, 1, 1};
+        }
 
         return this;
     }
-
-    render :: (entity: ^Entity) {
-        furniture := entity->get(FurnitureComponent);
-        furniture.sprite->render(entity->get_rect());
-    }
 }
\ No newline at end of file
index 1281629f05f75e9fd5971fb8e449c916064774d1..3a91d6a36c5da311bbcc1729239531e8d466f478 100644 (file)
@@ -12,13 +12,13 @@ Patron :: struct {
         this.size = .{32, 32};
         this.flags |= .Solid;
 
-        scene->create_and_add(this, RenderComponent) {
+        scene->modify_component(this, RenderComponent) {
             comp.func = render;
             comp.layer = 5;
             comp.color = .{1, 0, 0};
         }
 
-        scene->create_and_add(this, PatronComponent) {}
+        scene->modify_component(this, PatronComponent) {}
 
         return this;
     }
index d5ea2d5dcfebedfc5efe9e6db6ef79f048ff62ce..2e1752673cebd694ca1270697e6469aafa159c1f 100644 (file)
@@ -41,19 +41,19 @@ Player :: struct {
         this.size = .{32, 32};
         this.flags |= .Solid;
 
-        scene->create_and_add(this, SizeComponent) {
+        scene->modify_component(this, SizeComponent) {
             comp.func = (use this: ^Entity) => Rect.{pos.x - size.x / 2, pos.y, size.x, size.y / 2};
         }
 
-        scene->create_and_add(this, MovementComponent) {
+        scene->modify_component(this, MovementComponent) {
             comp.controls = controls;
         }
 
-        scene->create_and_add(this, PlayerComponent) {
+        scene->modify_component(this, PlayerComponent) {
             comp.holding = Entity_Nothing;
         }
 
-        scene->create_and_add(this, RenderComponent) {
+        scene->modify_component(this, RenderComponent) {
             comp.func = PlayerComponent.render;
             comp.color = .{1,1,1};
         }
index 8db88e84ccc8e9c02f1fc7febc9538efa4264b91..ca956e6426bcafd3c24b95189b89be46b3950d90 100644 (file)
@@ -11,21 +11,18 @@ Tap :: struct {
         this.flags |= .Solid;
         this.flags |= .Interactable;
 
-        scene->create_and_add(this, RenderComponent) {
-            comp.func = render;
+        scene->modify_component(this, SpriteRenderComponent) {
+            comp.sprite.sheet = "./assets/images/spritesheet.png";
+            comp.sprite.pos = .{ 0, 32 };
+            comp.sprite.size = .{ 32, 32 };
+            comp.sprite.color = .{ 1, 1, 1 };
         }
 
-        scene->create_and_add(this, DispenserComponent) {
+        scene->modify_component(this, DispenserComponent) {
             comp.item = "beer";
         }
 
         return this;
     }
-
-    render :: (use this: ^Entity) {
-        rect := this->get_rect();
-
-        immediate_subimage(^Spritesheet, rect.x, rect.y, rect.w, rect.h, 0*16, 2*16, 32, 32);
-    }
 }