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
113
114
|
/* Starshatter: The Open Source Project
Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
AUTHOR: John DiCamillo
OVERVIEW
========
Asteroid Sprite animation class
*/
#include "Asteroid.h"
#include "Shot.h"
#include "Explosion.h"
#include "Sim.h"
#include "Solid.h"
#include "Bitmap.h"
#include "DataLoader.h"
#include "Game.h"
// +--------------------------------------------------------------------+
static Point asteroid_velocity = Point(0,0,0);
static Model* asteroid_model[32];
// +--------------------------------------------------------------------+
Asteroid::Asteroid(int t, const Vec3& pos, double m)
: Debris(asteroid_model[t%6], pos, asteroid_velocity, m)
{
life = -1;
}
// +--------------------------------------------------------------------+
void
Asteroid::Initialize()
{
ZeroMemory(asteroid_model, sizeof(asteroid_model));
DataLoader* loader = DataLoader::GetLoader();
Text old_path = loader->GetDataPath();
loader->SetDataPath("Galaxy/Asteroids/");
int n = 0;
Model* a = new Model;
if (a) {
a->Load("a1.mag", 100);
asteroid_model[n++] = a;
}
a = new Model;
if (a) {
a->Load("a2.mag", 50);
asteroid_model[n++] = a;
}
a = new Model;
if (a) {
a->Load("a1.mag", 8);
asteroid_model[n++] = a;
}
a = new Model;
if (a) {
a->Load("a2.mag", 10);
asteroid_model[n++] = a;
}
a = new Model;
if (a) {
a->Load("a3.mag", 30);
asteroid_model[n++] = a;
}
a = new Model;
if (a) {
a->Load("a4.mag", 20);
asteroid_model[n++] = a;
}
List<Text> mod_asteroids;
loader->SetDataPath("Mods/Galaxy/Asteroids/");
loader->ListFiles("*.mag", mod_asteroids);
ListIter<Text> iter = mod_asteroids;
while (++iter && n < 32) {
a = new Model;
if (a) {
a->Load(*iter.value(), 50);
asteroid_model[n++] = a;
}
}
loader->SetDataPath(old_path);
}
void
Asteroid::Close()
{
for (int i = 0; i < 32; i++)
delete asteroid_model[i];
ZeroMemory(asteroid_model, sizeof(asteroid_model));
}
// +--------------------------------------------------------------------+
|