00001
#ifndef DEF_CHARACTERS_COMMON_H
00002
#define DEF_CHARACTERS_COMMON_H 1
00003
00004
#include "weapons.h"
00005
#include "objects_common.h"
00006
00007
00008
#define T_IRR 2000
00009
#define V_KRIT 1000
00010
#define T_GRAV_EFFECT 10
00011
#define T_AI_EFFECT 20
00012
#define HSPEED_MULT 100
00013
00014
00015
00016
#define STATE_LEFT 0x00000001
00017
00018
#define STATE_WATER 0x00000004
00019
00020
#define STATE_FALL 0x00000008
00021
00022
#define STATE_ACT_1 0x00000010
00023
#define STATE_ACT_2 0x00000020
00024
#define STATE_ACT_3 0x00000040
00025
00026
00027
#define STATE_RUN 0x00000080
00028
#define STATE_PRESS_LR 0x00000100
00029
#define STATE_PRESS_UD 0x00000200
00030
00031
00036 class Character :
public Object {
00037
public:
00038
Character(Sint16 xpos=0, Sint16 ypos=0,
const ParameterMap& param=ParameterMap());
00039
virtual ~
Character();
00040
static ParameterMap default_parameters;
00041 Uint8 getHealth();
00043 Sint16 getSpeed()
const {
00044
return speed;
00045 }
00046 Sint16 setSpeed(Sint16 newspeed) {
00047
return speed=newspeed;
00048 }
00049 Sint16 addSpeed(Sint16 dspeed) {
00050
return speed+=dspeed;
00051 }
00052 Sint16 addHSpeed(Sint16 dspeed) {
00053
return hspeed+=dspeed;
00054 }
00056
00057
void setGravity(Sint16 setgravity) {
00058 gravity=setgravity;
00059 }
00060
void addGravity(Sint16 addgravity) {
00061 gravity+=addgravity;
00062 }
00064
00065 Uint16 addMaxSpeed(Sint16 dmax) {
00066 maxspeedx=max(0,maxspeedx+dmax);
00067
if (hspeed>maxspeedx) hspeed=maxspeedx;
00068
if (hspeed<-maxspeedx) hspeed=-maxspeedx;
00069
return maxspeedx;
00070 }
00071 Uint16 setMaxSpeed(Uint16 maxs) {
00072 maxspeedx=maxs;
00073
if (hspeed>maxspeedx) hspeed=maxspeedx;
00074
if (hspeed<-maxspeedx) hspeed=-maxspeedx;
00075
return maxspeedx;
00076 }
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
Hit checkMove(SDL_Rect& dest,
bool tele=
false,
bool check=
false);
00093
const std::set<Object *>& getEnter()
const {
00094
return enter;
00095 }
00096
const std::set<Object *>& getTouch()
const {
00097
return touch;
00098 }
00100
00102
00103
00104
00105
00106
virtual void removedObject(
Object*);
00110
virtual void updateAnimState();
00111 virtual void resetAnimState() {
00112
Object::resetAnimState();
00113
updateAnimState();
00114 }
00115
00116
virtual void idle(Uint16);
00119
virtual void fall(Uint16);
00120
00121
virtual void die();
00129
virtual Uint16
hit(Uint16 direction,
Weapon& weap);
00131
protected:
00142
inline Hit checkHit(
const SDL_Rect& dest,
Object* destobj,
bool tele=
false)
const;
00150
inline void updateRegions(std::set<Object *>& newtouch, std::set<Object *>& newenter);
00152
00153
00154 Uint8
setHealth(Uint8);
00157 Uint8
addHealth(Sint8);
00159
00160
virtual void crash(Uint16 dir=DIR_DOWN);
00163
virtual Hit move(Uint16 dt,
bool check=
false);
00164 Uint8 health;
00165 Uint8 maxhealth;
00166
00167 Uint16 maxspeedx;
00168 Uint16 maxspeedy;
00169
00170 Sint16 hspeed;
00171
00172 Sint16 speed;
00173
00174 Sint16 gravity;
00175
00176 Sint16 Dgrav;
00177
00178 std::set<Object *> enter;
00179
00180 std::set<Object *> touch;
00181
00182 Uint16 dense_types;
00183
00184 Uint16 enemy_types;
00185
00186
Weapon weapon;
00188
00189
virtual void addTouch(std::set<Object *>&);
00191
virtual void addEnter(std::set<Object *>&);
00193
virtual void removeTouch(std::set<Object *>&);
00195
virtual void removeEnter(std::set<Object *>&);
00197
private:
00198 Uint16 dt_fall2;
00199 };
00200
#endif