RobloxAvatar / Avatar.lua
MCAce's picture
Avatar.lua
0988e96 verified
-- Avatar.lua
local Avatar = {}
Avatar.__index = Avatar
function Avatar:new(config)
local obj = {
name = config.name or "Player",
x = config.x or 0,
y = config.y or 0,
speed = config.speed or 100, -- Einheiten pro Sekunde
direction = "down", -- "up", "down", "left", "right"
state = "idle", -- "idle", "walk", "attack", ...
sprite = config.sprite or nil, -- Referenz auf Bild/Sprite-Objekt
frame = 1,
frameTime = 0,
frameSpeed = config.frameSpeed or 0.1,
animations = config.animations or {}
}
setmetatable(obj, Avatar)
return obj
end
-- Richtung und Zustand setzen
function Avatar:setState(state, direction)
if state then self.state = state end
if direction then self.direction = direction end
self.frame = 1
self.frameTime = 0
end
-- Bewegen
function Avatar:move(dx, dy, dt)
if dx == 0 and dy == 0 then
self:setState("idle")
return
end
self.x = self.x + dx * self.speed * dt
self.y = self.y + dy * self.speed * dt
-- Richtung automatisch setzen
if math.abs(dx) > math.abs(dy) then
self.direction = dx > 0 and "right" or "left"
else
self.direction = dy > 0 and "down" or "up"
end
self:setState("walk", self.direction)
end
-- Animation updaten
function Avatar:update(dt)
local animKey = self.state .. "_" .. self.direction
local anim = self.animations[animKey]
if anim then
self.frameTime = self.frameTime + dt
if self.frameTime >= self.frameSpeed then
self.frameTime = self.frameTime - self.frameSpeed
self.frame = self.frame + 1
if self.frame > #anim then
self.frame = 1
end
end
end
end
-- Zeichnen / Rendern (Pseudo-Code, abhängig von Engine)
function Avatar:draw()
if not self.sprite then
-- Fallback: simple Platzhalter-Darstellung
-- z.B. mit Love2D: love.graphics.rectangle("line", self.x, self.y, 32, 32)
return
end
local animKey = self.state .. "_" .. self.direction
local anim = self.animations[animKey]
if anim then
local quad = anim[self.frame]
-- Beispiel mit Love2D:
-- love.graphics.draw(self.sprite, quad, self.x, self.y)
else
-- Standardframe zeichnen
-- love.graphics.draw(self.sprite, self.x, self.y)
end
end
return Avatar