106 lines
2.8 KiB
Lua
106 lines
2.8 KiB
Lua
|
ACTION_IDLE = 1
|
||
|
ACTION_WALK = 2
|
||
|
|
||
|
DIRECTION_NORTH = 1
|
||
|
DIRECTION_EAST = 2
|
||
|
DIRECTION_SOUTH = 3
|
||
|
DIRECTION_WEST = 4
|
||
|
|
||
|
function DoActorIdle(direction)
|
||
|
if playerAction == ACTION_IDLE and playerDirection == direction then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
ActorPhysicsSetVelocity(playerId, {x = 0, y = 0})
|
||
|
ActorAnimationSet(playerId, playerIdleAnimations[direction])
|
||
|
ActorAnimationPlay(playerId, true)
|
||
|
|
||
|
playerDirection = direction
|
||
|
playerAction = ACTION_IDLE
|
||
|
end
|
||
|
|
||
|
function DoActorWalk(direction)
|
||
|
if playerAction == ACTION_WALK and playerDirection == direction then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
ActorPhysicsSetVelocity(playerId, playerWalkVelocities[direction])
|
||
|
ActorAnimationSet(playerId, playerWalkAnimations[direction])
|
||
|
ActorAnimationPlay(playerId, true)
|
||
|
|
||
|
playerDirection = direction
|
||
|
playerAction = ACTION_WALK
|
||
|
end
|
||
|
|
||
|
function DoActorUse()
|
||
|
actorsIds = ActorPhysicsQueryShapeCollisions(playerId, ACTOR_SHAPE_TYPE_COLLISION_INTERACT)
|
||
|
for i, v in ipairs(actorsIds) do
|
||
|
ActorScriptSendMessage(v, "interact", { user = playerId })
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function OnActorCreate(id, parameters)
|
||
|
playerId = id
|
||
|
|
||
|
local actorAlias = ActorGetAlias(playerId)
|
||
|
local speedWalk = 125
|
||
|
|
||
|
playerWalkVelocities =
|
||
|
{
|
||
|
[DIRECTION_NORTH] = {x = 0, y = -speedWalk},
|
||
|
[DIRECTION_EAST] = {x = speedWalk, y = 0},
|
||
|
[DIRECTION_SOUTH] = {x = 0, y = speedWalk},
|
||
|
[DIRECTION_WEST] = {x = -speedWalk, y = 0}
|
||
|
}
|
||
|
|
||
|
playerWalkAnimations =
|
||
|
{
|
||
|
[DIRECTION_NORTH] = actorAlias .. ".Walk.N",
|
||
|
[DIRECTION_EAST] = actorAlias .. ".Walk.E",
|
||
|
[DIRECTION_SOUTH] = actorAlias .. ".Walk.S",
|
||
|
[DIRECTION_WEST] = actorAlias .. ".Walk.W"
|
||
|
}
|
||
|
|
||
|
playerIdleAnimations =
|
||
|
{
|
||
|
[DIRECTION_NORTH] = actorAlias .. ".Idle.N",
|
||
|
[DIRECTION_EAST] = actorAlias .. ".Idle.E",
|
||
|
[DIRECTION_SOUTH] = actorAlias .. ".Idle.S",
|
||
|
[DIRECTION_WEST] = actorAlias .. ".Idle.W",
|
||
|
}
|
||
|
|
||
|
local directionValues =
|
||
|
{
|
||
|
["north"] = DIRECTION_NORTH,
|
||
|
["south"] = DIRECTION_SOUTH,
|
||
|
["west"] = DIRECTION_WEST,
|
||
|
["east"] = DIRECTION_EAST
|
||
|
}
|
||
|
|
||
|
local direction = directionValues[parameters.direction]
|
||
|
assert(direction ~= nil)
|
||
|
|
||
|
DoActorIdle(direction)
|
||
|
end
|
||
|
|
||
|
function OnActorUpdate(elapsed)
|
||
|
if InputIsKeyTriggered(META_KEY_USE) then
|
||
|
DoActorUse()
|
||
|
return
|
||
|
elseif InputIsKeyPressed(META_KEY_UP) then
|
||
|
DoActorWalk(DIRECTION_NORTH)
|
||
|
return
|
||
|
elseif InputIsKeyPressed(META_KEY_DOWN) then
|
||
|
DoActorWalk(DIRECTION_SOUTH)
|
||
|
return
|
||
|
elseif InputIsKeyPressed(META_KEY_LEFT) then
|
||
|
DoActorWalk(DIRECTION_WEST)
|
||
|
return
|
||
|
elseif InputIsKeyPressed(META_KEY_RIGHT) then
|
||
|
DoActorWalk(DIRECTION_EAST)
|
||
|
return
|
||
|
end
|
||
|
|
||
|
DoActorIdle(playerDirection)
|
||
|
end
|