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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
// Diese Dll repräsentiert das eigentliche Spiel
// Dieses wird hier Initialisiert, die Spielnachrichtenschleife wird hier
// programmiert.
#include "windows.h"
#include "D3D9.h"
#include "DSound.h"
#include "Import.h"
#include "Main.h"
#include "Logbuch.h"
#include "Export.h"
#include "Project.h"
// Die Gameclass
struct Pos
{
float x,y,z;
};
struct Stars
{
Pos Vertices;
DWORD Color;
};
class SpHanse
{
public:
Stars *Raum1; // Raum1, weill später vieleicht noch andere Räume hinzukommen.
DWORD FVF_Stars;
PDIRECT3DVERTEXBUFFER9 StarsRaum1VertexBuffer;
};
DLL_IMP_EXP void *_3DOT_IniGame(_3DOT_Main *MainCl)
{
// Für ... muss die jeweilige Class oder struct des Spiels angegeben werden.
SpHanse *GameClass=new SpHanse;
// Hier müssen nun die ganzen Initialisierungen für die Class o. Struct
// vorgenommen werden.
GameClass->FVF_Stars=D3DFVF_XYZ|D3DFVF_DIFFUSE;
GameClass->Raum1=new Stars[300]; // 300 Sterne im Raum verteillen.
// Jetzt werden die Sterne Per Zufall im Raum (Würfel) an den Wänden verteillt.Diese werden dann wenn zufriedenstellend in einer Datei gespeichert
// und dann hier nur noch direct in den Vertexbuffer eingelessen.
// Maße 1000.0f bis -1000.0f
// Boden:
_3DOT_InitRandom();
int z;
for(z=0;z<50;z++)
{
GameClass->Raum1[z].Vertices.x=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.z=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.y=1000.0f;
GameClass->Raum1[z].Color=D3DCOLOR_XRGB(254,254,254);
};
// Wand 1;
for(z=50;z<100;z++)
{
GameClass->Raum1[z].Vertices.x=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.y=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.z=1000.0f;
GameClass->Raum1[z].Color=D3DCOLOR_XRGB(254,254,254);
};
// Wand 2;
for(z=100;z<150;z++)
{
GameClass->Raum1[z].Vertices.z=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.y=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.x=1000.0f;
GameClass->Raum1[z].Color=D3DCOLOR_XRGB(254,254,254);
};
// Decke
for(z=150;z<200;z++)
{
GameClass->Raum1[z].Vertices.x=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.z=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.y=-1000.0f;
GameClass->Raum1[z].Color=D3DCOLOR_XRGB(254,254,254);
};
// Wand 3;
for(z=200;z<250;z++)
{
GameClass->Raum1[z].Vertices.x=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.y=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.z=-1000.0f;
GameClass->Raum1[z].Color=D3DCOLOR_XRGB(254,254,254);
};
// Wand 4;
for(z=250;z<300;z++)
{
GameClass->Raum1[z].Vertices.z=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.y=(float)_3DOT_Random(0,-1000);
GameClass->Raum1[z].Vertices.x=-1000.0f;
GameClass->Raum1[z].Color=D3DCOLOR_XRGB(254,254,254);
};
_3DOT_LogWr("Koordinatenliste für die Sterne gefüllt.",1);
Stars *VBufferSpeicher;
MainCl->pD3DDev->CreateVertexBuffer(300*sizeof(Stars),D3DUSAGE_POINTS,D3DFVF_XYZ|D3DFVF_DIFFUSE,D3DPOOL_DEFAULT,&GameClass->StarsRaum1VertexBuffer,NULL);
if(GameClass->StarsRaum1VertexBuffer!=D3D_OK)
{
_3DOT_LogWr("Vertexbuffer für die Sterne konnte nicht erstellt werden.",1);
return NULL;
}
else
_3DOT_LogWr("Vertexbuffer für die Sterne erfolgreich erstellt.",1);
GameClass->StarsRaum1VertexBuffer->Lock(0,0,(void**)VBufferSpeicher,0);
for(z=0;z<300;z++)
VBufferSpeicher[z]=GameClass->Raum1[z];
_3DOT_LogWr("Vertexbuffer erfolgreich gefüllt.",1);
GameClass->StarsRaum1VertexBuffer->Unlock();
_3DOT_LogWr("Und entspert.",1);
// Bei Fehler return NULL;
return GameClass;
}
DLL_IMP_EXP byte _3DOT_RunEngine(_3DOT_Main* MainCl,void* GameClass,float time,
byte* Gamestatus,unsigned uMsg,WPARAM wParam,LPARAM lParam)
{
// Funktion für die Nachrichtenbehandlung im Spiel.
SpHanse *GameCl=(SpHanse*)GameClass;
return 1; // Alles OK:
}
DLL_IMP_EXP byte _3DOT_deleteGame(void* GameClass)
{
// Deinitialisierung bei Beenden des Spiels
SpHanse *GameCl=(SpHanse*)GameClass;
GameCl->StarsRaum1VertexBuffer->Release();
delete GameCl->Raum1;
delete GameCl;
return 1;
}
|