aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMatthew Hoops2011-10-27 19:24:11 -0400
committerMatthew Hoops2011-10-27 19:24:11 -0400
commit015d81b742b2f83b8eab12f88741fe42b87f8d18 (patch)
tree8c7c4458d77e495b3a3d97b1f5452d294dd94f92 /engines
parentc2af197edb7719ca4d4ad77d778c135db6149ba4 (diff)
downloadscummvm-rg350-015d81b742b2f83b8eab12f88741fe42b87f8d18.tar.gz
scummvm-rg350-015d81b742b2f83b8eab12f88741fe42b87f8d18.tar.bz2
scummvm-rg350-015d81b742b2f83b8eab12f88741fe42b87f8d18.zip
PEGASUS: Add the energy beam weapon
Diffstat (limited to 'engines')
-rw-r--r--engines/pegasus/module.mk1
-rwxr-xr-xengines/pegasus/neighborhood/mars/energybeam.cpp70
-rwxr-xr-xengines/pegasus/neighborhood/mars/energybeam.h43
3 files changed, 114 insertions, 0 deletions
diff --git a/engines/pegasus/module.mk b/engines/pegasus/module.mk
index 349ae8ca0a..acccd87e24 100644
--- a/engines/pegasus/module.mk
+++ b/engines/pegasus/module.mk
@@ -57,6 +57,7 @@ MODULE_OBJS = \
neighborhood/caldoria/caldoria4dsystem.o \
neighborhood/caldoria/caldoriamessages.o \
neighborhood/caldoria/caldoriamirror.o \
+ neighborhood/mars/energybeam.o \
neighborhood/mars/gravitoncannon.o \
neighborhood/mars/hermite.o \
neighborhood/mars/mars.o \
diff --git a/engines/pegasus/neighborhood/mars/energybeam.cpp b/engines/pegasus/neighborhood/mars/energybeam.cpp
new file mode 100755
index 0000000000..6a30c48dfb
--- /dev/null
+++ b/engines/pegasus/neighborhood/mars/energybeam.cpp
@@ -0,0 +1,70 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * Additional copyright for this file:
+ * Copyright (C) 1995-1997 Presto Studios, Inc.
+ *
+ * This program 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 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "pegasus/pegasus.h"
+#include "pegasus/neighborhood/mars/energybeam.h"
+
+namespace Pegasus {
+
+const TimeValue kEnergyBeamTime = kOneSecond * kShuttleWeaponScale / 2;
+
+const tCoordType kEnergyBeamOriginH = kShuttleWindowMidH;
+const tCoordType kEnergyBeamOriginV = kShuttleWindowTop + kShuttleWindowHeight;
+
+const float kBeamXOrigin = convertScreenHToSpaceX(kEnergyBeamOriginH, kEnergyBeamMinDistance);
+const float kBeamYOrigin = convertScreenVToSpaceY(kEnergyBeamOriginV, kEnergyBeamMinDistance);
+const float kBeamZOrigin = kEnergyBeamMinDistance;
+
+EnergyBeam::EnergyBeam() {
+ _weaponDuration = kEnergyBeamTime;
+ setSegment(0, kEnergyBeamTime);
+ _weaponOrigin = Point3D(kBeamXOrigin, kBeamYOrigin, kBeamZOrigin);
+}
+
+void EnergyBeam::draw(const Common::Rect &) {
+ static const int kBeamColorRed1 = 224;
+ static const int kBeamColorRed2 = 64;
+
+ Graphics::Surface *surface = ((PegasusEngine *)g_engine)->_gfx->getWorkArea();
+
+ byte red = linearInterp(0, kEnergyBeamTime, _lastTime, kBeamColorRed1, kBeamColorRed2);
+ uint32 color = surface->format.RGBToColor(red, 0, 0);
+
+ Point3D startPoint;
+ if (_weaponTime < 0.1)
+ startPoint = _weaponOrigin;
+ else
+ linearInterp(_weaponOrigin, _weaponTarget, _weaponTime - 0.1, startPoint);
+
+ Common::Point lineStart;
+ project3DTo2D(startPoint, lineStart);
+
+ Common::Point lineEnd;
+ project3DTo2D(_weaponLocation, lineEnd);
+
+ surface->drawThickLine(lineStart.x, lineStart.y, lineEnd.x, lineEnd.y, 2, 1, color);
+}
+
+} // End of namespace Pegasus
diff --git a/engines/pegasus/neighborhood/mars/energybeam.h b/engines/pegasus/neighborhood/mars/energybeam.h
new file mode 100755
index 0000000000..715ed4b01d
--- /dev/null
+++ b/engines/pegasus/neighborhood/mars/energybeam.h
@@ -0,0 +1,43 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * Additional copyright for this file:
+ * Copyright (C) 1995-1997 Presto Studios, Inc.
+ *
+ * This program 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 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef PEGASUS_NEIGHBORHOOD_MARS_ENERGYBEAM_H
+#define PEGASUS_NEIGHBORHOOD_MARS_ENERGYBEAM_H
+
+#include "pegasus/neighborhood/mars/shuttleweapon.h"
+
+namespace Pegasus {
+
+class EnergyBeam : public ShuttleWeapon {
+public:
+ EnergyBeam();
+ virtual ~EnergyBeam() {}
+
+ void draw(const Common::Rect &);
+};
+
+} // End of namespace Pegasus
+
+#endif