-
Notifications
You must be signed in to change notification settings - Fork 0
/
MistSpot.cpp
102 lines (87 loc) · 1.94 KB
/
MistSpot.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// MistSpot.cpp: implementation of the CMistSpot class.
//
//////////////////////////////////////////////////////////////////////
#include "MistSpot.h"
#include <time.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMistSpot::CMistSpot()
{
iAlpha = rand() % 100 + 100; // 255 is invisible, 0 is fully visible
bAlphaUp = false;
iRecursion = 0;
bRandom = true;
iAlphaMax = 255;
iAlphaMin = 150;
iFadeSpeed = 2; // speed of fading in and out
LeftBorder = -1;
RightBorder = -1;
TopBorder = -1;
BottomBorder = -1;
}
CMistSpot::~CMistSpot()
{
}
void CMistSpot::Init()
{
SetAlphaValue(999); // indicate we want real alpha trans effect
NumFramesPerDirection = 0;
isAnimated = false;
iRecursion = 0;
MoveRandomSpot();
}
void CMistSpot::SetRandom(bool abRandom)
{
bRandom = abRandom;
}
void CMistSpot::MoveRandomSpot()
{
if (!bRandom)
return;
// Moves the most to a random tile on the map.
if (LeftBorder > -1 && RightBorder != -1 && TopBorder > -1 && BottomBorder != -1 &&
RightBorder < Map->GetMapWidth() && BottomBorder < Map->GetMapHeight())
{
// Using borders for where the spots can appear.
SetPosTile(rand() % (RightBorder-LeftBorder) + LeftBorder, rand() % (BottomBorder-TopBorder) + TopBorder);
}
else
{
SetPosTile(rand() % Map->GetMapWidth(), rand() % Map->GetMapHeight());
}
StandStill();
if (!Map->IsWalkable(GetTileX(), GetTileY()) && iRecursion++ < 100)
{
MoveRandomSpot();
}
}
bool CMistSpot::Draw()
{
Facing = 0;
FrameIndex = 0;
MoveStep = 0;
FacingOld = 0;
if (bAlphaUp)
{
if (iAlpha + iFadeSpeed <= iAlphaMax)
iAlpha+=iFadeSpeed;
else
{
iRecursion = 0;
MoveRandomSpot();
bAlphaUp = false;
}
}
if (!bAlphaUp)
{
if (iAlpha - iFadeSpeed >= iAlphaMin)
iAlpha-=iFadeSpeed;
else
{
bAlphaUp = true;
}
}
Sprite->SetAlphaValue(iAlpha);
return CNPC::Draw();
}