/
alex_baut11
/
lua-container-game
Обзор
Документация
Войти
/
alex_baut11
/
lua-container-game
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
clickable.lua
87 строк
3 KB
AlexB
sm
29 дек 2025, 11:46
29 дек 2025, 11:46
d4f82fb
Код
Авторство
О чём код?
Item = {} Item.__index = Item local sprite = love.graphics.newImage("box.png") sprite:setFilter("nearest", "nearest") local opensprite = love.graphics.newImage("images/openbox.png") opensprite:setFilter("nearest", "nearest") local lsprite = love.graphics.newImage("images/light.png") lsprite:setFilter("nearest", "nearest") function Item:new(x, y, spr) local obj = { x = x or 0, y = y or 0, cost = 1.0, mousein = false, size=50, trash=false, active=true, name="old gum", sprite=love.graphics.newImage("images/"..spr..".png"), --потом предзагрузить sprite_scale={init=4,curr=4}, itemgeom={x=x+25,y=y,sc=0}, lr=0 } obj.sprite:setFilter("nearest", "nearest") setmetatable(obj, Item) return obj end function Item:update(dt) local mx,my = love.mouse.getPosition() if mx > self.x and mx < self.x + self.size and my > self.y and my < self.y + self.size then self.mousein = true flux.to(self.sprite_scale, 0.33, {curr=5.5}):ease("cubicout") else self.mousein = false flux.to(self.sprite_scale, 0.33, {curr=self.sprite_scale.init}):ease("cubicout") end end function Item:draw() local test_color = (self.mousein) and {1, 1, 1} or {1, 1, 1} love.graphics.setColor(test_color) -- love.graphics.rectangle("fill", self.x, self.y, self.size, self.size) if not self.active then local scale_factor = math.sin(love.timer.getTime() * 5) * 0.25 + 0.3 -- Получаем размеры спрайта local spriteWidth = lsprite:getWidth() local spriteHeight = lsprite:getHeight() -- Рисуем спрайт, центрируя по x и y love.graphics.draw( lsprite, self.itemgeom.x, -- координата центра X self.itemgeom.y, -- координата центра Y self.lr, -- вращение self.itemgeom.sc+scale_factor*6, -- масштаб X self.itemgeom.sc+scale_factor*6, -- масштаб Y spriteWidth / 2, -- origin X (сдвиг влево на половину ширины) spriteHeight / 2 -- origin Y (сдвиг вверх на половину высоты) ) love.graphics.draw(self.sprite, self.itemgeom.x, self.itemgeom.y, 0, self.itemgeom.sc, self.itemgeom.sc, 8, 8) love.graphics.draw(opensprite, self.x, self.y - self.size/2, 0, self.sprite_scale.curr, self.sprite_scale.curr) self.lr = self.lr + 0.3 else love.graphics.draw(sprite, self.x, self.y - self.size/2, 0, self.sprite_scale.curr, self.sprite_scale.curr) end end function Item:mousepressed(x, y, button) if button == 1 and self.mousein and self.active then self.active = false flux.to(self.itemgeom, 1, {sc=5,y=y-150}):ease("cubicout"):delay(0.2):after(self.itemgeom, 1, {x=10,y=10,sc=0}):ease("cubicout"):oncomplete(function () table.insert(player.inventory, self) self.trash = true end) end end return Item