-
Notifications
You must be signed in to change notification settings - Fork 0
/
resource_manager.lua
117 lines (68 loc) · 2.29 KB
/
resource_manager.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
local _M = {}
local ResourseDefinitions = require('resource_definitions')
_M.RESOURCE_TYPE_IMAGE = 0
_M.RESOURCE_TYPE_TILED_IMAGE = 1
_M.RESOURCE_TYPE_FONT = 3
_M.RESOURCE_TYPE_SOUND = 4
ASSETS_PATH = 'assets/'
local cache = {}
function _M:get(name)
if not self:loaded(name) then
self:load(name)
end
return cache[name]
end
function _M:loaded(name)
return cache[name] ~= nil
end
function _M:loadImage(definition)
local image
local filePath = ASSETS_PATH .. definition.fileName
local halfWidth = definition.width / 2
local halfHeight = definition.height / 2
image = MOAIGfxQuad2D.new()
image:setTexture(filePath)
image:setRect(-halfWidth, -halfHeight, halfWidth, halfHeight)
return image
end
function _M:loadTiledImage(definition)
local tiledImage = MOAITileDeck2D.new()
local filePath = ASSETS_PATH .. definition.fileName
tiledImage:setTexture(filePath)
tiledImage:setSize(unpack(definition.tileMapSize))
return tiledImage
end
function _M:loadFont(definition)
local font = MOAIFont.new()
local filePath = ASSETS_PATH .. definition.fileName
font:loadFromTTF(filePath, definition.glyphs, definition.fontSize,
definition.dpi)
return font
end
function _M:loadSound(definition)
local sound = MOAIUntzSound.new()
local filePath = ASSETS_PATH .. definition.fileName
sound:load(filePath)
sound:setVolume(definition.volume)
sound:setLooping(definition.loop)
return sound
end
function _M:load(name)
local resourceDefinition = ResourseDefinitions:get(name)
if not resourceDefinition then
print("ERROR: Missing resource definition for " .. name)
else
local resource
if resourceDefinition.type == _M.RESOURCE_TYPE_IMAGE then
resource = self:loadImage(resourceDefinition)
elseif resourceDefinition.type == _M.RESOURCE_TYPE_TILED_IMAGE then
resource = self:loadTiledImage(resourceDefinition)
elseif resourceDefinition == _M.RESOURCE_TYPE_FONT then
resource = self:loadFont(resourceDefinition)
elseif resourceDefinition == _M.RESOURCE_TYPE_SOUND then
resource = self:loadSound(resourceDefinition)
end
cache[name] = resource
end
end
return _M