From a8c80a3c66b917f9c8c387b593b0d3ae7462d798 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 23 Apr 2022 18:26:46 +0200 Subject: [PATCH] Adds C Interface for Item choice --- CInterface/Battling/TurnChoices.cpp | 23 +++++++++++++++++---- src/Battling/TurnChoices/ItemTurnChoice.hpp | 10 ++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/CInterface/Battling/TurnChoices.cpp b/CInterface/Battling/TurnChoices.cpp index 800636b..982fc4d 100644 --- a/CInterface/Battling/TurnChoices.cpp +++ b/CInterface/Battling/TurnChoices.cpp @@ -1,5 +1,6 @@ #include "../../src/Battling/TurnChoices/AttackTurnChoice.hpp" #include "../../src/Battling/TurnChoices/FleeTurnChoice.hpp" +#include "../../src/Battling/TurnChoices/ItemTurnChoice.hpp" #include "../../src/Battling/TurnChoices/PassTurnChoice.hpp" #include "../../src/Battling/TurnChoices/SwitchTurnChoice.hpp" #include "../Core.hpp" @@ -11,13 +12,24 @@ export_func AttackTurnChoice* CreatureLib_AttackTurnChoice_Construct(Creature* u } export_func void CreatureLib_AttackTurnChoice_Destruct(AttackTurnChoice* p) { delete p; } export_func FleeTurnChoice* CreatureLib_FleeTurnChoice_Construct(Creature* user) { return new FleeTurnChoice(user); } -export_func void CreatureLib_FleeTurnChoice_Destruct(AttackTurnChoice* p) { delete p; } +export_func void CreatureLib_FleeTurnChoice_Destruct(FleeTurnChoice* p) { delete p; } export_func PassTurnChoice* CreatureLib_PassTurnChoice_Construct(Creature* user) { return new PassTurnChoice(user); } -export_func void CreatureLib_PassTurnChoice_Destruct(AttackTurnChoice* p) { delete p; } +export_func void CreatureLib_PassTurnChoice_Destruct(PassTurnChoice* p) { delete p; } export_func SwitchTurnChoice* CreatureLib_SwitchTurnChoice_Construct(Creature* user, Creature* newCreature) { return new SwitchTurnChoice(user, newCreature); } -export_func void CreatureLib_SwitchTurnChoice_Destruct(AttackTurnChoice* p) { delete p; } +export_func void CreatureLib_SwitchTurnChoice_Destruct(SwitchTurnChoice* p) { delete p; } +export_func ItemTurnChoice* CreatureLib_ItemTurnChoice_ConstructWithoutTarget(Creature* user, + CreatureLib::Library::Item* item) { + return new ItemTurnChoice(user, item, {}); +} +export_func ItemTurnChoice* CreatureLib_ItemTurnChoice_ConstructWithTarget(Creature* user, + const CreatureLib::Library::Item* item, + u8 targetSide, u8 targetIndex) { + auto index = std::optional(CreatureIndex(targetSide, targetIndex)); + return new ItemTurnChoice(user, item, index); +} +export_func void CreatureLib_ItemTurnChoice_Destruct(SwitchTurnChoice* p) { delete p; } SIMPLE_GET_FUNC(BaseTurnChoice, GetKind, TurnChoiceKind) BORROWED_GET_FUNC(BaseTurnChoice, GetUser, Creature*) @@ -35,4 +47,7 @@ export_func u8 CreatureLib_AttackTurnChoice_GetTargetCreatureIndex(const AttackT return p->GetTarget().GetCreatureIndex(); } -OPTIONAL_GET_FUNC(SwitchTurnChoice, GetNewCreature, Creature*) \ No newline at end of file +OPTIONAL_GET_FUNC(SwitchTurnChoice, GetNewCreature, Creature*) + +SIMPLE_GET_FUNC(ItemTurnChoice, GetKind, TurnChoiceKind) +BORROWED_GET_FUNC(ItemTurnChoice, GetItem, const CreatureLib::Library::Item*) diff --git a/src/Battling/TurnChoices/ItemTurnChoice.hpp b/src/Battling/TurnChoices/ItemTurnChoice.hpp index d19828e..29c352f 100644 --- a/src/Battling/TurnChoices/ItemTurnChoice.hpp +++ b/src/Battling/TurnChoices/ItemTurnChoice.hpp @@ -10,7 +10,7 @@ namespace CreatureLib::Battling { std::optional _target; public: - ItemTurnChoice(ArbUt::BorrowedPtr user, const ArbUt::BorrowedPtr& item, + ItemTurnChoice(ArbUt::BorrowedPtr user, const ArbUt::BorrowedPtr& item, const std::optional& target) : BaseTurnChoice(user), _item(item), _target(target) {} ~ItemTurnChoice() override = default; @@ -19,6 +19,14 @@ namespace CreatureLib::Battling { [[nodiscard]] const ArbUt::BorrowedPtr& GetItem() const noexcept { return _item; } [[nodiscard]] const std::optional& GetTarget() const noexcept { return _target; } + + protected: + size_t ScriptCount() const override { return GetUser()->ScriptCount(); } + void GetActiveScripts(ArbUt::List& scripts) override { + GetOwnScripts(scripts); + GetUser()->GetActiveScripts(scripts); + } + void GetOwnScripts(ArbUt::List&) override {} }; }