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
|
#include "Tree.h"
#include <libultra/gbi.h>
extern "C" {
#include "common_structs.h"
#include "math_util.h"
#include "main.h"
#include "actors.h"
}
ATree::ATree(Vec3f pos, Gfx* displaylist, f32 drawDistance, f32 minDrawDistance, const char* tlut = nullptr) {
Name = "Tree";
Pos[0] = pos[0];
Pos[1] = pos[1];
Pos[2] = pos[2];
Displaylist = displaylist;
Tlut = tlut;
DrawDistance = drawDistance;
MinDrawDistance = minDrawDistance;
}
void ATree::Tick() {
if (((Flags & 0x800) == 0) && ((Flags & 0x400) != 0)) {
Pos[1] = Pos[1] + 4.0f;
if (Pos[1] > 800.0f) {
Flags |= 0x800;
}
}
}
void ATree::Draw(Camera* camera) {
f32 dist;
if ((Flags & 0x800) != 0) {
return;
}
dist = is_within_render_distance(camera->pos, Pos, camera->rot[1], 0, gCameraZoom[camera - camera1],
DrawDistance);
if (CVarGetInteger("gNoCulling", 0) == 1) {
dist = MAX(dist, 0.0f);
}
if (dist < 0.0f) {
return;
}
if (((Flags & 0x400) == 0) && (dist < MinDrawDistance)) {
func_8029794C(Pos, Rot, 3.0f);
}
sBillBoardMtx[3][0] = Pos[0];
sBillBoardMtx[3][1] = Pos[1];
sBillBoardMtx[3][2] = Pos[2];
if (render_set_position(sBillBoardMtx, 0) != 0) {
if (Tlut) {
gDPLoadTLUT_pal256(gDisplayListHead++, Tlut);
}
gSPDisplayList(gDisplayListHead++, Displaylist);
}
}
void ATree::Collision(Player* player, AActor*) { }
void ATree::Destroy() { }
|