scummvm/engines/pegasus/energymonitor.h

112 lines
3.1 KiB
C
Raw Normal View History

2011-09-23 00:17:09 +00:00
/* 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_ENERGYMONITOR_H
#define PEGASUS_ENERGYMONITOR_H
#include "pegasus/elements.h"
namespace Pegasus {
class Sprite;
class Blinker : private IdlerTimeBase {
public:
Blinker();
virtual ~Blinker() {}
void startBlinking(Sprite *sprite, int32 frame1, int32 frame2, uint32 numBlinks, TimeValue blinkDuration, TimeScale blinkScale);
void stopBlinking();
protected:
virtual void timeChanged(const TimeValue);
Sprite *_sprite;
int32 _frame1;
int32 _frame2;
TimeValue _blinkDuration;
};
2011-12-20 23:26:25 +00:00
// Energy monitor constants.
2011-09-23 00:17:09 +00:00
2011-12-20 23:26:25 +00:00
// These are in seconds.
// Max is two hours
static const uint32 kMaxJMPEnergy = 7200;
2011-09-23 00:17:09 +00:00
static const uint32 kCasualEnergy = kMaxJMPEnergy * 100 / 100; // 100%
static const uint32 kWorriedEnergy = kMaxJMPEnergy * 50 / 100; // 50%
static const uint32 kNervousEnergy = kMaxJMPEnergy * 25 / 100; // 25%
static const uint32 kPanicStrickenEnergy = kMaxJMPEnergy * 5 / 100; // 5%
static const uint32 kFullEnergy = kCasualEnergy;
static const uint32 kFrameLightOff = 0;
static const uint32 kFrameLightYellow = 1;
static const uint32 kFrameLightOrange = 2;
static const uint32 kFrameLightRed = 3;
static const int kEnergyDrainNormal = 1;
static const int kMarsReactorEnergyDrainNoShield = 6;
static const int kMarsReactorEnergyDrainWithShield = 3;
static const int kWSCPoisonEnergyDrainWithDart = 20;
static const int kWSCPoisonEnergyDrainNoDart = 10;
class EnergyMonitor : private IdlerAnimation {
public:
EnergyMonitor();
virtual ~EnergyMonitor();
void setEnergyValue(const uint32);
void startEnergyDraining();
void setEnergyDrainRate(Common::Rational);
Common::Rational getEnergyDrainRate();
void stopEnergyDraining();
void drainEnergy(const int32);
int32 getCurrentEnergy();
void restoreLastEnergyValue();
void saveCurrentEnergyValue();
void calibrateEnergyBar();
protected:
void timeChanged(const TimeValue);
void calcLevelRect(Common::Rect &);
void draw(const Common::Rect &);
uint32 _barColor;
Common::Rect _levelRect;
EnergyStage _stage;
2011-09-23 00:17:09 +00:00
Sprite _energyLight;
Blinker _lightBlinker;
bool _calibrating, _dontFlash;
};
extern EnergyMonitor *g_energyMonitor;
} // End of namespace Pegasus
#endif