-
Notifications
You must be signed in to change notification settings - Fork 0
/
GSpaceShooter.cpp
79 lines (64 loc) · 1.85 KB
/
GSpaceShooter.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
#include "GSpaceShooter.h"
namespace Nata
{
NObjectPool<EAsteroid>* GSpaceShooter::AsteroidPool = nullptr;
NObjectPool<EProjectile>* GSpaceShooter::ProjectilePool = nullptr;
NDAsteroidPool* GSpaceShooter::DataPool = nullptr;
GSpaceShooter::GSpaceShooter() : GGameMode()
{
Camera = nullptr;
Ship = nullptr;
EnemySpawnZ = -20.f;
}
void GSpaceShooter::Awake()
{
NModel::Create("res\\models\\LowPolyFiatUNO.obj", "assets\\models", "car");
NModel::Create("res\\models\\rock_by_dommk.obj", "assets\\models", "rock");
NShader::Create("res\\shaders\\diffuse.vert", "res\\shaders\\diffuse.frag", "assets\\shaders", "diffuse");
DataPool = new NDAsteroidPool(1000);
ProjectilePool = new NObjectPool<EProjectile>(500);
// Initiliazing pools on objects, clean this up
EAsteroid::ProjectilePool = ProjectilePool;
EShip::ProjectilePool = ProjectilePool;
EProjectile::ProjectilePool = ProjectilePool;
Camera = Instantiate<EFollowCamera>(GetWorld());
NEngine::Camera = Camera->CameraComp;
Spawning = true;
SpawnTime = 0.2f;
EnemySpawnZ = -75.f;
SpawnOffset = 10.f;
AsteroidCount = 0;
Ship = Instantiate<EShip>(GetWorld());
Camera->Target = Ship;
}
void GSpaceShooter::Begin()
{
DataPool->world = GetWorld();
DataPool->Begin();
}
void GSpaceShooter::Tick(float dt)
{
if (NEngine::Input->GetKeyDown(GLFW_KEY_R))
{
DataPool->Clear();
Ship->Transform->Position = vec3(0.f);
}
DataPool->Tick(dt);
for (int i = -2; i < 10; i++)
{
Handles::DrawSquare(vec3(0.f, 0.f, i * -15.f), vec2(16.f, 9.f), vec3(0.f, 0.f, 1.f), vec3(0.4f));
}
if (!Spawning)
{
return;
}
CurrentTime += dt;
if (CurrentTime >= SpawnTime)
{
int id = DataPool->EnableID();
vec2 dir = Math::Random(vec2(-1.f), vec2(1.f)) * SpawnOffset;
DataPool->Transform[id].Position = vec3(dir.x, dir.y, -100.f);
CurrentTime = 0.f;
}
}
}