mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-23 19:16:21 +00:00
3f69c195ae
It's not ready yet, but it's slowly becoming playable. For instance, scaling, the shuttle HUD, and the energy beam work on the first try which is nothing short of a miracle. This commit also moved around some Mars constants because the previous include setup did not work; I hope to make the other neighborhoods have a separate constants file too.
117 lines
3.5 KiB
C++
Executable File
117 lines
3.5 KiB
C++
Executable File
/* 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/neighborhood/mars/constants.h"
|
|
#include "pegasus/neighborhood/mars/shuttleenergymeter.h"
|
|
|
|
namespace Pegasus {
|
|
|
|
ShuttleEnergyMeter::ShuttleEnergyMeter() : FaderAnimation(kNoDisplayElement) {
|
|
setBounds(kShuttleEnergyLeft, kShuttleEnergyTop, kShuttleEnergyLeft + kShuttleEnergyWidth,
|
|
kShuttleEnergyTop + kShuttleEnergyHeight);
|
|
setDisplayOrder(kShuttleStatusOrder);
|
|
setFaderValue(0);
|
|
}
|
|
|
|
void ShuttleEnergyMeter::initShuttleEnergyMeter() {
|
|
_meterImage.getImageFromPICTFile("Images/Mars/Shuttle Energy.pict");
|
|
_lowWarning.getImageFromPICTFile("Images/Mars/Shuttle Low Energy.pict");
|
|
startDisplaying();
|
|
show();
|
|
}
|
|
|
|
void ShuttleEnergyMeter::disposeShuttleEnergyMeter() {
|
|
stopFader();
|
|
hide();
|
|
stopDisplaying();
|
|
_meterImage.deallocateSurface();
|
|
_lowWarning.deallocateSurface();
|
|
}
|
|
|
|
void ShuttleEnergyMeter::draw(const Common::Rect &) {
|
|
int32 currentValue = getFaderValue();
|
|
|
|
Common::Rect r1, r2, bounds;
|
|
getBounds(bounds);
|
|
|
|
if (currentValue < kLowShuttleEnergy) {
|
|
_lowWarning.getSurfaceBounds(r1);
|
|
r2 = r1;
|
|
r2.moveTo(bounds.left, bounds.top);
|
|
_lowWarning.copyToCurrentPort(r1, r2);
|
|
}
|
|
|
|
_meterImage.getSurfaceBounds(r1);
|
|
r1.right = r1.left + r1.width() * currentValue / kFullShuttleEnergy;
|
|
r2 = r1;
|
|
r2.moveTo(bounds.left + 102, bounds.top + 6);
|
|
_meterImage.copyToCurrentPort(r1, r2);
|
|
}
|
|
|
|
void ShuttleEnergyMeter::powerUpMeter() {
|
|
FaderMoveSpec moveSpec;
|
|
moveSpec.makeTwoKnotFaderSpec(kThirtyTicksPerSecond, 0, 0, 45, kFullShuttleEnergy);
|
|
startFader(moveSpec);
|
|
}
|
|
|
|
void ShuttleEnergyMeter::setEnergyValue(const int32 value) {
|
|
stopFader();
|
|
FaderMoveSpec moveSpec;
|
|
moveSpec.makeTwoKnotFaderSpec(kFifteenTicksPerSecond, value * 3, value, kFullShuttleEnergy * 3, kFullShuttleEnergy);
|
|
startFader(moveSpec);
|
|
}
|
|
|
|
void ShuttleEnergyMeter::drainForTractorBeam() {
|
|
stopFader();
|
|
TimeValue startTime = 0, stopTime;
|
|
int32 startValue = getFaderValue(), stopValue;
|
|
|
|
if (startValue < kTractorBeamEnergy) {
|
|
stopTime = startValue * kTractorBeamTime / kTractorBeamEnergy;
|
|
stopValue = 0;
|
|
} else {
|
|
stopTime = kTractorBeamTime;
|
|
stopValue = startValue - kTractorBeamEnergy;
|
|
}
|
|
|
|
FaderMoveSpec moveSpec;
|
|
moveSpec.makeTwoKnotFaderSpec(kTractorBeamScale, startTime, startValue, stopTime, stopValue);
|
|
startFader(moveSpec);
|
|
}
|
|
|
|
int32 ShuttleEnergyMeter::getEnergyValue() const {
|
|
return getFaderValue();
|
|
}
|
|
|
|
void ShuttleEnergyMeter::dropEnergyValue(const int32 delta) {
|
|
setEnergyValue(getFaderValue() - delta);
|
|
}
|
|
|
|
bool ShuttleEnergyMeter::enoughEnergyForTractorBeam() const {
|
|
return getEnergyValue() >= kTractorBeamEnergy;
|
|
}
|
|
|
|
} // End of namespace Pegasus
|