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.
*/