scummvm/engines/toon/character.h

150 lines
4.4 KiB
C++

/* 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 TOON_CHARACTER_H
#define TOON_CHARACTER_H
#include "common/array.h"
#include "common/rect.h"
#include "toon/toon.h"
namespace Toon {
class ToonEngine;
struct SpecialCharacterAnimation {
char _filename[9]; // 0
byte _flag1; // 9
short _offsetX; // 10
short _offsetY; // 12
short _unused; // 14
short _unused2; // 16
byte _flags2; // 18
byte _flags3; // 19
byte _flags4; // 20
byte _flags5; // 21
byte _flags6; // 22
byte _flags7; // 23
byte _flags8; // 24
byte _flags9; // 25
};
class Character {
public:
Character(ToonEngine *vm);
virtual ~Character();
virtual void init();
virtual int32 getId();
virtual void setId(int32 id);
virtual void setFacing(int32 facing);
virtual void forceFacing(int32 facing);
virtual int32 getFacing();
virtual void setAnimScript(int32 animScriptId);
virtual void setSceneAnimationId(int32 sceneAnimationId);
virtual void setDefaultSpecialAnimationId(int32 defaultAnimationId);
virtual int32 getAnimScript();
virtual int32 getSceneAnimationId();
virtual void setFlag(int flag);
virtual int32 getFlag();
virtual int32 getAnimFlag();
virtual void setAnimFlag(int32 flag);
virtual void setPosition(int16 x, int16 y);
virtual void forcePosition(int16 x, int16 y);
virtual int16 getX();
virtual int16 getY();
virtual int16 getFinalX();
virtual int16 getFinalY();
virtual bool walkTo(int16 newPosX, int16 newPosY);
virtual bool getVisible();
virtual void setVisible(bool visible);
virtual bool loadWalkAnimation(const Common::String &animName);
virtual bool loadIdleAnimation(const Common::String &animName);
virtual bool loadTalkAnimation(const Common::String &animName);
virtual bool loadShadowAnimation(const Common::String &animName);
virtual bool setupPalette();
virtual void playStandingAnim();
virtual void playWalkAnim(int32 start, int32 end);
virtual void playTalkAnim();
virtual void playAnim(int32 animId, int32 unused, int32 flags);
virtual void update(int32 timeIncrement);
virtual int32 getScale();
virtual AnimationInstance *getAnimationInstance();
virtual void setAnimationInstance(AnimationInstance *instance);
virtual void save(Common::WriteStream *stream);
virtual void load(Common::ReadStream *stream);
virtual void stopWalk();
virtual void stopSpecialAnim();
virtual void updateIdle();
virtual int32 getRandomIdleAnim() { return 0; }
virtual void updateTimers(int32 relativeAdd);
virtual void setTalking(bool talking) { _isTalking = talking; }
virtual bool isTalking() { return _isTalking; }
virtual void resetScale() {}
virtual void plotPath(Graphics::Surface& surface);
int32 getFacingFromDirection(int16 dx, int16 dy);
static const SpecialCharacterAnimation *getSpecialAnimation(int32 characterId, int32 animationId);
protected:
ToonEngine *_vm;
int32 _id;
int32 _animScriptId;
int32 _animSpecialId;
int32 _animSpecialDefaultId;
int32 _sceneAnimationId;
int32 _lineToSayId;
int32 _time;
int16 _x;
int16 _y;
int32 _z;
int16 _finalX;
int16 _finalY;
int32 _facing;
int32 _flags;
int32 _animFlags;
int32 _scale;
int32 _nextIdleTime;
bool _visible;
bool _blockingWalk;
int32 _speed;
int32 _lastWalkTime;
int32 _numPixelToWalk;
bool _isTalking;
AnimationInstance *_animationInstance;
AnimationInstance *_shadowAnimationInstance;
Animation *_walkAnim;
Animation *_idleAnim;
Animation *_talkAnim;
Animation *_shadowAnim;
Animation *_specialAnim;
Common::Array<Common::Point> _currentPath;
uint32 _currentPathNode;
int32 _currentWalkStamp;
};
} // End of namespace Toon
#endif