summaryrefslogtreecommitdiff
path: root/dyl.lua
diff options
context:
space:
mode:
Diffstat (limited to 'dyl.lua')
-rw-r--r--dyl.lua248
1 files changed, 168 insertions, 80 deletions
diff --git a/dyl.lua b/dyl.lua
index 6c2a012..6a337cd 100644
--- a/dyl.lua
+++ b/dyl.lua
@@ -1,64 +1,139 @@
+_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.Enemy)
+ :b_line_of_sight(e.line_of_sight)
+ :b_position(vec2(e.position))
+ :b_sprite_position(vec2(position))
+ :b_render_order(-1)
+ :b_live_for(_slashing_timer_sec)
+ :b_add_state(
+ States.Active, {
+ animation = {
+ pos_y = { sequence = { 115, 116, 117 }, dt = _slashing_timer_sec / 3, reflect = vec2(true, true) },
+ neg_y = { sequence = { 115, 116, 117 }, dt = _slashing_timer_sec / 3 },
+ pos_x = { sequence = { 112, 113, 114 }, dt = _slashing_timer_sec / 3 },
+ neg_x = { sequence = { 112, 113, 114 }, dt = _slashing_timer_sec / 3, reflect = vec2(true, false) }
+ }
+ }
+ )
+ :b_state(States.Active)
+ :build()
+end
+
+enemy = entity()
+function enemy:transition_state()
+end
+enemy:b_type(Entities.Enemy)
+ :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) }
+ }
+ }
+ )
+ :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()
+
+
bow = entity()
function bow:transition_state()
end
-bow
- :b_type(Entities.Bow)
+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) }
- }
- })
- :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 = bow.states[States.Equipped]
- })
+ :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.Drawing, {
+ animation = bow.states[States.Equipped]
+ }
+ )
:b_state(States.Equipped)
:build()
sword = entity()
-_slashing_timer_ms = 500
function sword:transition_state()
- if(btn(5)) then self:transition_to(States.Slashing)
- elseif self.state == States.Slashing and self.state_stopwatch > _slashing_timer_ms then self:transition_to(States.Equipped) end
+ if button_just_pressed(5) and self.state == States.Equipped then
+ self:transition_to(States.Slashing)
+ spawn_slashing_particle(self)
+ elseif self.state == States.Slashing and self.state_stopwatch > _slashing_timer_sec then
+ self:transition_to(States.Equipped)
+ 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(1)
+ :b_render_order(0)
:b_collidable()
- :b_add_state(States.Equipped, {
- animation={
- pos_y = { sequence = { 82 }, dt = 1, reflect = vec2(false, true) },
- neg_y = { sequence = { 82 }, dt = 1, reflect = vec2(true, false)},
- pos_x = { sequence = { 82 }, dt = 1 },
- neg_x = { sequence = { 82 }, dt = 1, reflect = vec2(true, false) }
- }
- })
- :b_add_state(States.Slashing, {
- animation={
- pos_y = { sequence = { 82, 82+16 }, dt = 1, reflect = vec2(false, true) },
- neg_y = { sequence = { 82, 82+16 }, dt = 1, reflect = vec2(true, false)},
- pos_x = { sequence = { 82, 82+16 }, dt = 1 },
- neg_x = { sequence = { 82, 82+16 }, dt = 1, reflect = vec2(true, false) }
- }
- })
+ :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_state(States.Equipped)
:build()
@@ -70,61 +145,74 @@ function player:transition_state()
self:transition_to(States.Walk)
end
end
-player:b_type(Entities.Player)
+player
+ :b_type(Entities.Player)
:b_line_of_sight(vec2(1, 0))
- :b_render_order(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_state("idle")
+ :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_state(States.Idle)
:b_equipped({ sword })
:build()
_walk_speed = 35 -- powerup increase?
function handle_input()
- dpos = vec2(0, 0)
- if btn(0) then dpos.x -= 1 end
- if btn(1) then dpos.x += 1 end
- if btn(3) then dpos.y += 1 end
- if btn(2) then dpos.y -= 1 end
+ dpos = vec2(0, 0)
+ if btn(0) then dpos.x -= 1 end
+ if btn(1) then dpos.x += 1 end
+ 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()
end
-step_t = time()
-function _update60()
- cls(0) -- clear here in case we want to print to screen outside of _draw
+_step_t = time()
+function _update()
+ -- clear here in case we want to print to screen outside of _draw
+ cls(0)
+
+ old_step = _step_t
+ _step_t = time()
+ step_dt = _step_t - old_step
- old_step = step_t
- step_t = time()
- step_dt = step_t - old_step
+ foreach(update_hooks, function(f) f(step_dt) end)
- handle_input()
- qsort(World, function(a, b) return a.equipped != nil end)
- foreach(World, function (e) e:update(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)
- run_collisions()
+ run_collisions()
+
+ World.cull_the_dead()
end
function _draw()
- foreach(qsort(World, function(a, b) return a.render_order < b.render_order end), function (e) e:render() end)
-end
+ qsort(World, 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