110 lines
3.3 KiB
Lua
110 lines
3.3 KiB
Lua
LOVELY_INTEGRITY = '8f16206d263b8b20d4f441ae0cdc8450eef3f2bd3b801abb44802f6b1578b809'
|
|
|
|
--Class
|
|
AnimatedSprite = Sprite:extend()
|
|
|
|
--Class Methods
|
|
function AnimatedSprite:init(X, Y, W, H, new_sprite_atlas, sprite_pos)
|
|
Sprite.init(self,X, Y, W, H, new_sprite_atlas, sprite_pos)
|
|
self.offset = {x = 0, y = 0}
|
|
|
|
table.insert(G.ANIMATIONS, self)
|
|
if getmetatable(self) == AnimatedSprite then
|
|
table.insert(G.I.SPRITE, self)
|
|
end
|
|
end
|
|
|
|
function AnimatedSprite:rescale()
|
|
self.scale_mag = math.min(self.scale.x/self.T.w,self.scale.y/self.T.h)
|
|
end
|
|
|
|
function AnimatedSprite:reset()
|
|
self.atlas = G.ANIMATION_ATLAS[self.atlas.name]
|
|
self:set_sprite_pos({x = self.animation.x, y = self.animation.y})
|
|
end
|
|
|
|
function AnimatedSprite:set_sprite_pos(sprite_pos)
|
|
self.animation = {
|
|
x= sprite_pos and sprite_pos.x or 0,
|
|
y=sprite_pos and sprite_pos.y or 0,
|
|
frames=self.atlas.frames,current=0,
|
|
w=self.scale.x, h=self.scale.y}
|
|
|
|
self.frame_offset = 0
|
|
|
|
self.current_animation = {
|
|
current = 0,
|
|
frames = self.animation.frames,
|
|
w = self.animation.w,
|
|
h = self.animation.h}
|
|
|
|
self.image_dims = self.image_dims or {}
|
|
self.image_dims[1], self.image_dims[2] = self.atlas.image:getDimensions()
|
|
|
|
self.sprite = love.graphics.newQuad(
|
|
0,
|
|
self.animation.h*self.animation.y,
|
|
self.animation.w,
|
|
self.animation.h,
|
|
self.image_dims[1], self.image_dims[2])
|
|
self.offset_seconds = G.TIMERS.REAL
|
|
end
|
|
|
|
function AnimatedSprite:get_pos_pixel()
|
|
self.RETS.get_pos_pixel = self.RETS.get_pos_pixel or {}
|
|
self.RETS.get_pos_pixel[1] = self.current_animation.current
|
|
self.RETS.get_pos_pixel[2] = self.animation.y
|
|
self.RETS.get_pos_pixel[3] = self.animation.w
|
|
self.RETS.get_pos_pixel[4] = self.animation.h
|
|
return self.RETS.get_pos_pixel
|
|
end
|
|
|
|
function AnimatedSprite:draw_self()
|
|
if not self.states.visible then return end
|
|
|
|
prep_draw(self, 1)
|
|
love.graphics.scale(1/self.scale_mag)
|
|
love.graphics.setColor(G.C.WHITE)
|
|
love.graphics.draw(
|
|
self.atlas.image,
|
|
self.sprite,
|
|
0 ,0,
|
|
0,
|
|
self.VT.w/(self.T.w),
|
|
self.VT.h/(self.T.h)
|
|
)
|
|
love.graphics.pop()
|
|
end
|
|
|
|
function AnimatedSprite:animate()
|
|
local new_frame = math.floor(G.ANIMATION_FPS*(G.TIMERS.REAL - self.offset_seconds))%self.current_animation.frames
|
|
if new_frame ~= self.current_animation.current then
|
|
self.current_animation.current = new_frame
|
|
self.frame_offset = math.floor(self.animation.w*(self.current_animation.current))
|
|
self.sprite:setViewport(
|
|
self.frame_offset,
|
|
self.animation.h*self.animation.y,
|
|
self.animation.w,
|
|
self.animation.h)
|
|
end
|
|
if self.float then
|
|
self.T.r = 0.02*math.sin(2*G.TIMERS.REAL+self.T.x)
|
|
self.offset.y = -(1+0.3*math.sin(0.666*G.TIMERS.REAL+self.T.y))*self.shadow_parrallax.y
|
|
self.offset.x = -(0.7+0.2*math.sin(0.666*G.TIMERS.REAL+self.T.x))*self.shadow_parrallax.x
|
|
end
|
|
end
|
|
|
|
function AnimatedSprite:remove()
|
|
for k, v in pairs(G.ANIMATIONS) do
|
|
if v == self then
|
|
table.remove(G.ANIMATIONS, k)
|
|
end
|
|
end
|
|
for k, v in pairs(G.I.SPRITE) do
|
|
if v == self then
|
|
table.remove(G.I.SPRITE, k)
|
|
end
|
|
end
|
|
Sprite.remove(self)
|
|
end
|