aboutsummaryrefslogtreecommitdiff
path: root/src/sprite.lua
blob: b7a7541cd7d0d5fb4bb8e3ddb38b579ddede04d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Sprite = {}
Sprite.__index = Sprite

function Sprite.new(tex_name)
  local self = setmetatable({}, Sprite)

  self.tex = get_tex(tex_name)
  self.anim = get_anim(tex_name)

  self.active_tag = self.anim.default_tag
  self.frame = self.anim.tags[self.active_tag].from

  self.timer = 0

  local width, height = self.tex:getDimensions()
  self.width = width / self.anim.frame_count
  self.height = height

  return self
end

register_comp("Sprite", function(ent, tex_name)
  ent.sprite = Sprite.new(tex_name)
end)

function sprite_anim_sys(ent, dt)
  local sprite = ent.sprite
  local tag = sprite.anim.tags[sprite.active_tag]

  sprite.timer = sprite.timer + dt
  if sprite.timer > tag.duration then
    sprite.frame = sprite.frame + 1
    sprite.timer = 0
  end

  if sprite.frame >= tag.to then
    sprite.frame = tag.from
  end
  if sprite.frame < tag.from then
    sprite.frame = tag.from
  end
end

function sprite_draw_sys(ent)
  local sprite = ent.sprite

  local q = lg.newQuad(
    sprite.width * sprite.frame, 0,
    sprite.width, sprite.height,
    sprite.tex:getDimensions()
  )
  lg.draw(sprite.tex, q, ent.x or 0, ent.y or 0)
end