aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/player.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mads/player.h')
-rw-r--r--engines/mads/player.h228
1 files changed, 228 insertions, 0 deletions
diff --git a/engines/mads/player.h b/engines/mads/player.h
new file mode 100644
index 0000000000..671ac9d16e
--- /dev/null
+++ b/engines/mads/player.h
@@ -0,0 +1,228 @@
+/* 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.
+ *
+ * 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 MADS_PLAYER_H
+#define MADS_PLAYER_H
+
+#include "common/scummsys.h"
+#include "common/str.h"
+#include "common/serializer.h"
+
+namespace MADS {
+
+class MADSEngine;
+class MADSAction;
+
+#define PLAYER_SPRITES_FILE_COUNT 8
+#define MAX_ROUTE_NODES 22
+
+/**
+ * Player facings
+ */
+enum Facing {
+ FACING_NORTH = 8, FACING_SOUTH = 2, FACING_EAST = 6, FACING_WEST = 4,
+ FACING_NORTHEAST = 9, FACING_SOUTHEAST = 3,
+ FACING_SOUTHWEST = 1, FACING_NORTHWEST = 7,
+ FACING_NONE = 5, FACING_DUMMY = 0
+};
+
+class Player {
+private:
+ static const int _directionListIndexes[32];
+private:
+ MADSEngine *_vm;
+ bool _highSprites;
+ bool _spriteSetsPresent[PLAYER_SPRITES_FILE_COUNT];
+ bool _mirror;
+ int _frameCount;
+ int _frameListIndex;
+ int _distAccum;
+ int _pixelAccum;
+ int _deltaDistance;
+ int _stopWalkerList[12];
+ int _stopWalkerTrigger[12];
+ int _totalDistance;
+
+ void clearStopList();
+
+ /**
+ * If the player is moving, handles figuring out the correct motion
+ */
+ void move();
+
+ /**
+ * Update the player's frame number
+ */
+ void setFrame();
+
+ /**
+ * Get the sprite slot index for the player
+ */
+ int getSpriteSlot();
+
+ /**
+ * Get the scale for the player at the given Y position
+ */
+ int getScale(int yp);
+
+ /**
+ * Sets the frame rate for the current sprite set
+ */
+ void setBaseFrameRate();
+
+ /**
+ * Starts a player moving to a given destination
+ */
+ void startMovement();
+
+ void changeFacing();
+public:
+ MADSAction *_action;
+
+ Facing _facing;
+ Facing _turnToFacing;
+ Facing _prepareWalkFacing;
+ int _xDirection, _yDirection;
+ Facing _targetFacing;
+ bool _spritesLoaded;
+ int _spritesStart;
+ int _spritesIdx;
+ int _numSprites;
+ bool _stepEnabled;
+ bool _spritesChanged;
+ bool _visible;
+ bool _priorVisible;
+ bool _beenVisible;
+ bool _walkAnywhere;
+ int _frameNumber;
+ bool _loadsFirst;
+ bool _loadedFirst;
+ Common::Point _playerPos;
+ Common::Point _targetPos;
+ Common::Point _posChange;
+ Common::Point _posDiff;
+ Common::Point _prepareWalkPos;
+ bool _moving;
+ int _walkOffScreen, _walkOffScreenSceneId;
+ int _special;
+ int _ticksAmount;
+ uint32 _priorTimer;
+ int _velocity;
+ int _upcomingTrigger;
+ int _trigger;
+ bool _scalingVelocity;
+ bool _forceRefresh;
+ bool _needToWalk;
+ bool _readyToWalk;
+ int _stopWalkerIndex;
+ int _centerOfGravity;
+ int _currentDepth;
+ int _currentScale;
+ Common::String _spritesPrefix;
+public:
+ Player(MADSEngine *vm);
+
+ /**
+ * Load sprites for the player
+ */
+ bool loadSprites(const Common::String &prefix);
+
+ /**
+ * Called when the player has reached the given destination, start him
+ * turning to the specified facing
+ */
+ void setFinalFacing();
+
+ /**
+ * Stops the player walking
+ */
+ void cancelWalk();
+
+ /**
+ * Cancels any oustanding player action
+ */
+ void cancelCommand();
+
+ /**
+ * Set up control parameters for the current active series (the
+ * direction which the player is facing in) */
+ void selectSeries();
+
+ /*
+ * Moves to the next frame for the currently active player sprite set
+ */
+ void updateFrame();
+
+ void update();
+
+ /**
+ * Handler method for when the player is not moving
+ */
+ void idle();
+
+ /**
+ * Starts the player walking towards a given point and direction facing
+ * @param pos Destination location
+ * @param facing Direction to face once the destination is reached
+ */
+ void startWalking(const Common::Point &pt, Facing facing);
+
+ /**
+ * Used by the game scripst to make the player walk to a given destination.
+ * The difference from startWalking is that this contains several extra
+ * layers of checking that startWalking bypasses.
+ */
+ void walk(const Common::Point &pos, Facing facing);
+
+ /**
+ * If a new walk sequence is pending, and has been okayed by the preparser,
+ * start the actual walking
+ */
+ void newWalk();
+
+ void nextFrame();
+
+ /**
+ * Add a walker to the current queue
+ */
+ void addWalker(int walker, int trigger);
+
+ /**
+ * Delete any sprites used by the player
+ */
+ void releasePlayerSprites();
+
+ /**
+ * Serialize the data of the player
+ */
+ void synchronize(Common::Serializer &s);
+
+ static void preloadSequences(const Common::String &prefix, int level) {
+ // No implementation in ScummVM
+ }
+
+ void removePlayerSprites();
+};
+
+} // End of namespace MADS
+
+#endif /* MADS_PLAYER_H */