From 0e1e97da9e8937d19b0101dcc1f3a16e3db495b6 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 6 Feb 2021 21:15:34 -0500 Subject: Added sound and animation changes to scripting --- src/game.cpp | 3 ++- src/game.h | 7 ++++++- src/main.cpp | 10 +++++----- src/script_system.cpp | 29 +++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/game.cpp b/src/game.cpp index 4ea7fd2..447b62a 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1,8 +1,9 @@ #include "game.h" -int Game::emplaceSprite() { +int Game::emplaceSprite(std::string alias) { int id = sprites_.size(); sprites_.emplace_back(); spriteIds_.push_back(id); + spritesByAlias_[alias] = id; return id; } diff --git a/src/game.h b/src/game.h index 2f1149d..87e23d3 100644 --- a/src/game.h +++ b/src/game.h @@ -43,7 +43,7 @@ public: }); } - int emplaceSprite(); + int emplaceSprite(std::string alias); const Sprite& getSprite(int id) const { return sprites_.at(id); @@ -57,6 +57,10 @@ public: return spriteIds_; } + int getSpriteByAlias(std::string alias) const { + return spritesByAlias_.at(alias); + } + auto spriteView() const { return ranges::views::transform([&] (int id) -> const Sprite& { return sprites_.at(id); @@ -85,6 +89,7 @@ private: std::vector spriteIds_; std::vector sprites_; + std::map spritesByAlias_; std::unique_ptr map_; Font font_; }; diff --git a/src/main.cpp b/src/main.cpp index 3ea92ae..c23897b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -25,29 +25,29 @@ void loop(Renderer& renderer) { auto map = std::make_unique("../res/maps/map1.tmx", renderer); game.setMap(std::move(map)); - int lucasSprite = game.emplaceSprite(); + int lucasSprite = game.emplaceSprite("lucas"); game.getSystem().initSprite(lucasSprite, {32, 32}); game.getSystem().setUpCollision(lucasSprite, {-8, -8}, {12, 8}); game.getSystem().initSprite(lucasSprite, "../res/sprites/lucas_anim.txt", renderer); game.getSprite(lucasSprite).controllable = true; game.getSystem().initSprite(lucasSprite); - int kumaSprite = game.emplaceSprite(); + int kumaSprite = game.emplaceSprite("kuma"); game.getSystem().initSprite(kumaSprite, {32, 32}); game.getSystem().initSprite(kumaSprite, "../res/sprites/kuma_anim.txt", renderer); game.getSystem().addSpriteToParty(lucasSprite, kumaSprite); - int dusterSprite = game.emplaceSprite(); + int dusterSprite = game.emplaceSprite("duster"); game.getSystem().initSprite(dusterSprite, {32, 32}); game.getSystem().initSprite(dusterSprite, "../res/sprites/duster_anim.txt", renderer); game.getSystem().addSpriteToParty(lucasSprite, dusterSprite); - int boneySprite = game.emplaceSprite(); + int boneySprite = game.emplaceSprite("boney"); game.getSystem().initSprite(boneySprite, {32, 32}); game.getSystem().initSprite(boneySprite, "../res/sprites/boney_anim.txt", renderer); game.getSystem().addSpriteToParty(lucasSprite, boneySprite); - int flintSprite = game.emplaceSprite(); + int flintSprite = game.emplaceSprite("flint"); game.getSystem().initSprite(flintSprite, {35*16, 19*16}); game.getSystem().setUpCollision(flintSprite, {-8, -8}, {12, 8}); game.getSystem().initSprite(flintSprite, "../res/sprites/flint_anim.txt", renderer); diff --git a/src/script_system.cpp b/src/script_system.cpp index 7f4729b..e2b117a 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp @@ -2,6 +2,7 @@ #include #include "game.h" #include "message_system.h" +#include "animation_system.h" ScriptSystem::ScriptSystem(Game& game) : game_(game) { engine_.open_libraries( @@ -15,12 +16,40 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { "hideCutsceneBars", &MessageSystem::hideCutsceneBars, "isMessageActive", sol::property(&MessageSystem::isMessageActive)); + engine_.new_usertype( + "animation", + "setSpriteAnimation", &AnimationSystem::setSpriteAnimation); + + engine_.new_usertype( + "mixer", + "playSound", &Mixer::playSound, + "loopSound", &Mixer::loopSound, + "stopChannel", &Mixer::stopChannel); + engine_.set_function( "message", [&] () -> MessageSystem& { return game_.getSystem(); }); + engine_.set_function( + "animation", + [&] () -> AnimationSystem& { + return game_.getSystem(); + }); + + engine_.set_function( + "mixer", + [&] () -> Mixer& { + return game_.getMixer(); + }); + + engine_.set_function( + "getSpriteByAlias", + [&] (std::string alias) -> int { + return game_.getSpriteByAlias(alias); + }); + engine_.script_file("../res/scripts/common.lua"); } -- cgit 1.4.1