/* 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 3 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, see .
*
*/
/*
* Copyright (C) 2006-2010 - Frictional Games
*
* This file is part of HPL1 Engine.
*/
#ifndef HPL_ANIMATION_STATE_H
#define HPL_ANIMATION_STATE_H
#include "hpl1/engine/graphics/GraphicsTypes.h"
#include "hpl1/engine/math/MathTypes.h"
#include "hpl1/engine/system/SystemTypes.h"
#include "hpl1/engine/game/SaveGame.h"
namespace hpl {
class cAnimation;
class cAnimationManager;
//---------------------------------------------
class cSaveData_cAnimationState : public iSaveData {
kSaveData_ClassInit(cAnimationState) public : tString msName;
tString msAnimationName;
float mfDefaultSpeed; // Not needed later
float mfLength;
float mfWeight;
float mfSpeed;
float mfTimePos;
float mfBaseSpeed;
bool mbActive;
bool mbLoop;
bool mbPaused;
float mfFadeStep;
float mfSpecialEventTime;
virtual iSaveObject *CreateSaveObject(cSaveObjectHandler *apSaveObjectHandler, cGame *apGame);
virtual int GetSaveCreatePrio();
};
//---------------------------------------------
class cAnimationEvent {
public:
float mfTime;
eAnimationEventType mType;
tString msValue;
};
//---------------------------------------------
class cAnimationState : public iSaveObject {
typedef iSaveObject super;
public:
cAnimationState(cAnimation *apAnimation, const tString &asName,
cAnimationManager *apAnimationManager);
~cAnimationState();
const char *GetName() { return msName.c_str(); }
void Update(float afTimeStep);
bool IsFading();
/**
* If the animation has reached the end.
*/
bool IsOver();
void FadeIn(float afTime);
void FadeOut(float afTime);
void SetLength(float afLength);
float GetLength();
void SetWeight(float afWeight);
float GetWeight();
void SetSpeed(float afSpeed);
float GetSpeed();
void SetBaseSpeed(float afSpeed);
float GetBaseSpeed();
void SetTimePosition(float afPosition);
float GetTimePosition();
float GetPreviousTimePosition();
/**
* Set the relative position. 0 = start, 1 = end
* \param afPosition
*/
void SetRelativeTimePosition(float afPosition);
/**
* Get the relative position. 0 = start, 1 = end
*/
float GetRelativeTimePosition();
bool IsActive();
void SetActive(bool abActive);
bool IsLooping();
void SetLoop(bool abLoop);
bool IsPaused();
void SetPaused(bool abPaused);
void SetSpecialEventTime(float afT) { mfSpecialEventTime = afT; }
float GetSpecialEventTime() { return mfSpecialEventTime; }
bool IsAfterSpecialEvent();
bool IsBeforeSpecialEvent();
void AddTimePosition(float afAdd);
cAnimation *GetAnimation();
cAnimationEvent *CreateEvent();
cAnimationEvent *GetEvent(int alIdx);
int GetEventNum();
float GetFadeStep() { return mfFadeStep; }
void SetFadeStep(float afX) { mfFadeStep = afX; }
// SaveObject implementation
virtual iSaveData *CreateSaveData();
virtual void SaveToSaveData(iSaveData *apSaveData);
virtual void LoadFromSaveData(iSaveData *apSaveData);
virtual void SaveDataSetup(cSaveObjectHandler *apSaveObjectHandler, cGame *apGame);
private:
tString msName;
cAnimationManager *mpAnimationManager;
cAnimation *mpAnimation;
Common::Array mvEvents;
// Properties of the animation
float mfLength;
float mfWeight;
float mfSpeed;
float mfTimePos;
float mfPrevTimePos;
float mfBaseSpeed;
float mfSpecialEventTime;
bool mbActive;
bool mbLoop;
bool mbPaused;
// properties for update
float mfFadeStep;
};
} // namespace hpl
#endif // HPL_ANIMATION_STATE_H