Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kikito/stateful.lua
Stateful classes for Lua
https://github.com/kikito/stateful.lua
Last synced: 3 months ago
JSON representation
Stateful classes for Lua
- Host: GitHub
- URL: https://github.com/kikito/stateful.lua
- Owner: kikito
- License: mit
- Created: 2011-09-22T21:07:54.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2017-08-15T10:05:49.000Z (over 7 years ago)
- Last Synced: 2024-10-20T10:24:19.369Z (3 months ago)
- Language: Lua
- Homepage:
- Size: 43 KB
- Stars: 175
- Watchers: 10
- Forks: 19
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: MIT-LICENSE.txt
Awesome Lists containing this project
- awesome-defold - stateful
README
# Stateful
[![Build Status](https://travis-ci.org/kikito/stateful.lua.svg?branch=master)](https://travis-ci.org/kikito/stateful.lua)
* Classes gain the capacity of creating "states"
* States can override instance methods and create new ones
* States are inherited by subclasses
* States are stackable - the state on the top of the stack is the most prioritary
* There are callback functions invoked automatically when a state is entered, exited, pushed, popped ...# Example
``` lua
local class = require 'middleclass'
local Stateful = require 'stateful'local Enemy = class('Enemy')
Enemy:include(Stateful)function Enemy:initialize(health)
self.health = health
endfunction Enemy:speak()
return 'My health is' .. tostring(self.health)
endlocal Immortal = Enemy:addState('Immortal')
-- overriden function
function Immortal:speak()
return 'I am UNBREAKABLE!!'
end-- added function
function Immortal:die()
return 'I can not die now!'
endlocal peter = Enemy:new(10)
peter:speak() -- My health is 10
peter:gotoState('Immortal')
peter:speak() -- I am UNBREAKABLE!!
peter:die() -- I can not die now!
peter:gotoState(nil)
peter:speak() -- My health is 10
```# Installation
First, make sure that you have downloaded and installed [middleclass](https://github.com/kikito/middleclass)
Just copy the stateful.lua file wherever you want it (for example on a lib/ folder). Then write this in any Lua file where you want to use it:
``` lua
local class = require 'middleclass'
local Stateful = require 'stateful'
```The `package.path` variable must be configured so that the folder in which stateful.lua is copied is available, of course.
# Specs
This project uses [busted](http://olivinelabs.com/busted/) for its specs. In order to run them, install busted, and then execute it on the top folder:
```
busted
```