Skip to content

Instantly share code, notes, and snippets.

@Midiman
Created December 23, 2016 00:15
Show Gist options
  • Save Midiman/717df3a7f101213877de32222b9bc6e7 to your computer and use it in GitHub Desktop.
Save Midiman/717df3a7f101213877de32222b9bc6e7 to your computer and use it in GitHub Desktop.
Behavior example
local anchor = require "libs.anchor"
local baton = require "libs.baton.baton"
local cpml = require "libs.cpml"
local bump = require "libs.bump.bump"
local behavior = require "libs.knife.knife.behavior"
local _colors = {
Background = cpml.color(34, 32, 52, 255),
Player = cpml.color(203, 219, 252, 255),
Collision = cpml.color(102, 57, 49, 255)
}
local _controls = {
-- Baton example stuff
left = {'key:left', 'axis:leftx-', 'button:dpleft'},
right = {'key:right', 'axis:leftx+', 'button:dpright'},
up = {'key:up', 'axis:lefty-', 'button:dpup'},
down = {'key:down', 'axis:lefty+', 'button:dpdown'},
fire1 = {'key:z', 'button:a'},
fire2 = {'key:x', 'button:x'},
fire3 = {'key:c', 'button:b'},
start = {'key:enter', 'button:start' }
}
local state = {}
-- Lets pretend that State is also the Map
function state:enter(state)
self.input = baton.new(
_controls,
love.joystick.getJoysticks()[1])
anchor:set_overscan(0)
self.input.deadzone = 0.125
self.player = {
world = nil,
pos = { x = 0, y = 0 },
size = { w = 32, h = 48 },
speed = 320,
behavior = behavior({
default = {
{ duration = 0, color = cpml.color(0,0,0,255), after = "idle_loop" }
},
idle_loop = {
{ duration = 0.2, color = cpml.color(223, 113, 38, 255) },
{ duration = 0.2, color = cpml.color(251, 242, 54, 255), after = "idle_loop" },
}
}),
update = function(self, dt)
self.behavior:update(dt)
end,
move = function(self, h, v)
local mx, my = (self.speed * h), (self.speed * v)
if mx ~= 0 or my ~= 0 then
self.pos.x, self.pos.y, cols, cols_len = self.world:move(self, self.pos.x + mx, self.pos.y + my)
end
end
}
self.colls = {
{ x = 0, y = 560, w = 1280, h = 128}
}
self.world = bump.newWorld(40)
self.player.world = self.world
self.world:add(
self.player,
self.player.pos.x,
self.player.pos.y,
self.player.size.w,
self.player.size.h
)
for i, col in pairs(self.colls) do
self.world:add(
col, col.x, col.y, col.w, col.h
)
end
end
function state:update( dt )
anchor:update()
--
self.input:update()
local hor = self.input:get 'right' - self.input:get 'left'
local ver = self.input:get 'down' - self.input:get 'up'
self.player:update(dt)
self.player:move(hor * dt, ver * dt)
end
function state:draw()
love.graphics.setColor( _colors.Background )
love.graphics.rectangle("fill",
anchor:left(),
anchor:top(),
anchor:width(),
anchor:height() )
love.graphics.setColor( _colors.Collision )
for i, c in ipairs(self.colls) do
love.graphics.rectangle("fill",
c.x, c.y, c.w, c.h
)
end
local _color = self.player.behavior.frame.color or _colors.Player
love.graphics.setColor( _color )
love.graphics.rectangle("fill",
self.player.pos.x, self.player.pos.y,
self.player.size.w, self.player.size.h
)
love.graphics.setColor( Color.White )
love.graphics.printf(
("%s %02i\n%s"):format(self.player.behavior.state, self.player.behavior.index, self.player.behavior.frame.duration), anchor:center_x() - 320/2, anchor:bottom() - 80, 320, "center"
)
end
return state
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment