Created
November 7, 2011 19:34
-
-
Save JesterXL/1345908 to your computer and use it in GitHub Desktop.
Corona Lua RPG Experience Bar via Pathfinder rules
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ExperienceBar = {} | |
function ExperienceBar:new(x, y, targetWidth, targetHeight) | |
local group = display.newGroup() | |
group.x = x | |
group.y = y | |
local grayBar = display.newRect(0, 0, targetWidth, targetHeight) | |
group:insert(grayBar) | |
grayBar:setFillColor(102, 102, 102, 200) | |
grayBar:setStrokeColor(51, 51, 51) | |
grayBar.strokeWidth = 2 | |
local greenBar = display.newRect(0, 0, targetWidth - 2, targetHeight - 2) | |
greenBar:setReferencePoint(display.TopLeftReferencePoint) | |
group:insert(greenBar) | |
greenBar:setFillColor(0, 153, 0) | |
greenBar.x = 1 | |
greenBar.y = 1 | |
function group:setValue(current, max) | |
local percent = current / max | |
if percent > 1 then | |
error("You cannot have a percent over 100%") | |
end | |
local desiredWidth = (targetWidth - 2) * percent | |
if percent ~= 0 then | |
greenBar.xScale = percent | |
greenBar.isVisible = true | |
else | |
greenBar.isVisible = false | |
end | |
greenBar.x = grayBar.x + greenBar.xReference | |
end | |
return group | |
end | |
return ExperienceBar |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
LevelModel = {} | |
function LevelModel:new(startingXP) | |
if startingXP == nil then | |
startingXP = 0 | |
end | |
local model = display.newGroup() | |
model.xp = startingXP | |
model.level = 1 | |
model.LEVEL_TABLE = { | |
2000, | |
5000, | |
9000, | |
15000, | |
23000, | |
35000, | |
51000, | |
75000, | |
105000, | |
155000, | |
220000, | |
315000, | |
445000, | |
635000, | |
890000, | |
1300000, | |
1800000, | |
2550000, | |
3600000 | |
} | |
function model:setLevel(value) | |
if self.level ~= value then | |
self.level = value | |
self:dispatchEvent({name="levelChanged", target=self}) | |
end | |
end | |
function model:setXP(value) | |
if self.xp ~= value then | |
self.xp = value | |
self:updateLevel() | |
self:dispatchEvent({name="xpChanged", target=self}) | |
end | |
end | |
function model:getCurrentLevelXP() | |
return self.LEVEL_TABLE[self.level] | |
end | |
function model:updateLevel() | |
assert(self.xp ~= nil, "You cannot have nil xp.") | |
local i = 1 | |
while self.LEVEL_TABLE[i] do | |
local value = self.LEVEL_TABLE[i] | |
if self.xp < value then | |
self:setLevel(i) | |
return true | |
end | |
i = i + 1 | |
end | |
end | |
function model:addXP(value) | |
local newValue = self.xp + value | |
self:setXP(newValue) | |
end | |
model:updateLevel() | |
return model | |
end | |
return LevelModel |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "ExperienceBar" | |
require "LevelModel" | |
bar = ExperienceBar:new(40, 100, 200, 20) | |
myText = display.newRetinaText("", 0, 0, native.systemFont, 16) | |
myText:setReferencePoint(display.TopLeftReferencePoint) | |
myText:setTextColor(255) | |
myText.x = 100 | |
myText.y = 50 | |
function onXPChanged(event) | |
local max = levelModel:getCurrentLevelXP() | |
local xp = levelModel.xp | |
bar:setValue(xp, max) | |
myText.text = "Level: " .. levelModel.level .. ", XP: " .. xp .. " / " .. max | |
myText.x = bar.x + myText.width / 2 | |
end | |
levelModel = LevelModel:new(0) | |
levelModel:addEventListener("xpChanged", onXPChanged) | |
increment = 100 | |
function onIncreaseXP() | |
levelModel:addXP(increment) | |
increment = math.floor(increment * 1.01) | |
end | |
timer.performWithDelay(100, onIncreaseXP, 0) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment