summaryrefslogtreecommitdiff
path: root/render/sprite.lua
blob: 65b34a0836bd8cd624b432fb70aae09f528c2c9e (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
local heartTypes = require "data.heartTypes"
sprite = {}

-- sprite resource management

local sprites = {}
local quads = {}

local spriteTypes = utils.copy(heartTypes)
table.insert(spriteTypes, "spiderweb")
table.insert(spriteTypes, "stunningstars")
table.insert(spriteTypes, "verticalMove")

local spriteSheets = {
    { name = "apple", w = 32, h = 32 },
    { name = "lancer", w = 32, h = 32 },
    { name = "spiger", w = 32, h = 32 },
    { name = "librarian", w = 32, h = 32 },
    { name = "citrus-litulon", w = 32, h = 32 },
    { name = "pokob", w = 32, h = 32 }
}

function sprite.get(type)
    return sprites[type]
end

function sprite.getQuad(type, index)
    if index then
        return quads[type][index]
    else return quads[type]
    end
end

function sprite.load()
    love.graphics.setDefaultFilter("nearest", "nearest")

    -- load single-image sprite
    for _, sprite in ipairs(spriteTypes) do
        local filename = "resources/sprites/" .. sprite .. ".png"
        sprites[sprite] = love.graphics.newImage(filename)
    end

    -- load sprite sheets and create quads for each sprite in the sheet
    for _, sheet in ipairs(spriteSheets) do
        local filename = "resources/sheets/" .. sheet.name .. ".png"
        local image = love.graphics.newImage(filename)
        sprites[sheet.name] = love.graphics.newImage(filename)

        local sheetQuads = {}

        local rows = math.floor(image:getHeight() / sheet.h)
        local columns = math.floor(image:getWidth() / sheet.w)

        local index = 1
        for row = 0, rows - 1 do
            for col = 0, columns - 1 do
                sheetQuads[index] = love.graphics.newQuad(
                    col * sheet.w, row * sheet.h,
                    sheet.w, sheet.h,
                    image:getWidth(), image:getHeight()
                )
                index = index + 1
            end
        end
        quads[sheet.name] = sheetQuads
    end
end

-- sprite drawer

function sprite.draw(type, x, y, angle, width, height)
    local sprite = sprites[type]
    love.graphics.draw(sprite, x, y, angle,
        width / sprite:getWidth(),
        height / sprite:getHeight()
    )
end

function sprite.drawObject(type, position, angle, width, height)
   sprite.draw(type, position.x, position.y, angle, width, height)
end

function sprite.drawSquare(type, position, size)
    sprite.drawObject(type, position, 0, size, size)
end

function sprite.drawSquareWithAngle(type, position, angle, size)
    sprite.drawObject(type, position, angle, size, size)
end

function sprite.drawQuad(sheet, index, x, y, w, h, angle)
    local quad = quads[sheet][index]  -- 根据精灵表名称和索引获取 Quad
    love.graphics.draw(sprites[sheet], quad, x, y, angle or 0, w, h)
end