Useful class: Stateful Objects

http://love2d.org/wiki/MindState

eg
[lua]require ‘MindState.lua’

Game = class(‘Game’, StatefulObject)

function Game:initialize()
super.initialize(self)
print(‘Creating global game variables’)
self:gotoState(‘MainMenu’)
end

local MainMenu = Game:addState(‘MainMenu’)
function MainMenu:enterState()
print(‘Creating the main menu buttons’)
end
function MainMenu:exitState()
print(‘Destroying the main menu buttons’)
end

local OptionsMenu = Game:addState(‘OptionsMenu’)
function OptionsMenu:enterState()
print(‘Creating the options menu buttons’)
end
function OptionsMenu:exitState()
print(‘Destroying the options menu buttons’)
end

local Play = Game:addState(‘Play’)
function Play:enterState()
print(‘Creating player, world and enemies’)
end
function Play:exitState()
print(‘Destroying the player, world and enemies’)
end[/lua][lua]require(‘MindState.lua’)

GirlFriend = class(‘GirlFriend’, StatefulObject)

function GirlFriend:getStatus()
print(“I’m bored. Entertain me”)
end

local Angry = GirlFriend:addState(‘Angry’)
function Angry:getStatus()
print(“I’m angry with you”)
end
function Angry:askWhy()
print(“You should know why”)
end

local AngrySilent = GirlFriend:addState(‘AngrySilent’, Angry) – AngrySilent “copies” Angry (in reality it is a subclass of Angry)
function AngrySilent:askWhy()
print("…")
end

gf = GirlFriend:new()
gf:getStatus()
gf:gotoState(‘Angry’)
gf:getStatus()
gf:askWhy()
gf:gotoState(‘AngrySilent’)
gf:getStatus()
gf:askWhy()

–[[ output:
I’m bored. Entertain me.
I’m angry with you
You should know why
I’m angry with you

]][/lua] [import]uid: 6645 topic_id: 3525 reply_id: 303525[/import]