From ee7077c7ff0c22a4909c15ab34aed777b45b977e Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Wed, 10 Feb 2021 18:06:35 -0500 Subject: Direction is preserved across map transitions now --- res/scripts/common.lua | 28 ++++++++++++++++++++++++++++ src/script_system.cpp | 26 +++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/res/scripts/common.lua b/res/scripts/common.lua index f43b2e0..0c0205b 100644 --- a/res/scripts/common.lua +++ b/res/scripts/common.lua @@ -7,6 +7,17 @@ SpeakerType = { NONHUMAN = 5 } +Direction = { + UP = 0, + UP_RIGHT = 1, + RIGHT = 2, + DOWN_RIGHT = 3, + DOWN = 4, + DOWN_LEFT = 5, + LEFT = 6, + UP_LEFT = 7 +} + function DisplayMessage(msg, name, type) message():displayMessage(msg, name, type) end @@ -57,9 +68,26 @@ function RemoveFadeout(length) setFadeoutProgress(0.0) end +function SetPartyDirection(spriteId, direction) + animation():setSpriteDirection(spriteId, direction) + + local sprite = getSprite(spriteId) + + for i=1,#sprite.followers do + animation():setSpriteDirection(sprite.followers[i], direction) + end +end + function ChangeMap(map, warp) + local playerId = getControllableSprite() + local playerSprite = getSprite(playerId) + local direction = playerSprite.dir + FadeToBlack(150) loadMap("../res/maps/" .. map .. ".tmx", warp) + + local newPlayerId = getControllableSprite() + SetPartyDirection(newPlayerId, direction) coroutine.yield() RemoveFadeout(150) end diff --git a/src/script_system.cpp b/src/script_system.cpp index a5e9403..6b35b73 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp @@ -10,6 +10,11 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { sol::lib::coroutine, sol::lib::math); + engine_.new_usertype( + "sprite", + "dir", &Sprite::dir, + "followers", &Sprite::followers); + engine_.new_usertype( "message", "displayMessage", &MessageSystem::displayMessage, @@ -18,7 +23,8 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { engine_.new_usertype( "animation", - "setSpriteAnimation", &AnimationSystem::setSpriteAnimation); + "setSpriteAnimation", &AnimationSystem::setSpriteAnimation, + "setSpriteDirection", &AnimationSystem::setSpriteDirection); engine_.new_usertype( "mixer", @@ -50,6 +56,24 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { return game_.getSpriteByAlias(alias); }); + engine_.set_function( + "getControllableSprite", + [&] () -> int { + for (int id : game_.getSprites()) { + Sprite& sprite = game_.getSprite(id); + if (sprite.controllable) { + return id; + } + } + return -1; + }); + + engine_.set_function( + "getSprite", + [&] (int id) -> Sprite& { + return game_.getSprite(id); + }); + engine_.set_function( "loadMap", [&] (std::string filename, std::string warpPoint) { -- cgit 1.4.1