/
C3DMarkersSA.cpp
101 lines (92 loc) · 2.87 KB
/
C3DMarkersSA.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
/*****************************************************************************
*
* PROJECT: Multi Theft Auto v1.0
* LICENSE: See LICENSE in the top level directory
* FILE: game_sa/C3DMarkersSA.cpp
* PURPOSE: 3D Marker entity manager
*
* Multi Theft Auto is available from http://www.multitheftauto.com/
*
*****************************************************************************/
#include "StdInc.h"
#include "C3DMarkersSA.h"
C3DMarkersSA::C3DMarkersSA()
{
for (int i = 0; i < MAX_3D_MARKERS; i++)
{
this->Markers[i] = new C3DMarkerSA((C3DMarkerSAInterface*)(ARRAY_3D_MARKERS + i * sizeof(C3DMarkerSAInterface)));
}
}
C3DMarkersSA::~C3DMarkersSA()
{
for (int i = 0; i < MAX_3D_MARKERS; i++)
{
delete Markers[i];
}
}
C3DMarker* C3DMarkersSA::CreateMarker(DWORD Identifier, e3DMarkerType dwType, CVector* vecPosition, float fSize, float fPulseFraction, BYTE r, BYTE g, BYTE b,
BYTE a)
{
/*
static C3dMarker *PlaceMarker(unsigned int nIdentifier, unsigned short nType,
CVector &vecPosition, float fSize, unsigned char r, unsigned char g, unsigned char b, unsigned char a,
unsigned short nPeriod, float fPulseFrac, short nRotRate, float normalX = 0.0f,
float normalY = 0.0f, float normalZ = 0.0f, bool zCheck = FALSE);
*/
WORD wType = dwType;
dwType = (e3DMarkerType)wType;
bool bZCheck = true;
DWORD dwFunc = FUNC_PlaceMarker;
DWORD dwReturn = 0;
_asm
{
push bZCheck // zCheck ##SA##
push 0 // normalZ ##SA##
push 0 // normalY ##SA##
push 0 // normalX ##SA##
push 0 // rotate rate
push fPulseFraction // pulse
push 0 // period
push a // alpha
push b // blue
push g // green
push r // red
push fSize // size
push vecPosition // position
push dwType // type
push Identifier // identifier
call dwFunc
mov dwReturn, eax
add esp, 0x3C
}
if (dwReturn)
{
for (int i = 0; i < MAX_3D_MARKERS; i++)
{
if (Markers[i]->GetInterface() == (C3DMarkerSAInterface*)dwReturn)
{
// Markers[i]->Reset(); // debug stuff
return Markers[i];
}
}
}
return NULL;
}
C3DMarker* C3DMarkersSA::FindFreeMarker()
{
for (int i = 0; i < MAX_3D_MARKERS; i++)
{
if (!Markers[i]->IsActive())
return Markers[i];
}
return NULL;
}
C3DMarker* C3DMarkersSA::FindMarker(DWORD Identifier)
{
for (int i = 0; i < MAX_3D_MARKERS; i++)
{
if (Markers[i]->GetIdentifier() == Identifier)
return Markers[i];
}
return NULL;
}