Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local character = require "characters.character"
- local sprite = require "sprite"
- -- these should probably be moved into a new module
- local function trackButton(event)
- local button = event.target
- if event.phase == "began" then
- display.getCurrentStage():setFocus(button)
- button._isFocused = true
- button._down = true
- button:dispatchEvent{name='Button.State'; target=button, down=true}
- elseif button._isFocused then
- if event.phase == "moved" then
- local bounds = button.contentBounds
- local isWithinBounds = bounds.xMin <= event.x and bounds.xMax >= event.x and bounds.yMin <= event.y and bounds.yMax >= event.y
- if isWithinBounds ~= button._down then
- button._down = isWithinBounds
- button:dispatchEvent{name='Button.State'; target=button, down=button._down}
- end
- elseif event.phase == "ended" or event.phase == "cancelled" then
- button:dispatchEvent{name='Button.State'; target=button, down=false}
- button:dispatchEvent{name='Button'; target=button, activate=button._down and event.phase == "ended"}
- display.getCurrentStage():setFocus(button, nil)
- button._down = nil
- button._isFocused = nil
- end
- end
- return true
- end
- end
- local button = {}
- function button.new(object)
- object:addEventListener('touch', trackButton)
- end
- local resistance = {}
- local menuSheet = sprite.newSpriteSheet("visuals/resistance_buttons.png", 60, 20)
- local menuButtonMove = sprite.newSpriteSet(menuSheet, 1, 2)
- local menuButtonAttack = sprite.newSpriteSet(menuSheet, 3, 2)
- local menuButtonDone = sprite.newSpriteSet(menuSheet, 5, 2)
- function resistance.ToggleMenu(group, self)
- group.isVisible = not group.isVisible
- if group.isVisible then
- self:prepare("Selected")
- else
- self:prepare("Stationary")
- end
- self:play()
- end
- local function triggerMenu(event)
- event.target.menu:Open()
- return true
- end
- local function monitorMenu(self, event)
- local sequence = "Stationary"
- if event.action == "open" then
- sequence = "Selected"
- end
- if self.sequence ~= sequence then
- self:prepare(sequence)
- self:play()
- end
- end
- local function animateButton(event)
- event.target.currentFrame = event.down and 2 or 1
- end
- local function newMenuButton(parent, spriteSet, x, y)
- local self = sprite.newSprite(spriteSet)
- parent:insert(self)
- self:setReferencePoint(display.TopLeftReferencePoint)
- self.x, self = x, y
- self:addEventListener('Button.State', animateButton)
- self:addEventListener('Button', parent)
- self:addEventListener('Button', self)
- return self
- end
- local menuFunctions = {}
- function menuFunctions:Open(event)
- self.isVisible = true
- self:dispatchEvent{name='Menu'; target=self, action='open'}
- end
- function menuFunctions:Close(event)
- self.isVisible = false
- self:dispatchEvent{name='Menu'; target=self, action='close'}
- end
- function menuFunctions:Button(event)
- if event.activate then
- self:Close()
- end
- end
- function resistance.Create(spritesheet, size, health, move, attack, defense, xTile, yTile)
- local self = character.Create(spritesheet, size, health, move, attack, defense, xTile, yTile)
- self:addEventListener("tap", triggerMenu)
- self.menu = display.newGroup() do local menu = self.menu
- menu.owner = self
- menu.x, menu.y = 145, 173
- menu.Block = display.newRect(0, 0, display.contentWidth, display.contentHeight)
- menu:insert(menu.Block)
- menu.Block:setFillColor(0, 0)
- menu.Block:addEventListener("tap", function() return true end)
- menu.Background = display.newImage("visuals/resistance_background.png", 0, 0)
- menu.Background:setReferencePoint(display.CenterReferencePoint)
- menu.Background.x, menu.Background.y = display.contentWidth / 2, display.contentHeight / 2
- menu:insert(menu.Background)
- menu.Icon = display.newImage(menu, ("visuals/character_" .. spritesheet .. "icon.png"), 0, -45)
- menu.ButtonMove = newMenuButton(menu, menuButtonMove, 0, 0)
- function menu.ButtonMove:Button(event)
- if event.activate then
- character.Move(self, 30, math.random(0, 15), math.random(0, 9))
- end
- end
- menu.ButtonAttack = newMenuButton(menu, menuButtonAttack, 65, 0)
- menu.ButtonDone = newMenuButton(menu, menuButtonDone, 130, 0)
- for name, method in pairs(menuFunctions) do
- menu[name] = method
- end
- menu.isVisible = false
- end
- self.Menu = monitorMenu
- self.menu:addEventListener('Menu', self)
- return self
- end
- return resistance
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement