summaryrefslogtreecommitdiff
path: root/dyl.lua
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2026-04-29 19:26:18 -0700
committerElizabeth Alexander Hunt <me@liz.coffee>2026-04-29 19:26:18 -0700
commit48491750e4ece19d2252592850b75d100afc2455 (patch)
tree54a1edb6f390053c0ecee47da7e6121a9a387839 /dyl.lua
parent42aeb43e2c8a959f5ea1f9a33cfe63d667321c56 (diff)
downloaddyl8-48491750e4ece19d2252592850b75d100afc2455.tar.gz
dyl8-48491750e4ece19d2252592850b75d100afc2455.zip
The refactor from HELL
Diffstat (limited to 'dyl.lua')
-rw-r--r--dyl.lua349
1 files changed, 191 insertions, 158 deletions
diff --git a/dyl.lua b/dyl.lua
index bd024ef..1517438 100644
--- a/dyl.lua
+++ b/dyl.lua
@@ -1,18 +1,13 @@
-_slashing_timer_sec = 0.12
-function spawn_slashing_particle(e)
- slash_animation = entity()
- _slash_animation_distance = 3
- function slash_animation:transition_state()
- -- TODO: Find a better place to put this lol. This has nothing to do with state
- -- transitions
- slash_animation:equipped_from(e, _slash_animation_distance)
- end
- return slash_animation:b_type(Entities.Particle)
- :b_line_of_sight(e.line_of_sight)
- :b_position(vec2(e.position))
- :b_sprite_position(vec2(position))
+_slashing_timer_sec = .12
+_slash_animation_distance = 3
+function slashing_particle(following)
+ SlashingParticleBuilder = EntityBuilder:new(World)
+ :b_type(Entities.Particle)
:b_render_order(-1)
:b_live_for(_slashing_timer_sec)
+ :b_position(vec2(following.position))
+ :b_sprite_position(vec2(following.sprite_position))
+ :b_line_of_sight(vec2(following.line_of_sight))
:b_add_state(
States.Active, {
animation = {
@@ -24,161 +19,200 @@ function spawn_slashing_particle(e)
}
)
:b_state(States.Active)
- :build()
-end
+ function SlashingParticleBuilder:transition_state()
+ end
-enemy = entity()
-function enemy:transition_state()
+ return SlashingParticleBuilder:build()
end
-enemy:b_type(Entities.Enemy)
- :b_health(100)
- :b_position(vec2(30, 40))
- :b_sprite_position(vec2(30, 30))
- :b_line_of_sight(vec2(1, 0))
- :b_render_order(1)
- :b_collidable()
- :b_add_state(
- States.Idle, {
- animation = {
- pos_y = { sequence = { 32, 33 }, dt = 1 },
- neg_y = { sequence = { 32, 33 }, dt = 1 },
- pos_x = { sequence = { 32, 33 }, dt = 1 },
- neg_x = { sequence = { 32, 33 }, dt = 1, reflect = vec2(true, false) }
+
+function enemy()
+ EnemyBuilder = EntityBuilder:new(World)
+ function EnemyBuilder:transition_state()
+ end
+ EnemyBuilder:b_type(Entities.Enemy)
+ :b_health(100)
+ :b_position(vec2(30, 40))
+ :b_sprite_position(vec2(30, 40))
+ :b_line_of_sight(vec2(1, 0))
+ :b_render_order(1)
+ :b_collidable()
+ :b_add_state(
+ States.Idle, {
+ animation = {
+ pos_y = { sequence = { 32, 33 }, dt = 1 },
+ neg_y = { sequence = { 32, 33 }, dt = 1 },
+ pos_x = { sequence = { 32, 33 }, dt = 1 },
+ neg_x = { sequence = { 32, 33 }, dt = 1, reflect = vec2(true, false) }
+ }
}
- }
- )
- :b_add_state(
- States.Walk, {
- animation = {
- pos_x = { sequence = { 32, 34 }, dt = 0.20 },
- neg_x = { sequence = { 32, 34 }, dt = 0.20, reflect = vec2(true, false) },
- pos_y = { sequence = { 32, 34 }, dt = 0.20 },
- neg_y = { sequence = { 32, 34 }, dt = 0.20 }
+ )
+ :b_add_state(
+ States.Walk, {
+ animation = {
+ pos_x = { sequence = { 32, 34 }, dt = 0.20 },
+ neg_x = { sequence = { 32, 34 }, dt = 0.20, reflect = vec2(true, false) },
+ pos_y = { sequence = { 32, 34 }, dt = 0.20 },
+ neg_y = { sequence = { 32, 34 }, dt = 0.20 }
+ }
}
- }
- )
- :b_state(States.Walk)
- :b_equipped({ sword })
- :build()
-
+ )
+ :b_state(States.Walk)
+ return EnemyBuilder:build()
+end
-bow = entity()
-function bow:transition_state()
+function wife()
+ WifeBuilder = EntityBuilder:new(World)
+ function WifeBuilder:transition_state()
+ end
+ WifeBuilder:b_type(Entities.Wife)
+ :b_line_of_sight(vec2(1, 0))
+ :b_render_order(2)
+ :b_collidable()
+ :b_position(vec2(50, 50))
+ :b_sprite_position(vec2(30, 30))
+ :b_add_state(
+ States.Idle, {
+ animation = {
+ pos_y = { sequence = { 16, 17 }, dt = 1 },
+ neg_y = { sequence = { 16, 17 }, dt = 1 },
+ pos_x = { sequence = { 16, 17 }, dt = 1 },
+ neg_x = { sequence = { 16, 17 }, dt = 1, reflect = vec2(true, false) }
+ }
+ }
+ )
+ :b_state(States.Idle)
+ return WifeBuilder:build()
end
-bow:b_type(Entities.Bow)
- :b_position(vec2(0, 0))
- :b_sprite_position(vec2(0, 0))
- :b_line_of_sight(vec2(1, 0))
- :b_render_order(1)
- :b_collidable()
- :b_add_state(
- States.Equipped, {
- animation = {
- pos_y = { sequence = { 96 }, dt = 1, reflect = vec2(false, true) },
- neg_y = { sequence = { 96 }, dt = 1 },
- pos_x = { sequence = { 80 }, dt = 1 },
- neg_x = { sequence = { 80 }, dt = 1, reflect = vec2(true, false) }
+
+function bow()
+ BowBuilder = EntityBuilder:new(World)
+ function BowBuilder:transition_state()
+ end
+ BowBuilder:b_type(Entities.Bow)
+ :b_position(vec2(0, 0))
+ :b_sprite_position(vec2(0, 0))
+ :b_line_of_sight(vec2(1, 0))
+ :b_render_order(1)
+ :b_collidable()
+ :b_add_state(
+ States.Equipped, {
+ animation = {
+ pos_y = { sequence = { 96 }, dt = 1, reflect = vec2(false, true) },
+ neg_y = { sequence = { 96 }, dt = 1 },
+ pos_x = { sequence = { 80 }, dt = 1 },
+ neg_x = { sequence = { 80 }, dt = 1, reflect = vec2(true, false) }
+ }
+ }
+ )
+ :b_add_state(
+ States.Drawn, {
+ animation = {
+ pos_y = { sequence = { 81 }, dt = 1, reflect = vec2(false, true) },
+ neg_y = { sequence = { 81 }, dt = 1 },
+ pos_x = { sequence = { 81 }, dt = 1 },
+ neg_x = { sequence = { 81 }, dt = 1, reflect = vec2(true, false) }
+ }
}
- }
- )
- :b_add_state(
- States.Drawn, {
- animation = {
- pos_y = { sequence = { 81 }, dt = 1, reflect = vec2(false, true) },
- neg_y = { sequence = { 81 }, dt = 1 },
- pos_x = { sequence = { 81 }, dt = 1 },
- neg_x = { sequence = { 81 }, dt = 1, reflect = vec2(true, false) }
+ )
+ :b_add_state(
+ States.Drawing, {
+ animation = BowBuilder.states[States.Equipped]
}
- }
- )
- :b_add_state(
- States.Drawing, {
- animation = bow.states[States.Equipped]
- }
- )
- :b_state(States.Equipped)
- :build()
+ )
+ :b_state(States.Equipped)
+ return BowBuilder:build()
+end
-sword = entity()
-_attack_burst_sec = 0.200
-_sword_damage = { amount = 2, knockback = { magnitude = 200, time = 0.080 } }
-function sword:transition_state()
- if button_just_pressed(5) and self.state == States.Equipped and self.state_stopwatch > _attack_burst_sec then
- self:transition_to(States.Slashing)
- spawn_slashing_particle(self)
- self.damage = _sword_damage
- elseif self.state == States.Slashing and self.state_stopwatch > _slashing_timer_sec then
- self.damage = nil
- self:transition_to(States.Equipped)
+function sword()
+ _attack_burst_sec = 0.200
+ _sword_damage = { amount = 2, knockback = { magnitude = 200, time = 0.080 } }
+ SwordBuilder = EntityBuilder:new(World)
+ function SwordBuilder:transition_state()
+ if button_just_pressed(5) and self.state == States.Equipped and self.state_stopwatch > _attack_burst_sec then
+ self:transition_to(States.Slashing)
+ self:equip(slashing_particle(self))
+ self.damage = _sword_damage
+ elseif self.state == States.Slashing and self.state_stopwatch > _slashing_timer_sec then
+ self.damage = nil
+ self:transition_to(States.Equipped)
+ end
end
-end
-sword:b_type(Entities.Sword)
- :b_line_of_sight(vec2(1, 0))
- :b_position(vec2(0, 0))
- :b_sprite_position(vec2(0, 0))
- :b_render_order(0)
- :b_collidable()
- :b_add_state(
- States.Equipped, {
- animation = {
- pos_y = { sequence = { 99 }, dt = 1, reflect = vec2(false, true) },
- neg_y = { sequence = { 99 }, dt = 1, reflect = vec2(true, false) },
- pos_x = { sequence = { 98 }, dt = 1 },
- neg_x = { sequence = { 98 }, dt = 1, reflect = vec2(true, false) }
+ SwordBuilder:b_type(Entities.Sword)
+ :b_line_of_sight(vec2(1, 0))
+ :b_position(vec2(0, 0))
+ :b_sprite_position(vec2(0, 0))
+ :b_render_order(0)
+ :b_collidable()
+ :b_add_state(
+ States.Equipped, {
+ animation = {
+ pos_y = { sequence = { 99 }, dt = 1, reflect = vec2(false, true) },
+ neg_y = { sequence = { 99 }, dt = 1, reflect = vec2(true, false) },
+ pos_x = { sequence = { 98 }, dt = 1 },
+ neg_x = { sequence = { 98 }, dt = 1, reflect = vec2(true, false) }
+ }
}
- }
- )
- :b_add_state(
- States.Slashing, {
- animation = {
- pos_y = { sequence = { 82, 98 }, dt = _slashing_timer_sec / 2, reflect = vec2(false, true) },
- neg_y = { sequence = { 82, 98 }, dt = _slashing_timer_sec / 2, reflect = vec2(true, false) },
- pos_x = { sequence = { 82, 99 }, dt = _slashing_timer_sec / 2, reflect = vec2(false, false)},
- neg_x = { sequence = { 82, 99 }, dt = _slashing_timer_sec / 2, reflect = vec2(true, false) }
+ )
+ :b_add_state(
+ States.Slashing, {
+ animation = {
+ pos_y = { sequence = { 82, 98 }, dt = _slashing_timer_sec / 2, reflect = vec2(false, true) },
+ neg_y = { sequence = { 82, 98 }, dt = _slashing_timer_sec / 2, reflect = vec2(true, false) },
+ pos_x = { sequence = { 82, 99 }, dt = _slashing_timer_sec / 2, reflect = vec2(false, false)},
+ neg_x = { sequence = { 82, 99 }, dt = _slashing_timer_sec / 2, reflect = vec2(true, false) }
+ }
}
- }
- )
- :b_state(States.Equipped)
- :build()
+ )
+ :b_state(States.Equipped)
+ return SwordBuilder:build()
+end
+
+_enemy = enemy()
+_sword = sword()
+_wife = wife()
+_bow = bow()
-player = entity()
-function player:transition_state()
- if (self.velocity.x == 0 and self.velocity.y == 0) then
- self:transition_to(States.Idle)
- else
- self:transition_to(States.Walk)
+function player()
+ PlayerBuilder = EntityBuilder:new(World)
+ function PlayerBuilder:transition_state()
+ if (self.velocity.x == 0 and self.velocity.y == 0) then
+ self:transition_to(States.Idle)
+ else
+ self:transition_to(States.Walk)
+ end
end
-end
-player
- :b_type(Entities.Player)
- :b_line_of_sight(vec2(1, 0))
- :b_render_order(2)
- :b_collidable()
- :b_position(vec2(30, 30))
- :b_sprite_position(vec2(30, 30))
- :b_add_state(
- States.Idle, {
- animation = {
- pos_y = { sequence = { 3, 19 }, dt = 1 },
- neg_y = { sequence = { 6, 22 }, dt = 1 },
- pos_x = { sequence = { 0, 1 }, dt = 1 },
- neg_x = { sequence = { 0, 1 }, dt = 1, reflect = vec2(true, false) }
+ PlayerBuilder
+ :b_type(Entities.Player)
+ :b_line_of_sight(vec2(1, 0))
+ :b_render_order(2)
+ :b_collidable()
+ :b_position(vec2(30, 30))
+ :b_sprite_position(vec2(30, 30))
+ :b_add_state(
+ States.Idle, {
+ animation = {
+ pos_y = { sequence = { 3, 19 }, dt = 1 },
+ neg_y = { sequence = { 6, 22 }, dt = 1 },
+ pos_x = { sequence = { 0, 1 }, dt = 1 },
+ neg_x = { sequence = { 0, 1 }, dt = 1, reflect = vec2(true, false) }
+ }
}
- }
- )
- :b_add_state(
- States.Walk, {
- animation = {
- pos_x = { sequence = { 2, 0 }, dt = 0.20 },
- neg_x = { sequence = { 2, 0 }, dt = 0.20, reflect = vec2(true, false) },
- pos_y = { sequence = { 4, 5 }, dt = 0.20 },
- neg_y = { sequence = { 7, 8 }, dt = 0.20 }
+ )
+ :b_add_state(
+ States.Walk, {
+ animation = {
+ pos_x = { sequence = { 2, 0 }, dt = 0.20 },
+ neg_x = { sequence = { 2, 0 }, dt = 0.20, reflect = vec2(true, false) },
+ pos_y = { sequence = { 4, 5 }, dt = 0.20 },
+ neg_y = { sequence = { 7, 8 }, dt = 0.20 }
+ }
}
- }
- )
- :b_state(States.Idle)
- :b_equipped({ sword })
- :build()
+ )
+ :b_state(States.Idle)
+ return PlayerBuilder:build()
+end
+_player = player()
+_player:equip(_sword)
_walk_speed = 35 -- powerup increase?
function handle_input()
@@ -188,7 +222,7 @@ function handle_input()
if btn(3) then dpos.y += 1 end
if btn(2) then dpos.y -= 1 end
- player.velocity = dpos:normal() * _walk_speed
+ _player.velocity = dpos:normal() * _walk_speed
end
function _init()
@@ -206,8 +240,7 @@ function _update()
foreach(update_hooks, function(f) f(step_dt) end)
handle_input()
- World.foreach(function(e) if (not e.equipped) then e:update(step_dt) end end)
- World.foreach(function(e) if (e.equipped) then e:update(step_dt) end end)
+ World.foreach(function(e) e:update(step_dt) end)
run_collisions()
@@ -215,8 +248,8 @@ function _update()
end
function _draw()
- qsort(World, function(a, b) return b.render_order < a.render_order end)
- World.foreach(function(e)
- e:render()
+ World.sort(function(a, b)
+ return b.render_order < a.render_order
end)
+ World.foreach(function(e) e:render() end)
end \ No newline at end of file