/
Spritesheet.lua
88 lines (71 loc) · 1.61 KB
/
Spritesheet.lua
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
--[=[
Data model for sprite sheets
@class Spritesheet
]=]
local require = require(script.Parent.loader).load(script)
local Sprite = require("Sprite")
local Spritesheet = {}
Spritesheet.ClassName = "Spritesheet"
Spritesheet.__index = Spritesheet
--[=[
Constructs a new Spritesheet
@param texture string
@return Spritesheet
]=]
function Spritesheet.new(texture)
local self = setmetatable({}, Spritesheet)
self._texture = texture or error("no texture")
self._sprites = {}
return self
end
--[=[
Retrieves the preload asset ids to use
@return string
]=]
function Spritesheet:GetPreloadAssetId()
return self._texture
end
--[=[
@param keyCode any
@param position Vector2
@param size Vector2
Adds a named sprite at the given keyCode
]=]
function Spritesheet:AddSprite(keyCode, position, size)
assert(not self._sprites[keyCode], "Already exists")
local sprite = Sprite.new({
Texture = self._texture;
Position = position;
Size = size;
Name = tostring(keyCode);
})
self._sprites[keyCode] = sprite
end
--[=[
Retrieves the sprite for the given keyCode
@param keyCode any | EnumItem
@return Sprite?
]=]
function Spritesheet:GetSprite(keyCode)
if not keyCode then
warn("[Spritesheet.GetSprite] - Image name cannot be nil")
return nil
end
local sprite = self._sprites[keyCode]
if sprite then
return sprite
end
if typeof(keyCode) == "EnumItem" then
sprite = self._sprites[keyCode.Name]
end
return sprite
end
--[=[
Returns true if the sprite exists
@param keyCode any | EnumItem
@return boolean
]=]
function Spritesheet:HasSprite(keyCode)
return self:GetSprite(keyCode) ~= nil
end
return Spritesheet