Otclient 1.0  14/8/2020
creature.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2020 OTClient <https://github.com/edubart/otclient>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  */
22 
23 #ifndef CREATURE_H
24 #define CREATURE_H
25 
28 #include <framework/core/timer.h>
31 #include "mapview.h"
32 #include "outfit.h"
33 #include "thing.h"
34 #include "tile.h"
35 
36  // @bindclass
37 class Creature : public Thing
38 {
39 public:
40  enum {
43  };
44 
45  static double speedA, speedB, speedC;
46 
47  Creature();
48 
49  virtual void draw(const Point& dest, float scaleFactor, int reDrawFlags, LightView* lightView = nullptr);
50 
51  void internalDrawOutfit(Point dest, float scaleFactor, bool animateWalk, Otc::Direction direction);
52 
53  void drawOutfit(const Rect& destRect, bool resize);
54  void drawInformation(const Point& point, bool useGray, const Rect& parentRect, int drawFlags);
55 
56  void setId(uint32 id) override { m_id = id; }
57  void setName(const std::string& name);
58  void setHealthPercent(uint8 healthPercent);
59  void setDirection(Otc::Direction direction);
60  void setOutfit(const Outfit& outfit);
61  void setOutfitColor(const Color& color, int duration);
62  void setLight(const Light& light) { m_light = light; }
63  void setSpeed(uint16 speed);
64  void setBaseSpeed(double baseSpeed);
65  void setSkull(uint8 skull);
66  void setShield(uint8 shield);
67  void setEmblem(uint8 emblem);
68  void setType(uint8 type);
69  void setIcon(uint8 icon);
70  void setSkullTexture(const std::string& filename);
71  void setShieldTexture(const std::string& filename, bool blink);
72  void setEmblemTexture(const std::string& filename);
73  void setTypeTexture(const std::string& filename);
74  void setIconTexture(const std::string& filename);
75  void setPassable(bool passable) { m_passable = passable; }
76 
77  void addTimedSquare(uint8 color);
79  void showStaticSquare(const Color& color) { m_showStaticSquare = true; m_staticSquareColor = color; }
81 
82  uint32 getId() override { return m_id; }
83  std::string getName() { return m_name; }
86  Outfit getOutfit() { return m_outfit; }
87  Light getLight() override;
88  bool hasLight() override { return Thing::hasLight() || getLight().color > 0; }
89  uint16 getSpeed() { return m_speed; }
90  double getBaseSpeed() { return m_baseSpeed; }
91  uint8 getSkull() { return m_skull; }
92  uint8 getShield() { return m_shield; }
93  uint8 getEmblem() { return m_emblem; }
94  uint8 getType() { return m_type; }
95  uint8 getIcon() { return m_icon; }
96  bool isPassable() { return m_passable; }
97  int getStepDuration(bool ignoreDiagonal = false, Otc::Direction dir = Otc::InvalidDirection);
106  std::array<double, Otc::LastSpeedFormula> getSpeedFormulaArray() { return m_speedFormula; }
107  Point getDisplacement() override;
108  int getDisplacementX() override;
109  int getDisplacementY() override;
110  int getExactSize(int layer = 0, int xPattern = 0, int yPattern = 0, int zPattern = 0, int animationPhase = 0) override;
111 
112 
114  int getCurrentAnimationPhase(bool mount = false);
115 
116  void updateShield();
117 
118  // walk related
119  void turn(Otc::Direction direction);
120  void jump(int height, int duration);
122  virtual void walk(const Position& oldPos, const Position& newPos);
123  virtual void stopWalk();
124 
125  bool isWalking() { return m_walking; }
126  bool isRemoved() { return m_removed; }
128  bool isDead() { return m_healthPercent <= 0; }
129  bool canBeSeen() { return !isInvisible() || isPlayer(); }
130  bool isCreature() override { return true; }
131  bool isParalyzed() const { return m_speed < 10; }
132 
133  void updateDynamicInformation(bool update) { m_updateDynamicInformation = update; }
135 
136  const ThingTypePtr& getThingType() override;
137  ThingType* rawGetThingType() override;
139 
140  void onPositionChange(const Position& newPos, const Position& oldPos) override;
141  void onAppear() override;
142  void onDisappear() override;
143  virtual void onDeath();
144 
145 protected:
146  void updateWalkingTile();
147  virtual void updateWalkAnimation();
148  virtual void updateWalkOffset(int totalPixelsWalked);
149  virtual void updateWalk();
150  virtual void nextWalkUpdate();
151  virtual void terminateWalk();
152 
153  void updateOutfitColor(Color color, Color finalColor, Color delta, int duration);
154  void updateJump();
155 
157  std::string m_name;
161 
162  int m_speed;
164 
165  double m_baseSpeed;
190 
191  std::array<double, Otc::LastSpeedFormula> m_speedFormula;
192 
193  // walk related
212 
213  // jump related
218 
219 private:
220  struct StepCache {
221  int speed = 0;
222  int groundSpeed = 0;
223  int duration = 0;
224  int diagonalDuration = 0;
225 
226  int getDuration(Otc::Direction dir) { return Position::isDiagonal(dir) ? diagonalDuration : duration; }
227  };
228 
229  StepCache m_stepCache;
230 };
231 
232 // @bindclass
233 class Npc : public Creature
234 {
235 public:
236  bool isNpc() override { return true; }
237 };
238 
239 // @bindclass
240 class Monster : public Creature
241 {
242 public:
243  bool isMonster() override { return true; }
244 };
245 
246 #endif
Creature::m_outfit
Outfit m_outfit
Definition: creature.h:159
Otc::InvalidDirection
@ InvalidDirection
Definition: const.h:192
Creature::isInvisible
bool isInvisible()
Definition: creature.h:127
Creature::getId
uint32 getId() override
Definition: creature.h:82
Creature::getShield
uint8 getShield()
Definition: creature.h:92
Creature::turn
void turn(Otc::Direction direction)
Definition: creature.cpp:323
Creature::terminateWalk
virtual void terminateWalk()
Definition: creature.cpp:607
Creature::setShield
void setShield(uint8 shield)
Definition: creature.cpp:773
Creature::m_jumpHeight
float m_jumpHeight
Definition: creature.h:214
Creature::m_lastStepFromPosition
Position m_lastStepFromPosition
Definition: creature.h:209
Creature::getDrawOffset
Point getDrawOffset()
Definition: creature.cpp:861
Creature::drawOutfit
void drawOutfit(const Rect &destRect, bool resize)
Definition: creature.cpp:196
Creature::setEmblemTexture
void setEmblemTexture(const std::string &filename)
Definition: creature.cpp:819
Color
Definition: color.h:32
Creature::speedB
static double speedB
Definition: creature.h:45
Creature::m_shield
uint8 m_shield
Definition: creature.h:168
Creature::m_jumpOffset
PointF m_jumpOffset
Definition: creature.h:216
Timer::ticksElapsed
ticks_t ticksElapsed()
Definition: timer.cpp:33
Creature::m_disappearEvent
EventPtr m_disappearEvent
Definition: creature.h:205
Creature::updateDynamicInformation
void updateDynamicInformation(bool update)
Definition: creature.h:133
TRect< int >
Creature::m_timedSquareColor
Color m_timedSquareColor
Definition: creature.h:183
Creature::getEmblem
uint8 getEmblem()
Definition: creature.h:93
Creature::speedC
static double speedC
Definition: creature.h:45
uint32
uint32_t uint32
Definition: types.h:35
Creature::setSkullTexture
void setSkullTexture(const std::string &filename)
Definition: creature.cpp:799
Creature::setDirection
void setDirection(Otc::Direction direction)
Definition: creature.cpp:672
Creature::isWalking
bool isWalking()
Definition: creature.h:125
Creature
Definition: creature.h:37
Creature::onDeath
virtual void onDeath()
Definition: creature.cpp:489
Creature::internalDrawOutfit
void internalDrawOutfit(Point dest, float scaleFactor, bool animateWalk, Otc::Direction direction)
Definition: creature.cpp:107
Creature::m_updateDynamicInformation
stdext::boolean< false > m_updateDynamicInformation
Definition: creature.h:202
Creature::updateDynamicInformation
bool updateDynamicInformation() const
Definition: creature.h:134
Creature::getExactSize
int getExactSize(int layer=0, int xPattern=0, int yPattern=0, int zPattern=0, int animationPhase=0) override
Definition: creature.cpp:996
CachedText
Definition: cachedtext.h:29
Creature::setIconTexture
void setIconTexture(const std::string &filename)
Definition: creature.cpp:829
Thing::hasLight
virtual bool hasLight()
Definition: thing.h:85
Creature::onPositionChange
void onPositionChange(const Position &newPos, const Position &oldPos) override
Definition: creature.cpp:427
Creature::updateWalkingTile
void updateWalkingTile()
Definition: creature.cpp:525
ticks_t
int64 ticks_t
Definition: types.h:43
Creature::m_staticSquareColor
Color m_staticSquareColor
Definition: creature.h:184
Creature::canBeSeen
bool canBeSeen()
Definition: creature.h:129
Creature::updateWalkAnimation
virtual void updateWalkAnimation()
Definition: creature.cpp:494
Creature::m_emblem
uint8 m_emblem
Definition: creature.h:169
Creature::addTimedSquare
void addTimedSquare(uint8 color)
Definition: creature.cpp:834
Creature::setLight
void setLight(const Light &light)
Definition: creature.h:62
Creature::m_outfitColorUpdateEvent
ScheduledEventPtr m_outfitColorUpdateEvent
Definition: creature.h:188
Creature::getLastStepToPosition
Position getLastStepToPosition()
Definition: creature.h:102
Creature::m_type
uint8 m_type
Definition: creature.h:170
Thing::isPlayer
virtual bool isPlayer()
Definition: thing.h:58
Creature::m_footStep
uint m_footStep
Definition: creature.h:196
Monster::isMonster
bool isMonster() override
Definition: creature.h:243
ThingCategoryEffect
@ ThingCategoryEffect
Definition: thingtype.h:48
cachedtext.h
Creature::m_baseSpeed
double m_baseSpeed
Definition: creature.h:165
stdext::boolean< true >
Creature::setType
void setType(uint8 type)
Definition: creature.cpp:787
Thing
Definition: thing.h:33
Creature::m_skull
uint8 m_skull
Definition: creature.h:167
Creature::m_informationColor
Color m_informationColor
Definition: creature.h:185
Creature::m_nameCache
CachedText m_nameCache
Definition: creature.h:187
LightView
Definition: lightview.h:37
Creature::setSkull
void setSkull(uint8 skull)
Definition: creature.cpp:765
Creature::getType
uint8 getType()
Definition: creature.h:94
Creature::drawInformation
void drawInformation(const Point &point, bool useGray, const Rect &parentRect, int drawFlags)
Definition: creature.cpp:226
Creature::updateWalk
virtual void updateWalk()
Definition: creature.cpp:582
uint16
uint16_t uint16
Definition: types.h:36
Creature::SHIELD_BLINK_TICKS
@ SHIELD_BLINK_TICKS
Definition: creature.h:41
Creature::m_emblemTexture
TexturePtr m_emblemTexture
Definition: creature.h:174
Creature::getJumpOffset
PointF getJumpOffset()
Definition: creature.h:100
Creature::speedA
static double speedA
Definition: creature.h:45
Creature::m_walkAnimationPhase
int m_walkAnimationPhase
Definition: creature.h:194
Otc::Direction
Direction
Definition: const.h:183
Creature::m_oldPosition
Position m_oldPosition
Definition: creature.h:211
Creature::m_lastStepToPosition
Position m_lastStepToPosition
Definition: creature.h:210
Outfit
Definition: outfit.h:29
Creature::setOutfitColor
void setOutfitColor(const Color &color, int duration)
Definition: creature.cpp:701
Creature::getCurrentAnimationPhase
int getCurrentAnimationPhase(bool mount=false)
Definition: creature.cpp:978
Monster
Definition: creature.h:240
Creature::m_passable
stdext::boolean< false > m_passable
Definition: creature.h:179
declarations.h
uint
unsigned int uint
Definition: types.h:31
Creature::getName
std::string getName()
Definition: creature.h:83
Creature::nextWalkUpdate
virtual void nextWalkUpdate()
Definition: creature.cpp:562
Creature::updateJump
void updateJump()
Definition: creature.cpp:384
Creature::m_jumpDuration
float m_jumpDuration
Definition: creature.h:215
Creature::getIcon
uint8 getIcon()
Definition: creature.h:95
Creature::getBaseSpeed
double getBaseSpeed()
Definition: creature.h:90
mapview.h
Creature::m_allowAppearWalk
stdext::boolean< false > m_allowAppearWalk
Definition: creature.h:201
Creature::setTypeTexture
void setTypeTexture(const std::string &filename)
Definition: creature.cpp:824
timer.h
Npc
Definition: creature.h:233
Creature::setIcon
void setIcon(uint8 icon)
Definition: creature.cpp:793
Creature::hasLight
bool hasLight() override
Definition: creature.h:88
Creature::m_skullTexture
TexturePtr m_skullTexture
Definition: creature.h:172
Creature::m_light
Light m_light
Definition: creature.h:160
Creature::m_walkUpdateEvent
ScheduledEventPtr m_walkUpdateEvent
Definition: creature.h:203
Creature::m_calculatedStepSpeed
int m_calculatedStepSpeed
Definition: creature.h:163
Creature::walk
virtual void walk(const Position &oldPos, const Position &newPos)
Definition: creature.cpp:333
Position
Definition: position.h:33
Creature::setName
void setName(const std::string &name)
Definition: creature.cpp:640
Creature::m_walkOffset
Point m_walkOffset
Definition: creature.h:206
Creature::setSpeed
void setSpeed(uint16 speed)
Definition: creature.cpp:733
Creature::jump
void jump(int height, int duration)
Definition: creature.cpp:372
Creature::m_speedFormula
std::array< double, Otc::LastSpeedFormula > m_speedFormula
Definition: creature.h:191
Creature::removeTimedSquare
void removeTimedSquare()
Definition: creature.h:78
Creature::getSpeed
uint16 getSpeed()
Definition: creature.h:89
Creature::updateOutfitColor
void updateOutfitColor(Color color, Color finalColor, Color delta, int duration)
Definition: creature.cpp:718
Creature::m_iconTexture
TexturePtr m_iconTexture
Definition: creature.h:176
Creature::m_shieldTexture
TexturePtr m_shieldTexture
Definition: creature.h:173
Creature::getLight
Light getLight() override
Definition: creature.cpp:961
Creature::getSkull
uint8 getSkull()
Definition: creature.h:91
Creature::m_icon
uint8 m_icon
Definition: creature.h:171
Creature::updateWalkOffset
virtual void updateWalkOffset(int totalPixelsWalked)
Definition: creature.cpp:511
Creature::getOutfit
Outfit getOutfit()
Definition: creature.h:86
Creature::setPassable
void setPassable(bool passable)
Definition: creature.h:75
Creature::setId
void setId(uint32 id) override
Definition: creature.h:56
Creature::m_showTimedSquare
stdext::boolean< false > m_showTimedSquare
Definition: creature.h:180
Creature::m_outfitColorTimer
Timer m_outfitColorTimer
Definition: creature.h:189
Creature::setShieldTexture
void setShieldTexture(const std::string &filename, bool blink)
Definition: creature.cpp:804
Creature::m_footTimer
Timer m_footTimer
Definition: creature.h:198
Creature::m_walkTimer
Timer m_walkTimer
Definition: creature.h:197
Creature::getThingType
const ThingTypePtr & getThingType() override
Definition: creature.cpp:1018
Creature::getWalkOffset
Point getWalkOffset()
Definition: creature.h:99
ThingType
Definition: thingtype.h:126
Creature::getDirection
Otc::Direction getDirection()
Definition: creature.h:85
Creature::getWalkTicksElapsed
ticks_t getWalkTicksElapsed()
Definition: creature.h:105
Creature::m_removed
stdext::boolean< true > m_removed
Definition: creature.h:182
Creature::isParalyzed
bool isParalyzed() const
Definition: creature.h:131
Creature::getSpeedFormulaArray
std::array< double, Otc::LastSpeedFormula > getSpeedFormulaArray()
Definition: creature.h:106
Creature::getTotalAnimationPhase
int getTotalAnimationPhase()
Definition: creature.cpp:971
Creature::getDisplacementX
int getDisplacementX() override
Definition: creature.cpp:932
Creature::m_walkFinishAnimEvent
ScheduledEventPtr m_walkFinishAnimEvent
Definition: creature.h:204
Creature::m_direction
Otc::Direction m_direction
Definition: creature.h:158
Creature::showStaticSquare
void showStaticSquare(const Color &color)
Definition: creature.h:79
outfit.h
fontmanager.h
Creature::m_healthPercent
uint8 m_healthPercent
Definition: creature.h:166
Creature::getHealthPercent
uint8 getHealthPercent()
Definition: creature.h:84
Creature::VOLATILE_SQUARE_DURATION
@ VOLATILE_SQUARE_DURATION
Definition: creature.h:42
Creature::m_walkedPixels
int m_walkedPixels
Definition: creature.h:195
Creature::isDead
bool isDead()
Definition: creature.h:128
Outfit::getAuxId
int getAuxId() const
Definition: outfit.h:54
stdext::shared_object_ptr< ThingType >
Creature::rawGetThingType
ThingType * rawGetThingType() override
Definition: creature.cpp:1023
Light::color
uint8 color
Definition: thingtype.h:123
Creature::isRemoved
bool isRemoved()
Definition: creature.h:126
Creature::m_walking
stdext::boolean< false > m_walking
Definition: creature.h:200
Creature::stopWalk
virtual void stopWalk()
Definition: creature.cpp:363
Creature::getDisplacement
Point getDisplacement() override
Definition: creature.cpp:921
Outfit::getCategory
ThingCategory getCategory() const
Definition: outfit.h:64
Light
Definition: thingtype.h:120
Creature::getStepDuration
int getStepDuration(bool ignoreDiagonal=false, Otc::Direction dir=Otc::InvalidDirection)
Definition: creature.cpp:877
Creature::m_lastStepDirection
Otc::Direction m_lastStepDirection
Definition: creature.h:208
Creature::updateShield
void updateShield()
Definition: creature.cpp:846
scheduledevent.h
Timer
Definition: timer.h:28
Creature::m_name
std::string m_name
Definition: creature.h:157
Creature::m_walkTurnDirection
Otc::Direction m_walkTurnDirection
Definition: creature.h:207
Creature::m_walkingTile
TilePtr m_walkingTile
Definition: creature.h:199
Creature::m_outfitColor
Color m_outfitColor
Definition: creature.h:186
Position::isDiagonal
static bool isDiagonal(const Otc::Direction dir)
Definition: position.h:137
Creature::m_showStaticSquare
stdext::boolean< false > m_showStaticSquare
Definition: creature.h:181
Creature::m_typeTexture
TexturePtr m_typeTexture
Definition: creature.h:175
Creature::m_jumpTimer
Timer m_jumpTimer
Definition: creature.h:217
Creature::isPassable
bool isPassable()
Definition: creature.h:96
Creature::onDisappear
void onDisappear() override
Definition: creature.cpp:464
thing.h
Creature::hideStaticSquare
void hideStaticSquare()
Definition: creature.h:80
Creature::getLastStepFromPosition
Position getLastStepFromPosition()
Definition: creature.h:101
Creature::onAppear
void onAppear() override
Definition: creature.cpp:432
Creature::rawGetMountThingType
ThingType * rawGetMountThingType()
Definition: creature.cpp:1028
TPoint< int >
Creature::setHealthPercent
void setHealthPercent(uint8 healthPercent)
Definition: creature.cpp:646
Creature::draw
virtual void draw(const Point &dest, float scaleFactor, int reDrawFlags, LightView *lightView=nullptr)
Definition: creature.cpp:70
Creature::allowAppearWalk
void allowAppearWalk()
Definition: creature.h:121
tile.h
Creature::setBaseSpeed
void setBaseSpeed(double baseSpeed)
Definition: creature.cpp:755
Creature::setOutfit
void setOutfit(const Outfit &outfit)
Definition: creature.cpp:678
Creature::getStepTicksLeft
float getStepTicksLeft()
Definition: creature.h:104
Creature::m_shieldBlink
stdext::boolean< false > m_shieldBlink
Definition: creature.h:178
Creature::Creature
Creature()
Definition: creature.cpp:48
Creature::setEmblem
void setEmblem(uint8 emblem)
Definition: creature.cpp:781
Creature::getDisplacementY
int getDisplacementY() override
Definition: creature.cpp:946
Npc::isNpc
bool isNpc() override
Definition: creature.h:236
Creature::getStepProgress
float getStepProgress()
Definition: creature.h:103
Creature::m_speed
int m_speed
Definition: creature.h:162
Creature::m_showShieldTexture
stdext::boolean< true > m_showShieldTexture
Definition: creature.h:177
uint8
uint8_t uint8
Definition: types.h:37
Creature::isCreature
bool isCreature() override
Definition: creature.h:130
Creature::m_id
uint32 m_id
Definition: creature.h:156