summaryrefslogtreecommitdiffhomepage
path: root/Stars45/Computer.cpp
diff options
context:
space:
mode:
authorFWoltermann@gmail.com <FWoltermann@gmail.com@076cb2c4-205e-83fd-5cf3-1be9aa105544>2011-12-08 14:53:40 +0000
committerFWoltermann@gmail.com <FWoltermann@gmail.com@076cb2c4-205e-83fd-5cf3-1be9aa105544>2011-12-08 14:53:40 +0000
commite33e19d0587146859d48a134ec9fd94e7b7ba5cd (patch)
tree69d048c8801858d2756ab3a487090a7a1b74bf14 /Stars45/Computer.cpp
downloadstarshatter-e33e19d0587146859d48a134ec9fd94e7b7ba5cd.zip
starshatter-e33e19d0587146859d48a134ec9fd94e7b7ba5cd.tar.gz
starshatter-e33e19d0587146859d48a134ec9fd94e7b7ba5cd.tar.bz2
Initial upload
Diffstat (limited to 'Stars45/Computer.cpp')
-rw-r--r--Stars45/Computer.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/Stars45/Computer.cpp b/Stars45/Computer.cpp
new file mode 100644
index 0000000..9661ee3
--- /dev/null
+++ b/Stars45/Computer.cpp
@@ -0,0 +1,93 @@
+/* Project Starshatter 4.5
+ Destroyer Studios LLC
+ Copyright © 1997-2004. All Rights Reserved.
+
+ SUBSYSTEM: Stars.exe
+ FILE: Computer.cpp
+ AUTHOR: John DiCamillo
+
+
+ OVERVIEW
+ ========
+ Computer System class
+*/
+
+#include "MemDebug.h"
+#include "Computer.h"
+#include "Game.h"
+
+// +----------------------------------------------------------------------+
+
+static int computer_value[] = {
+ 0, 1, 1, 1, 1
+};
+
+// +----------------------------------------------------------------------+
+
+Computer::Computer(int comp_type, const char* comp_name)
+ : System(COMPUTER, comp_type, comp_name, 1, 1, 1, 1)
+{
+ SetAbbreviation(Game::GetText("sys.computer.abrv"));
+ power_flags = POWER_WATTS | POWER_CRITICAL;
+
+ if (subtype == FLIGHT) {
+ crit_level = -1.0f;
+ }
+}
+
+// +----------------------------------------------------------------------+
+
+Computer::Computer(const Computer& c)
+ : System(c)
+{
+ Mount(c);
+ SetAbbreviation(c.Abbreviation());
+ power_flags = POWER_WATTS | POWER_CRITICAL;
+
+ if (subtype == FLIGHT) {
+ crit_level = -1.0f;
+ }
+}
+
+// +--------------------------------------------------------------------+
+
+Computer::~Computer()
+{ }
+
+// +--------------------------------------------------------------------+
+
+void
+Computer::ApplyDamage(double damage)
+{
+ System::ApplyDamage(damage);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+Computer::ExecFrame(double seconds)
+{
+ energy = 0.0f;
+ System::ExecFrame(seconds);
+}
+
+// +--------------------------------------------------------------------+
+
+void
+Computer::Distribute(double delivered_energy, double seconds)
+{
+ if (IsPowerOn()) {
+ // convert Joules to Watts:
+ energy = (float) (delivered_energy/seconds);
+
+ // brown out:
+ if (energy < capacity*0.75f)
+ power_on = false;
+
+ // spike:
+ else if (energy > capacity*1.5f) {
+ power_on = false;
+ ApplyDamage(50);
+ }
+ }
+}