From 1efffb64dfbc0d5ed8ca507aa05dd0c89adcfc81 Mon Sep 17 00:00:00 2001 From: CCHyper <73803386+CCHyper@users.noreply.github.com> Date: Sat, 12 Jun 2021 13:51:01 +0100 Subject: [PATCH] Implements "Give Credits" trigger action. --- .../taction/tactionext_functions.cpp | 69 +++++++++++++++++++ src/extensions/taction/tactionext_functions.h | 40 +++++++++++ src/extensions/taction/tactionext_hooks.cpp | 20 ++++++ src/vinifera_defines.h | 2 + 4 files changed, 131 insertions(+) create mode 100644 src/extensions/taction/tactionext_functions.cpp create mode 100644 src/extensions/taction/tactionext_functions.h diff --git a/src/extensions/taction/tactionext_functions.cpp b/src/extensions/taction/tactionext_functions.cpp new file mode 100644 index 000000000..7ad494341 --- /dev/null +++ b/src/extensions/taction/tactionext_functions.cpp @@ -0,0 +1,69 @@ +/******************************************************************************* +/* O P E N S O U R C E -- V I N I F E R A ** +/******************************************************************************* + * + * @project Vinifera + * + * @file TACTIONEXT_FUNCTIONS.CPP + * + * @author CCHyper + * + * @brief Contains the supporting functions for the extended TActionClass. + * + * @license Vinifera is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version + * 3 of the License, or (at your option) any later version. + * + * Vinifera is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. + * If not, see . + * + ******************************************************************************/ +#include "tactionext_functions.h" +#include "vinifera_defines.h" +#include "taction.h" +#include "house.h" +#include "housetype.h" +#include "object.h" +#include "objecttype.h" +#include "trigger.h" +#include "triggertype.h" +#include "debughandler.h" +#include "asserthandler.h" + + +/** + * #issue-158 + * + * Gives credits to the owner of the trigger. + * + * @author: CCHyper + */ +bool TAction_Give_Credits(TActionClass *taction, HouseClass *house, ObjectClass *object, TriggerClass *trigger, Cell *cell) +{ + if (!taction || !house) { + return false; + } + + int amount = taction->Data.Value; + + /** + * If positive, grant the cash bonus. + * If negative, take money from the house. + */ + if (amount != 0) { + if (amount < 0) { + house->Spend_Money(std::abs(amount)); + } else { + house->Refund_Money(amount); + } + } + + return true; +} diff --git a/src/extensions/taction/tactionext_functions.h b/src/extensions/taction/tactionext_functions.h new file mode 100644 index 000000000..4b7cd21e6 --- /dev/null +++ b/src/extensions/taction/tactionext_functions.h @@ -0,0 +1,40 @@ +/******************************************************************************* +/* O P E N S O U R C E -- V I N I F E R A ** +/******************************************************************************* + * + * @project Vinifera + * + * @file TACTIONEXT_FUNCTIONS.H + * + * @author CCHyper + * + * @brief Contains the supporting functions for the extended TActionClass. + * + * @license Vinifera is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version + * 3 of the License, or (at your option) any later version. + * + * Vinifera is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. + * If not, see . + * + ******************************************************************************/ +#pragma once + +#include "always.h" +#include "tibsun_defines.h" + + +class TActionClass; +class HouseClass; +class ObjectClass; +class TriggerClass; + + +bool TAction_Give_Credits(TActionClass *taction, HouseClass *house, ObjectClass *object, TriggerClass *trigger, Cell *cell); diff --git a/src/extensions/taction/tactionext_hooks.cpp b/src/extensions/taction/tactionext_hooks.cpp index 97fc1a8c9..bbc04b6e4 100644 --- a/src/extensions/taction/tactionext_hooks.cpp +++ b/src/extensions/taction/tactionext_hooks.cpp @@ -26,6 +26,7 @@ * ******************************************************************************/ #include "tactionext_hooks.h" +#include "tactionext_functions.h" #include "taction.h" #include "vinifera_defines.h" #include "house.h" @@ -54,6 +55,10 @@ static const char *TActionClass_New_Action_Name(int action) } switch (action) { + + case TACTION_CREDITS: + return "Give credits..."; + default: return ""; } @@ -72,6 +77,10 @@ static const char *TActionClass_New_Action_Description(int action) } switch (action) { + + case TACTION_CREDITS: + return "Gives credits to the owner of the trigger."; + default: return ""; } @@ -131,6 +140,17 @@ DECLARE_PATCH(_TAction_Operator_Extend_Switch_Patch) switch (this_ptr->Action) { + /** + * #issue-158 + * + * Gives credits to the owner of the trigger. + * + * @author: CCHyper + */ + case TACTION_CREDITS: + success = TAction_Give_Credits(this_ptr, house, object, trigger, cell); + break; + /** * Unexpected TActionType. */ diff --git a/src/vinifera_defines.h b/src/vinifera_defines.h index c5a374fad..aa9a32082 100644 --- a/src/vinifera_defines.h +++ b/src/vinifera_defines.h @@ -42,6 +42,8 @@ typedef enum NewTActionType * Add new TActionTypes from here, do not reorder these! */ + TACTION_CREDITS, // Gives credits to the owner of the trigger. + /** * The new total TActionType count. */