-
Notifications
You must be signed in to change notification settings - Fork 0
/
AnimObject.cpp
112 lines (98 loc) · 2.27 KB
/
AnimObject.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
103
104
105
106
107
108
109
110
111
112
#include "AnimObject.h"
AnimObject::AnimObject(const char *name, int nframes, int fps, float w, float h, float centerx, float centery, int aID,bool infinite, float x1, float y1)
{
HGE* hge = hgeCreate(HGE_VERSION);
tex = hge->Texture_Load(name);
anim = new hgeAnimation(tex, nframes, fps, 0, 0, w, h);
anim->SetHotSpot(centerx, centery);
ID = aID;
imgx = x1;
imgy = y1;
dead = false;
angle = 0.0f;
size = 1.0f;
Isinfinite = infinite;
}
AnimObject::~AnimObject()
{
ForceToDie();
SAFE_DELETE(anim);
}
void AnimObject::UpdateStep()
{
HGE *hge = hgeCreate(HGE_VERSION);
anim->Update(hge->Timer_GetDelta());
}
void AnimObject::Render(float x1, float y1,float rot,float size)
{
HGE *hge = hgeCreate(HGE_VERSION);
if (!Isinfinite)
{
if (anim->GetFrames() == 1)
anim->RenderEx(x1, y1, rot,size,size);
else
{
if (!anim->IsPlaying())anim->Play();
if (anim->IsPlaying() && anim->GetFrame() != anim->GetFrames() - 1)
anim->RenderEx(x1, y1, rot, size, size);
}
}
else
{
if (!anim->IsPlaying())anim->Play();
if (anim->GetFrame() == anim->GetFrames())
anim->SetFrame(0);
anim->RenderEx(x1, y1, rot, size, size);
}
}
int AnimObject::GetID()
{
return ID;
}
void AnimObject::Render()
{
if (anim)
{
HGE *hge = hgeCreate(HGE_VERSION);
if (!anim->IsPlaying())
anim->Play();
if (anim->GetFrame() < anim->GetFrames() - 1)
{
if (anim->GetFrame()>0)alreadyplayed = true;
anim->RenderEx(imgx, imgy, angle, size, size);
anim->Update(hge->Timer_GetDelta());
}
else
{
dead = true;
SAFE_DELETE(anim);
}
if (!dead && alreadyplayed && anim->GetFrame() == 0)
{
dead = true;
SAFE_DELETE(anim);
}
}
}
void AnimObject::ChangePos(float x1, float y1)
{
imgx = x1;
imgy = y1;
}
AnimObject::AnimObject(AnimObject *anim1, float changeFPS)
{
tex = anim1->tex;
if (changeFPS)
anim = new hgeAnimation(tex,anim1->anim->GetFrames(),changeFPS,0,0,anim1->anim->GetWidth(),anim1->anim->GetHeight());
else
anim = new hgeAnimation(tex, anim1->anim->GetFrames(), anim1->anim->GetSpeed(), 0, 0, anim1->anim->GetWidth(), anim1->anim->GetHeight());
float x, y;
anim1->anim->GetHotSpot(&x, &y);
anim->SetHotSpot(x, y);
ID = anim1->ID;
imgx = anim1->imgx;
imgy = anim1->imgy;
dead = anim1->dead;
size = anim1->size;
alreadyplayed = false;
}