Merge remote-tracking branch 'origin/master' into Sound
Conflicts: include/Core/Engine.h
@@ -0,0 +1,22 @@
|
|||||||
|
# Blender MTL File: 'octopus.blend'
|
||||||
|
# Material Count: 2
|
||||||
|
|
||||||
|
newmtl Material.001
|
||||||
|
Ns 96.078431
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.640000 0.640000 0.640000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ni 1.000000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
map_Kd octotex.png
|
||||||
|
|
||||||
|
newmtl Material.001_NONE
|
||||||
|
Ns 96.078431
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.640000 0.640000 0.640000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ni 1.000000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
map_Kd octotex.png
|
||||||
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
# Blender MTL File: 'None'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl Material
|
||||||
|
Ns 96.078431
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.640000 0.640000 0.640000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ni 1.000000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
map_Kd Brick_d.png
|
||||||
|
map_Bump Brick_n.png
|
||||||
|
map_Ks Brick_s.png
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# Blender v2.75 (sub 0) OBJ File: ''
|
||||||
|
# www.blender.org
|
||||||
|
mtllib Brick.mtl
|
||||||
|
o Cube
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 0.500000 -0.499999
|
||||||
|
v 0.499999 0.500000 0.500000
|
||||||
|
v -0.500000 0.500000 0.500000
|
||||||
|
v -0.500000 0.500000 -0.500000
|
||||||
|
vt 0.566439 0.503009
|
||||||
|
vt 0.567048 0.728848
|
||||||
|
vt 0.341210 0.729457
|
||||||
|
vt 0.339992 0.277781
|
||||||
|
vt 0.339383 0.051943
|
||||||
|
vt 0.565221 0.051334
|
||||||
|
vt 0.793495 0.954077
|
||||||
|
vt 0.567657 0.954686
|
||||||
|
vt 0.341819 0.955295
|
||||||
|
vt 0.115981 0.955904
|
||||||
|
vt 0.115372 0.730066
|
||||||
|
vt 0.340601 0.503618
|
||||||
|
vt 0.565830 0.277172
|
||||||
|
vt 0.792886 0.728239
|
||||||
|
vn 0.000000 -1.000000 0.000000
|
||||||
|
vn 0.000000 1.000000 0.000000
|
||||||
|
vn 1.000000 0.000000 0.000000
|
||||||
|
vn -0.000000 0.000000 1.000000
|
||||||
|
vn -1.000000 -0.000000 -0.000000
|
||||||
|
vn 0.000000 0.000000 -1.000000
|
||||||
|
usemtl Material
|
||||||
|
s off
|
||||||
|
f 1/1/1 2/2/1 3/3/1
|
||||||
|
f 8/4/2 7/5/2 6/6/2
|
||||||
|
f 5/7/3 6/8/3 2/2/3
|
||||||
|
f 6/8/4 7/9/4 3/3/4
|
||||||
|
f 7/9/5 8/10/5 4/11/5
|
||||||
|
f 1/1/6 4/12/6 8/4/6
|
||||||
|
f 4/12/1 1/1/1 3/3/1
|
||||||
|
f 5/13/2 8/4/2 6/6/2
|
||||||
|
f 1/14/3 5/7/3 2/2/3
|
||||||
|
f 2/2/4 6/8/4 3/3/4
|
||||||
|
f 3/3/5 7/9/5 4/11/5
|
||||||
|
f 5/13/6 1/1/6 8/4/6
|
||||||
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
@@ -0,0 +1,14 @@
|
|||||||
|
# Blender MTL File: 'Brick.blend'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl Brick
|
||||||
|
Ns 17.647059
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.640000 0.154050 0.039202
|
||||||
|
Ks 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.000000
|
||||||
|
d 1.000000
|
||||||
|
illum 1
|
||||||
|
map_Kd Brick_d.png
|
||||||
|
map_Bump Brick_n.png
|
||||||
|
map_Ks Brick_s.png
|
||||||
|
After Width: | Height: | Size: 774 KiB |
|
After Width: | Height: | Size: 773 KiB |
|
After Width: | Height: | Size: 433 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
# Blender MTL File: 'None'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl Material.001
|
||||||
|
Ns 96.078431
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.640000 0.640000 0.640000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ni 1.000000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
map_Kd Brick_Diffuse.png
|
||||||
|
map_Bump Brick_Normal.png
|
||||||
|
map_Ks Brick_Specular.png
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
# Blender v2.75 (sub 0) OBJ File: ''
|
||||||
|
# www.blender.org
|
||||||
|
mtllib Halfpipe.mtl
|
||||||
|
o Cylinder
|
||||||
|
v 0.000000 -2.908792 -1.000000
|
||||||
|
v 0.000000 2.908792 -1.000000
|
||||||
|
v 0.195090 -2.908792 -0.980785
|
||||||
|
v 0.195090 2.908792 -0.980785
|
||||||
|
v 0.382683 -2.908792 -0.923880
|
||||||
|
v 0.382683 2.908792 -0.923880
|
||||||
|
v 0.555570 -2.908792 -0.831470
|
||||||
|
v 0.555570 2.908792 -0.831470
|
||||||
|
v 0.707107 -2.908792 -0.707107
|
||||||
|
v 0.707107 2.908792 -0.707107
|
||||||
|
v 0.831470 -2.908792 -0.555570
|
||||||
|
v 0.831470 2.908792 -0.555570
|
||||||
|
v 0.923880 -2.908792 -0.382683
|
||||||
|
v 0.923880 2.908792 -0.382683
|
||||||
|
v 0.980785 -2.908792 -0.195090
|
||||||
|
v 0.980785 2.908792 -0.195090
|
||||||
|
v 1.000000 -2.908792 -0.000000
|
||||||
|
v 1.000000 2.908792 -0.000000
|
||||||
|
v -1.000000 -2.908792 -0.000001
|
||||||
|
v -1.000000 2.908792 -0.000001
|
||||||
|
v -0.980785 -2.908792 -0.195091
|
||||||
|
v -0.980785 2.908792 -0.195091
|
||||||
|
v -0.923879 -2.908792 -0.382684
|
||||||
|
v -0.923879 2.908792 -0.382684
|
||||||
|
v -0.831469 -2.908792 -0.555571
|
||||||
|
v -0.831469 2.908792 -0.555571
|
||||||
|
v -0.707106 -2.908792 -0.707108
|
||||||
|
v -0.707106 2.908792 -0.707108
|
||||||
|
v -0.555569 -2.908792 -0.831470
|
||||||
|
v -0.555569 2.908792 -0.831470
|
||||||
|
v -0.382682 -2.908792 -0.923880
|
||||||
|
v -0.382682 2.908792 -0.923880
|
||||||
|
v -0.195089 -2.908792 -0.980786
|
||||||
|
v -0.195089 2.908792 -0.980786
|
||||||
|
vt -1.156714 -1.419990
|
||||||
|
vt -1.158346 2.336063
|
||||||
|
vt -1.031779 2.336118
|
||||||
|
vt -1.283288 -1.420045
|
||||||
|
vt -1.284913 2.336008
|
||||||
|
vt -1.409862 -1.420100
|
||||||
|
vt -1.411480 2.335954
|
||||||
|
vt -1.536436 -1.420155
|
||||||
|
vt -1.538048 2.335899
|
||||||
|
vt 2.387354 -1.418355
|
||||||
|
vt 2.385534 2.337692
|
||||||
|
vt 2.512101 2.337753
|
||||||
|
vt 2.260782 -1.418416
|
||||||
|
vt 2.258967 2.337631
|
||||||
|
vt 2.134208 -1.418478
|
||||||
|
vt 2.132400 2.337570
|
||||||
|
vt 2.007634 -1.418538
|
||||||
|
vt 2.005832 2.337510
|
||||||
|
vt -0.144122 -1.419541
|
||||||
|
vt -0.145809 2.336510
|
||||||
|
vt -0.019241 2.336567
|
||||||
|
vt -0.270696 -1.419598
|
||||||
|
vt -0.272376 2.336454
|
||||||
|
vt -0.397270 -1.419654
|
||||||
|
vt -0.398943 2.336397
|
||||||
|
vt -0.523844 -1.419711
|
||||||
|
vt -0.525511 2.336341
|
||||||
|
vt -0.650418 -1.419767
|
||||||
|
vt -0.652078 2.336285
|
||||||
|
vt -0.776992 -1.419823
|
||||||
|
vt -0.778645 2.336229
|
||||||
|
vt -1.030140 -1.419935
|
||||||
|
vt -0.905212 2.336174
|
||||||
|
vt -0.903566 -1.419879
|
||||||
|
vt 2.513929 -1.418293
|
||||||
|
vt -0.017548 -1.419484
|
||||||
|
vn -0.098000 0.000000 0.995200
|
||||||
|
vn -0.290300 0.000000 0.956900
|
||||||
|
vn -0.471400 0.000000 0.881900
|
||||||
|
vn -0.634400 0.000000 0.773000
|
||||||
|
vn -0.773000 0.000000 0.634400
|
||||||
|
vn -0.881900 0.000000 0.471400
|
||||||
|
vn -0.956900 0.000000 0.290300
|
||||||
|
vn -0.995200 0.000000 0.098000
|
||||||
|
vn 0.995200 0.000000 0.098000
|
||||||
|
vn 0.956900 0.000000 0.290300
|
||||||
|
vn 0.881900 0.000000 0.471400
|
||||||
|
vn 0.773000 0.000000 0.634400
|
||||||
|
vn 0.634400 0.000000 0.773000
|
||||||
|
vn 0.471400 0.000000 0.881900
|
||||||
|
vn 0.098000 0.000000 0.995200
|
||||||
|
vn 0.290300 0.000000 0.956900
|
||||||
|
usemtl Material.001
|
||||||
|
s off
|
||||||
|
f 3/1/1 4/2/1 2/3/1
|
||||||
|
f 5/4/2 6/5/2 4/2/2
|
||||||
|
f 7/6/3 8/7/3 6/5/3
|
||||||
|
f 9/8/4 10/9/4 8/7/4
|
||||||
|
f 11/10/5 12/11/5 10/12/5
|
||||||
|
f 13/13/6 14/14/6 12/11/6
|
||||||
|
f 15/15/7 16/16/7 14/14/7
|
||||||
|
f 17/17/8 18/18/8 16/16/8
|
||||||
|
f 21/19/9 22/20/9 20/21/9
|
||||||
|
f 23/22/10 24/23/10 22/20/10
|
||||||
|
f 25/24/11 26/25/11 24/23/11
|
||||||
|
f 27/26/12 28/27/12 26/25/12
|
||||||
|
f 29/28/13 30/29/13 28/27/13
|
||||||
|
f 31/30/14 32/31/14 30/29/14
|
||||||
|
f 1/32/15 2/3/15 34/33/15
|
||||||
|
f 33/34/16 34/33/16 32/31/16
|
||||||
|
f 1/32/1 3/1/1 2/3/1
|
||||||
|
f 3/1/2 5/4/2 4/2/2
|
||||||
|
f 5/4/3 7/6/3 6/5/3
|
||||||
|
f 7/6/4 9/8/4 8/7/4
|
||||||
|
f 9/35/5 11/10/5 10/12/5
|
||||||
|
f 11/10/6 13/13/6 12/11/6
|
||||||
|
f 13/13/7 15/15/7 14/14/7
|
||||||
|
f 15/15/8 17/17/8 16/16/8
|
||||||
|
f 19/36/9 21/19/9 20/21/9
|
||||||
|
f 21/19/10 23/22/10 22/20/10
|
||||||
|
f 23/22/11 25/24/11 24/23/11
|
||||||
|
f 25/24/12 27/26/12 26/25/12
|
||||||
|
f 27/26/13 29/28/13 28/27/13
|
||||||
|
f 29/28/14 31/30/14 30/29/14
|
||||||
|
f 33/34/15 1/32/15 34/33/15
|
||||||
|
f 31/30/16 33/34/16 32/31/16
|
||||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
@@ -79,7 +79,6 @@ public:
|
|||||||
m_World->SystemFactory.Register<Systems::Sound>([this]() { return new Systems::Sound(m_World.get(), m_EventBroker); });
|
m_World->SystemFactory.Register<Systems::Sound>([this]() { return new Systems::Sound(m_World.get(), m_EventBroker); });
|
||||||
m_World->AddSystem<Systems::Sound>();
|
m_World->AddSystem<Systems::Sound>();
|
||||||
|
|
||||||
|
|
||||||
m_World->ComponentFactory.Register<Components::Sprite>();
|
m_World->ComponentFactory.Register<Components::Sprite>();
|
||||||
|
|
||||||
m_World->ComponentFactory.Register<Components::RectangleShape>();
|
m_World->ComponentFactory.Register<Components::RectangleShape>();
|
||||||
@@ -107,14 +106,15 @@ public:
|
|||||||
/*{
|
/*{
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
//OctoBall
|
||||||
{
|
{
|
||||||
auto ent = m_World->CreateEntity();
|
auto ent = m_World->CreateEntity();
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
||||||
transform->Position = glm::vec3(0.5f, 0.f, -9.9f);
|
transform->Position = glm::vec3(0.5f, 0.f, -9.9f);
|
||||||
transform->Scale = glm::vec3(1.f, 1.f, 1.f);
|
transform->Scale = glm::vec3(1.f, 1.f, 1.f);
|
||||||
|
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(ent);
|
auto model = m_World->AddComponent<Components::Model>(ent);
|
||||||
sprite->SpriteFile = "Textures/Ball.png";
|
model->ModelFile = "Models/Test/Ball/Ballopus.obj";
|
||||||
|
|
||||||
std::shared_ptr<Components::CircleShape> circleShape = m_World->AddComponent<Components::CircleShape>(ent);
|
std::shared_ptr<Components::CircleShape> circleShape = m_World->AddComponent<Components::CircleShape>(ent);
|
||||||
std::shared_ptr<Components::Ball> ball = m_World->AddComponent<Components::Ball>(ent);
|
std::shared_ptr<Components::Ball> ball = m_World->AddComponent<Components::Ball>(ent);
|
||||||
@@ -134,26 +134,34 @@ public:
|
|||||||
m_EventBroker->Publish(e);
|
m_EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//PointLightTest
|
||||||
{
|
{
|
||||||
auto t_BrickWall = m_World->CreateEntity();
|
auto t_Light = m_World->CreateEntity();
|
||||||
auto transform = m_World->AddComponent<Components::Transform>(t_BrickWall);
|
auto transform = m_World->AddComponent<Components::Transform>(t_Light);
|
||||||
transform->Position = glm::vec3(0.f, 0.f, -10.f);
|
transform->Position = glm::vec3(2.f, 1.5f, -9.f);
|
||||||
auto sprite = m_World->AddComponent<Components::Sprite>(t_BrickWall);
|
auto pl = m_World->AddComponent<Components::PointLight>(t_Light);
|
||||||
//TODO: Rename SpriteFile to DiffuseTexture or similar.
|
pl->Radius = 8.f;
|
||||||
sprite->SpriteFile = "Textures/Ball.png";
|
|
||||||
sprite->NormalTexture = "Textures/Test/Brick_Normal.png";
|
|
||||||
sprite->SpecularTexture = "Textures/Test/Brick_Specular.png";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Halfpipe background test model.
|
||||||
{
|
{
|
||||||
auto t_BrickWall = m_World->CreateEntity();
|
auto t_halfPipe = m_World->CreateEntity();
|
||||||
auto transform = m_World->AddComponent<Components::Transform>(t_BrickWall);
|
auto transform = m_World->AddComponent<Components::Transform>(t_halfPipe);
|
||||||
transform->Position = glm::vec3(0.4f, 0.f, -9.5f);
|
transform->Position = glm::vec3(0.f, 0.f, -15.f);
|
||||||
auto sprite = m_World->AddComponent<Components::Sprite>(t_BrickWall);
|
transform->Scale = glm::vec3(15.f);
|
||||||
//TODO: Rename SpriteFile to DiffuseTexture or similar.
|
auto model = m_World->AddComponent<Components::Model>(t_halfPipe);
|
||||||
sprite->SpriteFile = "Textures/Ball.png";
|
model->ModelFile = "Models/Test/halfpipe/Halfpipe.obj";
|
||||||
sprite->NormalTexture = "Textures/Test/Brick_Normal.png";
|
}
|
||||||
sprite->SpecularTexture = "Textures/Test/Brick_Specular.png";
|
|
||||||
|
//Brick test model
|
||||||
|
{
|
||||||
|
auto t_Brick = m_World->CreateEntity();
|
||||||
|
auto transform = m_World->AddComponent<Components::Transform>(t_Brick);
|
||||||
|
transform->Position = glm::vec3(0.f, 0.f, -12.f);
|
||||||
|
transform->Orientation = glm::rotate(glm::quat(), 0.5f, glm::vec3(0,-1,-1));
|
||||||
|
auto model = m_World->AddComponent<Components::Model>(t_Brick);
|
||||||
|
model->ModelFile = "Models/Test/Brick/Brick.obj";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -205,25 +213,6 @@ public:
|
|||||||
m_World->CommitEntity(rightWall);
|
m_World->CommitEntity(rightWall);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*{
|
|
||||||
auto ent = m_World->CreateEntity();
|
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
|
||||||
transform->Position = glm::vec3(0.f, -3.f, -10.f);
|
|
||||||
transform->Scale = glm::vec3(8.f, 0.5f, 1.f);
|
|
||||||
transform->Orientation = glm::rotate(transform->Orientation, glm::radians(25.f), glm::vec3(0, 0, -1));
|
|
||||||
|
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(ent);
|
|
||||||
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
|
|
||||||
|
|
||||||
std::shared_ptr<Components::RectangleShape> boxShape = m_World->AddComponent<Components::RectangleShape>(ent);
|
|
||||||
|
|
||||||
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(ent);
|
|
||||||
physics->Static = true;
|
|
||||||
|
|
||||||
m_World->CommitEntity(ent);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
{
|
{
|
||||||
auto ent = m_World->CreateEntity();
|
auto ent = m_World->CreateEntity();
|
||||||
m_World->SetProperty(ent, "Name", "Pad");
|
m_World->SetProperty(ent, "Name", "Pad");
|
||||||
@@ -322,7 +311,7 @@ public:
|
|||||||
glm::mat4 modelMatrix = glm::translate(glm::mat4(), absoluteTransform.Position)
|
glm::mat4 modelMatrix = glm::translate(glm::mat4(), absoluteTransform.Position)
|
||||||
* glm::toMat4(absoluteTransform.Orientation)
|
* glm::toMat4(absoluteTransform.Orientation)
|
||||||
* glm::scale(absoluteTransform.Scale);
|
* glm::scale(absoluteTransform.Scale);
|
||||||
EnqueueModel(modelAsset, modelMatrix, modelComponent->Transparent, modelComponent->Color);
|
EnqueueModel(modelAsset, modelMatrix, modelComponent->Transparent, modelComponent->Color, modelComponent->ModelFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,7 +359,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Get this out of engine.h
|
//TODO: Get this out of engine.h
|
||||||
void EnqueueModel(Model* model, glm::mat4 modelMatrix, float transparent, glm::vec4 color)
|
void EnqueueModel(Model* model, glm::mat4 modelMatrix, float transparent, glm::vec4 color, std::string fileName)
|
||||||
{
|
{
|
||||||
for (auto texGroup : model->TextureGroups)
|
for (auto texGroup : model->TextureGroups)
|
||||||
{
|
{
|
||||||
@@ -385,8 +374,7 @@ public:
|
|||||||
job.EndIndex = texGroup.EndIndex;
|
job.EndIndex = texGroup.EndIndex;
|
||||||
job.ModelMatrix = modelMatrix;
|
job.ModelMatrix = modelMatrix;
|
||||||
job.Color = color;
|
job.Color = color;
|
||||||
//TODO: This Depth is probably wrong.
|
job.fileName = fileName;
|
||||||
job.Depth = (glm::vec4(1,1,1,0) * modelMatrix).z;
|
|
||||||
|
|
||||||
m_RendererQueue.Deferred.Add(job);
|
m_RendererQueue.Deferred.Add(job);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,8 +121,6 @@ public:
|
|||||||
int Process(std::string contextTypeName);
|
int Process(std::string contextTypeName);
|
||||||
void Clear();
|
void Clear();
|
||||||
void Unsubscribe(BaseEventRelay &relay);
|
void Unsubscribe(BaseEventRelay &relay);
|
||||||
template <typename ContextType>
|
|
||||||
void UnsubscribeAll();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef std::string ContextTypeName_t; // typeid(ContextType).name()
|
typedef std::string ContextTypeName_t; // typeid(ContextType).name()
|
||||||
@@ -156,13 +154,6 @@ int EventBroker::Process()
|
|||||||
return Process(contextTypeName);
|
return Process(contextTypeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ContextType>
|
|
||||||
void EventBroker::UnsubscribeAll()
|
|
||||||
{
|
|
||||||
const std::string contextTypeName = typeid(ContextType).name();
|
|
||||||
m_ContextRelays.erase(contextTypeName);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // MessageRelay_h__
|
#endif // MessageRelay_h__
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ struct ModelJob : RenderJob
|
|||||||
unsigned int ShaderID;
|
unsigned int ShaderID;
|
||||||
unsigned int TextureID;
|
unsigned int TextureID;
|
||||||
|
|
||||||
|
std::string fileName;
|
||||||
|
|
||||||
glm::mat4 ModelMatrix;
|
glm::mat4 ModelMatrix;
|
||||||
GLuint DiffuseTexture;
|
GLuint DiffuseTexture;
|
||||||
GLuint NormalTexture;
|
GLuint NormalTexture;
|
||||||
|
|||||||
@@ -76,6 +76,8 @@ private:
|
|||||||
GLuint m_ScreenQuad = 0;
|
GLuint m_ScreenQuad = 0;
|
||||||
Model* m_UnitSphere = nullptr;
|
Model* m_UnitSphere = nullptr;
|
||||||
Model* m_UnitQuad = nullptr;
|
Model* m_UnitQuad = nullptr;
|
||||||
|
Texture* m_StandardNormal;
|
||||||
|
Texture* m_StandardSpecular;
|
||||||
|
|
||||||
GLuint m_rbDepthBuffer = 0;
|
GLuint m_rbDepthBuffer = 0;
|
||||||
GLuint m_fbDeferred1 = 0;
|
GLuint m_fbDeferred1 = 0;
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ public:
|
|||||||
|
|
||||||
// Triggers commit events in systems
|
// Triggers commit events in systems
|
||||||
// TODO: Replace completely by EComponentCreated?
|
// TODO: Replace completely by EComponentCreated?
|
||||||
void CommitEntity(EntityID entity);
|
int CommitEntity(EntityID entity);
|
||||||
|
|
||||||
/** Get all components of a specific type.
|
/** Get all components of a specific type.
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace Components
|
|||||||
|
|
||||||
struct Ball : Component
|
struct Ball : Component
|
||||||
{
|
{
|
||||||
int number = 0;
|
int Number = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ struct Brick : Component
|
|||||||
{
|
{
|
||||||
int Points = 10;
|
int Points = 10;
|
||||||
int Hits = 1;
|
int Hits = 1;
|
||||||
|
int Score = 50;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// Created by Administrator on 2015-09-15.
|
// Created by Adniklastrator on 2015-09-15.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef DAYDREAM_CLIFE_H
|
#ifndef DAYDREAM_CLIFE_H
|
||||||
@@ -15,7 +15,7 @@ namespace Components
|
|||||||
|
|
||||||
struct Life : Component {
|
struct Life : Component {
|
||||||
|
|
||||||
int number = 0;
|
int Number = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ struct Pad : Component
|
|||||||
{
|
{
|
||||||
int Lives;
|
int Lives;
|
||||||
int Points;
|
int Points;
|
||||||
|
|
||||||
|
float SlowdownModifier = 5.f;
|
||||||
|
float AccelerationSpeed = 80.f;
|
||||||
|
float MaxSpeed = 40.f;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// Created by Administrator on 2015-09-15.
|
// Created by Adniklastrator on 2015-09-15.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef DAYDREAM_ELIFELOST_H
|
#ifndef DAYDREAM_ELIFELOST_H
|
||||||
@@ -16,7 +16,7 @@ namespace Events
|
|||||||
|
|
||||||
struct LifeLost : Event
|
struct LifeLost : Event
|
||||||
{
|
{
|
||||||
EntityID entity;
|
EntityID Entity;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// Created by Adniklastrator on 2015-09-15.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DAYDREAM_ERESETBALL_H
|
||||||
|
#define DAYDREAM_ERESETBALL_H
|
||||||
|
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
|
||||||
|
namespace dd
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct ResetBall : Event
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //DAYDREAM_ERESETBALL_H
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// Created by Adniklastrator on 2015-09-15.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DAYDREAM_ESCOREEVENT_H
|
||||||
|
#define DAYDREAM_ESCOREEVENT_H
|
||||||
|
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
|
||||||
|
namespace dd
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct ScoreEvent : Event
|
||||||
|
{
|
||||||
|
int Score = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //DAYDREAM_ESCOREEVENT_H
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "Core/System.h"
|
#include "Core/System.h"
|
||||||
#include "Core/CTransform.h"
|
#include "Core/CTransform.h"
|
||||||
#include "Rendering/CSprite.h"
|
#include "Rendering/CSprite.h"
|
||||||
|
#include "Rendering/CModel.h"
|
||||||
#include "Game/CBrick.h"
|
#include "Game/CBrick.h"
|
||||||
#include "Core/EventBroker.h"
|
#include "Core/EventBroker.h"
|
||||||
#include "Core/World.h"
|
#include "Core/World.h"
|
||||||
@@ -15,6 +16,8 @@
|
|||||||
#include "Game/CLife.h"
|
#include "Game/CLife.h"
|
||||||
#include "Game/EStageCleared.h"
|
#include "Game/EStageCleared.h"
|
||||||
#include "Game/ELifeLost.h"
|
#include "Game/ELifeLost.h"
|
||||||
|
#include "Game/EResetBall.h"
|
||||||
|
#include "Game/EScoreEvent.h"
|
||||||
#include "Physics/CBoxShape.h"
|
#include "Physics/CBoxShape.h"
|
||||||
#include "Physics/CPhysics.h"
|
#include "Physics/CPhysics.h"
|
||||||
#include "Physics/CCircleShape.h"
|
#include "Physics/CCircleShape.h"
|
||||||
@@ -63,25 +66,45 @@ public:
|
|||||||
|
|
||||||
void Update(double dt) override;
|
void Update(double dt) override;
|
||||||
void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
||||||
int lives = 3;
|
|
||||||
int pastLives = 3;
|
bool Initialized() const { return m_Initialized; }
|
||||||
|
void SetInitialized(const bool& initialized) { m_Initialized = initialized; }
|
||||||
|
int& Lives() { return m_Lives; }
|
||||||
|
void SetLives(const int& lives) { m_Lives = lives; }
|
||||||
|
int& PastLives() { return m_PastLives; }
|
||||||
|
void SetPastLives(const int& pastLives) { m_PastLives = pastLives; }
|
||||||
|
int& Score() { return m_Score; }
|
||||||
|
void SetScore(const int& score) { m_Score = score; }
|
||||||
|
int& NumberOfBricks() { return m_NumberOfBricks; }
|
||||||
|
void SetNumberOfBricks(const int& numberOfBricks) { m_NumberOfBricks = numberOfBricks; }
|
||||||
|
int& Rows() { return m_Rows; }
|
||||||
|
void SetRows(const int& rows) { m_Rows = rows; }
|
||||||
|
int& Lines() { return m_Lines; }
|
||||||
|
void SetLines(const int& lines) { m_Lines = lines; }
|
||||||
|
int& SpaceToEdge() { return m_SpaceToEdge; }
|
||||||
|
void SetSpaceToEdge(const int& spaceToEdge) { m_SpaceToEdge = spaceToEdge; }
|
||||||
|
|
||||||
|
glm::vec2& SpaceBetweenBricks() { return m_SpaceBetweenBricks; }
|
||||||
|
void SetSpaceBetweenBricks(const glm::vec2& spaceBetweenBricks) { m_SpaceBetweenBricks = spaceBetweenBricks; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_Initialized = false;
|
||||||
|
int m_Lives = 3;
|
||||||
|
int m_PastLives = 3;
|
||||||
|
int m_Score = 0;
|
||||||
|
int m_NumberOfBricks;
|
||||||
|
int m_Rows = 7;
|
||||||
|
int m_Lines = 8;
|
||||||
|
int m_SpaceToEdge = 0;
|
||||||
|
glm::vec2 m_SpaceBetweenBricks = glm::vec2(2, 0.5);
|
||||||
|
|
||||||
dd::EventRelay<LevelSystem, dd::Events::Contact> m_EContact;
|
dd::EventRelay<LevelSystem, dd::Events::Contact> m_EContact;
|
||||||
dd::EventRelay<LevelSystem, dd::Events::LifeLost> m_ELifeLost;
|
dd::EventRelay<LevelSystem, dd::Events::LifeLost> m_ELifeLost;
|
||||||
|
dd::EventRelay<LevelSystem, dd::Events::ScoreEvent> m_EScoreEvent;
|
||||||
|
|
||||||
bool OnContact(const dd::Events::Contact &event);
|
bool OnContact(const dd::Events::Contact &event);
|
||||||
bool LifeLost(const dd::Events::LifeLost &event);
|
bool LifeLost(const dd::Events::LifeLost &event);
|
||||||
|
bool ScoreEvent(const dd::Events::ScoreEvent &event);
|
||||||
bool m_Initialized = false;
|
|
||||||
|
|
||||||
int numberOfBricks;
|
|
||||||
int tRows = 7;
|
|
||||||
int tLines = 8;
|
|
||||||
glm::vec2 tSpaceBetweenBricks = glm::vec2(2, 0.5);
|
|
||||||
int tSpaceToEdge = 0;
|
|
||||||
|
|
||||||
EntityID entityToRemove = NULL;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
#include "Physics/CCircleShape.h"
|
#include "Physics/CCircleShape.h"
|
||||||
#include "Physics/ESetImpulse.h"
|
#include "Physics/ESetImpulse.h"
|
||||||
#include "Rendering/CSprite.h"
|
#include "Rendering/CSprite.h"
|
||||||
|
#include "Rendering/CModel.h"
|
||||||
#include "Game/CBall.h"
|
#include "Game/CBall.h"
|
||||||
#include "Game/ELifeLost.h"
|
#include "Game/EResetBall.h"
|
||||||
|
#include "CPad.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace dd
|
namespace dd
|
||||||
@@ -35,41 +35,49 @@ class PadSystem : public System
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PadSystem(World* world, std::shared_ptr<dd::EventBroker> eventBroker)
|
PadSystem(World* world, std::shared_ptr<dd::EventBroker> eventBroker)
|
||||||
: System(world, eventBroker)
|
: System(world, eventBroker) { }
|
||||||
{ }
|
|
||||||
|
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
void Update(double dt) override;
|
void Update(double dt) override;
|
||||||
void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
||||||
|
|
||||||
|
EntityID& Entity() { return m_Entity; }
|
||||||
|
void SetEntity(const EntityID& ent) { m_Entity = ent; }
|
||||||
|
glm::vec3 Acceleration() const { return m_Acceleration; }
|
||||||
|
void SetAcceleration(const glm::vec3& acceleration) { m_Acceleration = acceleration; }
|
||||||
|
|
||||||
|
bool Left() const { return m_Left; }
|
||||||
|
void SetLeft(const bool& left) { m_Left = left; }
|
||||||
|
bool Right() const { return m_Right; }
|
||||||
|
void SetRight(const bool& right) { m_Right = right; }
|
||||||
|
bool ReplaceBall() const { return m_ReplaceBall; }
|
||||||
|
void SetReplaceBall(const bool& replaceBall) { m_ReplaceBall = replaceBall; }
|
||||||
|
|
||||||
|
Components::Transform* Transform() const { return m_Transform; }
|
||||||
|
void SetTransform(const Components::Transform* transform) { m_Transform = transform; }
|
||||||
|
Components::Pad* Pad() const { return m_Pad; }
|
||||||
|
void SetPad(const Components::Pad* pad) { m_Pad = pad; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
EntityID m_Entity = 0;
|
||||||
|
glm::vec3 m_Acceleration = glm::vec3(0.f, 0.f, 0.f);
|
||||||
|
bool m_Left = false, m_Right = false, m_ReplaceBall = false;
|
||||||
|
Components::Transform* m_Transform;
|
||||||
|
Components::Pad* m_Pad;
|
||||||
|
|
||||||
dd::EventRelay<PadSystem, dd::Events::KeyDown> m_EKeyDown;
|
dd::EventRelay<PadSystem, dd::Events::KeyDown> m_EKeyDown;
|
||||||
dd::EventRelay<PadSystem, dd::Events::KeyUp> m_EKeyUp;
|
dd::EventRelay<PadSystem, dd::Events::KeyUp> m_EKeyUp;
|
||||||
dd::EventRelay<PadSystem, dd::Events::Contact> m_EContact;
|
dd::EventRelay<PadSystem, dd::Events::Contact> m_EContact;
|
||||||
dd::EventRelay<PadSystem, dd::Events::LifeLost> m_ELifeLost;
|
dd::EventRelay<PadSystem, dd::Events::ResetBall> m_EResetBall;
|
||||||
|
|
||||||
bool OnKeyDown(const dd::Events::KeyDown &event);
|
bool OnKeyDown(const dd::Events::KeyDown &event);
|
||||||
bool OnKeyUp(const dd::Events::KeyUp &event);
|
bool OnKeyUp(const dd::Events::KeyUp &event);
|
||||||
|
|
||||||
|
|
||||||
bool OnContact(const dd::Events::Contact &event);
|
bool OnContact(const dd::Events::Contact &event);
|
||||||
bool LifeLost(const dd::Events::LifeLost &event);
|
bool ResetBall(const dd::Events::ResetBall &event);
|
||||||
|
|
||||||
EntityID removeThisObject = NULL;
|
|
||||||
|
|
||||||
float slowdownModifier = 5.f;
|
|
||||||
float accelerationSpeed = 80.f;
|
|
||||||
float maxSpeed = 40.f;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PadSteeringInputController;
|
class PadSteeringInputController;
|
||||||
std::array<std::shared_ptr<PadSteeringInputController>, 4> m_PadInputControllers;
|
std::array<std::shared_ptr<PadSteeringInputController>, 4> m_PadInputControllers;
|
||||||
|
|
||||||
EntityID ent = 0;
|
|
||||||
Components::Transform* transform;
|
|
||||||
glm::vec3 acceleration = glm::vec3(0.f, 0.f, 0.f);
|
|
||||||
bool left = false, right = false, replaceBall = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class PadSystem::PadSteeringInputController : InputController<PadSystem>
|
class PadSystem::PadSteeringInputController : InputController<PadSystem>
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ set(SOURCE_FILES
|
|||||||
${SOURCE_FILES_Rendering}
|
${SOURCE_FILES_Rendering}
|
||||||
${SOURCE_FILES_Transform}
|
${SOURCE_FILES_Transform}
|
||||||
${SOURCE_FILES_Physics}
|
${SOURCE_FILES_Physics}
|
||||||
${SOURCE_FILES_Game} ../../include/Game/CLife.h ../../include/Game/ELifeLost.h)
|
${SOURCE_FILES_Game})
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
||||||
|
|||||||
@@ -77,20 +77,20 @@ void dd::Camera::SetOrientation(glm::quat val)
|
|||||||
|
|
||||||
void dd::Camera::UpdateProjectionMatrix()
|
void dd::Camera::UpdateProjectionMatrix()
|
||||||
{
|
{
|
||||||
m_ProjectionMatrix = glm::ortho(
|
// m_ProjectionMatrix = glm::ortho(
|
||||||
-16.f,
|
// -16.f,
|
||||||
16.f,
|
// 16.f,
|
||||||
-9.f,
|
// -9.f,
|
||||||
9.f,
|
// 9.f,
|
||||||
m_NearClip,
|
|
||||||
m_FarClip
|
|
||||||
);
|
|
||||||
// m_ProjectionMatrix = glm::perspective(
|
|
||||||
// m_FOV,
|
|
||||||
// m_AspectRatio,
|
|
||||||
// m_NearClip,
|
// m_NearClip,
|
||||||
// m_FarClip
|
// m_FarClip
|
||||||
// );
|
// );
|
||||||
|
m_ProjectionMatrix = glm::perspective(
|
||||||
|
m_FOV,
|
||||||
|
m_AspectRatio,
|
||||||
|
m_NearClip,
|
||||||
|
m_FarClip
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dd::Camera::UpdateViewMatrix()
|
void dd::Camera::UpdateViewMatrix()
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ void dd::EventBroker::Unsubscribe(BaseEventRelay &relay) // ?
|
|||||||
{
|
{
|
||||||
if (it->second == &relay)
|
if (it->second == &relay)
|
||||||
{
|
{
|
||||||
|
relay.m_Broker = nullptr;
|
||||||
eventRelays.erase(it);
|
eventRelays.erase(it);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,6 +113,8 @@ void dd::Renderer::CreateBuffers()
|
|||||||
m_ScreenQuad = CreateQuad();
|
m_ScreenQuad = CreateQuad();
|
||||||
m_UnitQuad = ResourceManager::Load<Model>("Models/Core/UnitQuad.obj");
|
m_UnitQuad = ResourceManager::Load<Model>("Models/Core/UnitQuad.obj");
|
||||||
m_UnitSphere = ResourceManager::Load<Model>("Models/Core/UnitSphere.obj");
|
m_UnitSphere = ResourceManager::Load<Model>("Models/Core/UnitSphere.obj");
|
||||||
|
m_StandardNormal = ResourceManager::Load<Texture>("Textures/Core/NeutralNormalMap.png");
|
||||||
|
m_StandardSpecular = ResourceManager::Load<Texture>("Textures/Core/NeutralSpecularMap.png");
|
||||||
|
|
||||||
glGenRenderbuffers(1, &m_rbDepthBuffer);
|
glGenRenderbuffers(1, &m_rbDepthBuffer);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, m_rbDepthBuffer);
|
glBindRenderbuffer(GL_RENDERBUFFER, m_rbDepthBuffer);
|
||||||
@@ -208,7 +210,7 @@ void dd::Renderer::CreateBuffers()
|
|||||||
void dd::Renderer::Draw(RenderQueueCollection& rq)
|
void dd::Renderer::Draw(RenderQueueCollection& rq)
|
||||||
{
|
{
|
||||||
|
|
||||||
//DrawDeferred(rq.Deferred, rq.Lights);
|
DrawDeferred(rq.Deferred, rq.Lights);
|
||||||
rq.Forward.Jobs.sort(dd::Renderer::DepthSort);
|
rq.Forward.Jobs.sort(dd::Renderer::DepthSort);
|
||||||
DrawForward(rq.Forward, rq.Lights);
|
DrawForward(rq.Forward, rq.Lights);
|
||||||
|
|
||||||
@@ -289,8 +291,8 @@ void dd::Renderer::DrawForward(RenderQueue &objects, RenderQueue &lights)
|
|||||||
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);
|
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
|
||||||
glClearColor(1, 0.9, 0.8f, 1);
|
// glClearColor(1, 0.9, 0.8f, 1);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
m_spForward->Bind();
|
m_spForward->Bind();
|
||||||
DrawScene(objects, *m_spForward);
|
DrawScene(objects, *m_spForward);
|
||||||
@@ -321,14 +323,23 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program)
|
|||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, modelJob->DiffuseTexture);
|
glBindTexture(GL_TEXTURE_2D, modelJob->DiffuseTexture);
|
||||||
if (modelJob->NormalTexture != 0) {
|
if (modelJob->NormalTexture != 0 && false) {
|
||||||
glActiveTexture(GL_TEXTURE1);
|
glActiveTexture(GL_TEXTURE1);
|
||||||
glBindTexture(GL_TEXTURE_2D, modelJob->NormalTexture);
|
glBindTexture(GL_TEXTURE_2D, modelJob->NormalTexture);
|
||||||
|
} else {
|
||||||
|
glActiveTexture(GL_TEXTURE1);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, *m_StandardNormal);
|
||||||
}
|
}
|
||||||
if (modelJob->SpecularTexture != 0) {
|
|
||||||
|
if (modelJob->SpecularTexture != 0 && false) {
|
||||||
glActiveTexture(GL_TEXTURE2);
|
glActiveTexture(GL_TEXTURE2);
|
||||||
glBindTexture(GL_TEXTURE_2D, modelJob->SpecularTexture);
|
glBindTexture(GL_TEXTURE_2D, modelJob->SpecularTexture);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
glActiveTexture(GL_TEXTURE2);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, *m_StandardSpecular);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
glBindVertexArray(modelJob->VAO);
|
glBindVertexArray(modelJob->VAO);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->ElementBuffer);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->ElementBuffer);
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ void main()
|
|||||||
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) * (vec4(LightingTexel.rgb, 0.0) + vec4(LightingTexel.a, LightingTexel.a, LightingTexel.a, 0.0)));
|
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) * (vec4(LightingTexel.rgb, 0.0) + vec4(LightingTexel.a, LightingTexel.a, LightingTexel.a, 0.0)));
|
||||||
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) + LightingTexel);
|
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) + LightingTexel);
|
||||||
//frag_Diffuse = DiffuseTexel * (vec4(1.f, 1.f, 1.f, 0.0) + LightingTexel);
|
//frag_Diffuse = DiffuseTexel * (vec4(1.f, 1.f, 1.f, 0.0) + LightingTexel);
|
||||||
frag_Diffuse = DiffuseTexel;
|
frag_Diffuse = DiffuseTexel + LightingTexel;
|
||||||
|
//frag_Diffuse = DiffuseTexel;
|
||||||
//frag_Diffuse = vec4(LightingTexel.r, LightingTexel.g, LightingTexel.b, 1.0);
|
//frag_Diffuse = vec4(LightingTexel.r, LightingTexel.g, LightingTexel.b, 1.0);
|
||||||
}
|
}
|
||||||
@@ -163,7 +163,7 @@ void dd::World::Initialize()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void dd::World::CommitEntity(EntityID entity)
|
int dd::World::CommitEntity(EntityID entity)
|
||||||
{
|
{
|
||||||
for (auto pair : m_Systems)
|
for (auto pair : m_Systems)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ void dd::Systems::LevelSystem::Initialize()
|
|||||||
{
|
{
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EContact, LevelSystem::OnContact);
|
EVENT_SUBSCRIBE_MEMBER(m_EContact, LevelSystem::OnContact);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, LevelSystem::LifeLost);
|
EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, LevelSystem::LifeLost);
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EScoreEvent, LevelSystem::ScoreEvent);
|
||||||
|
|
||||||
for (int i = 0; i < lives; i++)
|
for (int i = 0; i < Lives(); i++) {
|
||||||
{
|
|
||||||
CreateLife(i);
|
CreateLife(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,14 +24,17 @@ void dd::Systems::LevelSystem::CreateLife(int number)
|
|||||||
{
|
{
|
||||||
auto life = m_World->CreateEntity();
|
auto life = m_World->CreateEntity();
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(life);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(life);
|
||||||
transform->Position = glm::vec3(-11.f + number, -8.f, -10.f);
|
transform->Position = glm::vec3(-4.f + number * 0.5f, -2.f, -5.f);
|
||||||
transform->Scale = glm::vec3(0.5f, 0.5f, 0.5f);
|
transform->Scale = glm::vec3(0.25f, 0.25f, 0.25f);
|
||||||
|
|
||||||
std::shared_ptr<Components::Life> lifeNr = m_World->AddComponent<Components::Life>(life);
|
std::shared_ptr<Components::Life> lifeNr = m_World->AddComponent<Components::Life>(life);
|
||||||
lifeNr->number = number;
|
lifeNr->Number = number;
|
||||||
|
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(life);
|
auto model = m_World->AddComponent<Components::Model>(life);
|
||||||
sprite->SpriteFile = "Textures/Ball.png";
|
model->ModelFile = "Models/Test/Ball/Ballopus.obj";
|
||||||
|
|
||||||
|
/*std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(life);
|
||||||
|
sprite->SpriteFile = "Textures/Ball.png";*/
|
||||||
|
|
||||||
m_World->CommitEntity(life);
|
m_World->CommitEntity(life);
|
||||||
}
|
}
|
||||||
@@ -39,44 +42,35 @@ void dd::Systems::LevelSystem::CreateLife(int number)
|
|||||||
void dd::Systems::LevelSystem::Update(double dt)
|
void dd::Systems::LevelSystem::Update(double dt)
|
||||||
{
|
{
|
||||||
if (!m_Initialized) {
|
if (!m_Initialized) {
|
||||||
CreateBasicLevel(tRows, tLines, tSpaceBetweenBricks, tSpaceToEdge);
|
CreateBasicLevel(Rows(), Lines(), SpaceBetweenBricks(), SpaceToEdge());
|
||||||
m_Initialized = true;
|
m_Initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entityToRemove != NULL)
|
|
||||||
{
|
|
||||||
//m_World->RemoveEntity(entityToRemove);
|
|
||||||
entityToRemove = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
||||||
{
|
{
|
||||||
auto ball = m_World->GetComponent<Components::Ball>(entity);
|
auto ball = m_World->GetComponent<Components::Ball>(entity);
|
||||||
|
|
||||||
if (ball != NULL)
|
if (ball != NULL) {
|
||||||
{
|
|
||||||
auto transformBall = m_World->GetComponent<Components::Transform>(entity);
|
auto transformBall = m_World->GetComponent<Components::Transform>(entity);
|
||||||
if (transformBall->Position.y < -10)
|
if (transformBall->Position.y < -10) {
|
||||||
{
|
if (Lives() == PastLives()) {
|
||||||
if (lives == pastLives)
|
|
||||||
{
|
|
||||||
Events::LifeLost e;
|
Events::LifeLost e;
|
||||||
e.entity = entity;
|
e.Entity = entity;
|
||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
|
Events::ResetBall be;
|
||||||
|
EventBroker->Publish(be);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lives != pastLives)
|
if (Lives() != PastLives()) {
|
||||||
{
|
|
||||||
auto life = m_World->GetComponent<Components::Life>(entity);
|
auto life = m_World->GetComponent<Components::Life>(entity);
|
||||||
if (life != NULL)
|
if (life != NULL) {
|
||||||
{
|
if (life->Number + 1 == PastLives()) {
|
||||||
if (life->number + 1 == pastLives) {
|
|
||||||
m_World->RemoveEntity(entity);
|
m_World->RemoveEntity(entity);
|
||||||
pastLives = lives;
|
SetPastLives(Lives());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,12 +79,10 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
void dd::Systems::LevelSystem::CreateBasicLevel(int rows, int lines, glm::vec2 spacesBetweenBricks, int spaceToEdge)
|
void dd::Systems::LevelSystem::CreateBasicLevel(int rows, int lines, glm::vec2 spacesBetweenBricks, int spaceToEdge)
|
||||||
{
|
{
|
||||||
int num = 0;
|
int num = 0;
|
||||||
numberOfBricks = rows * lines;
|
SetNumberOfBricks(rows * lines);
|
||||||
for (int i = 0; i < rows; i++)
|
for (int i = 0; i < rows; i++) {
|
||||||
{
|
|
||||||
num++;
|
num++;
|
||||||
for (int j = 0; j < lines; j++)
|
for (int j = 0; j < Lines(); j++) {
|
||||||
{
|
|
||||||
CreateBrick(i, j, spacesBetweenBricks, spaceToEdge, num);
|
CreateBrick(i, j, spacesBetweenBricks, spaceToEdge, num);
|
||||||
}
|
}
|
||||||
if (num == 7)
|
if (num == 7)
|
||||||
@@ -104,18 +96,21 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe
|
|||||||
{
|
{
|
||||||
auto brick = m_World->CreateEntity();
|
auto brick = m_World->CreateEntity();
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(brick);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(brick);
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(brick);
|
//std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(brick);
|
||||||
|
auto model = m_World->AddComponent<Components::Model>(brick);
|
||||||
std::shared_ptr<Components::Brick> cBrick = m_World->AddComponent<Components::Brick>(brick);
|
std::shared_ptr<Components::Brick> cBrick = m_World->AddComponent<Components::Brick>(brick);
|
||||||
std::shared_ptr<Components::RectangleShape> cRec = m_World->AddComponent<Components::RectangleShape>(brick);
|
std::shared_ptr<Components::RectangleShape> cRec = m_World->AddComponent<Components::RectangleShape>(brick);
|
||||||
std::shared_ptr<Components::Physics> cPhys = m_World->AddComponent<Components::Physics>(brick);
|
std::shared_ptr<Components::Physics> cPhys = m_World->AddComponent<Components::Physics>(brick);
|
||||||
std::string fileName = "Textures/Bricks/";
|
std::string fileName = "Textures/Bricks/";
|
||||||
fileName.append(std::to_string(num));
|
fileName.append(std::to_string(num));
|
||||||
fileName.append(".png");
|
fileName.append(".png");
|
||||||
sprite->SpriteFile = fileName;
|
//sprite->SpriteFile = fileName;
|
||||||
|
model->ModelFile = "Models/Test/Brick/Brick.obj";
|
||||||
float x = spaceToEdge + line * spacesBetweenBricks.x;
|
float x = spaceToEdge + line * spacesBetweenBricks.x;
|
||||||
float y = spaceToEdge + row * spacesBetweenBricks.y;
|
float y = spaceToEdge + row * spacesBetweenBricks.y;
|
||||||
transform->Scale = glm::vec3(1.6, 0.4, 0.);
|
transform->Scale = glm::vec3(1.6, 0.35, 0.5);
|
||||||
transform->Position = glm::vec3(x - 7, y + 1, -10.f);
|
transform->Position = glm::vec3(x - 7, y + 1, -10.f);
|
||||||
|
cBrick->Score = 10 * num;
|
||||||
m_World->CommitEntity(brick);
|
m_World->CommitEntity(brick);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -128,15 +123,13 @@ void dd::Systems::LevelSystem::ProcessCollision()
|
|||||||
|
|
||||||
void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity)
|
void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity)
|
||||||
{
|
{
|
||||||
auto brick = m_World->GetComponent<Components::Brick>(entity);
|
/*auto brick = m_World->GetComponent<Components::Brick>(entity);
|
||||||
if (brick != NULL)
|
if (brick != NULL) {
|
||||||
{
|
|
||||||
numberOfBricks--;
|
numberOfBricks--;
|
||||||
if (numberOfBricks < 1)
|
if (numberOfBricks < 1) {
|
||||||
{
|
|
||||||
EndLevel();
|
EndLevel();
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,20 +137,41 @@ bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
{
|
{
|
||||||
EntityID entityBrick = event.Entity1;
|
EntityID entityBrick = event.Entity1;
|
||||||
auto brick = m_World->GetComponent<Components::Brick>(entityBrick);
|
auto brick = m_World->GetComponent<Components::Brick>(entityBrick);
|
||||||
if (brick == NULL)
|
if (brick == NULL) {
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
EntityID entityBall = event.Entity2;
|
EntityID entityBall = event.Entity2;
|
||||||
|
|
||||||
m_World->RemoveEntity(entityBrick);
|
m_World->RemoveEntity(entityBrick);
|
||||||
|
|
||||||
|
SetNumberOfBricks(NumberOfBricks() - 1);
|
||||||
|
if (NumberOfBricks() == 0) {
|
||||||
|
Events::ScoreEvent es;
|
||||||
|
es.Score = 500;
|
||||||
|
EventBroker->Publish(es);
|
||||||
|
Events::ResetBall e;
|
||||||
|
EventBroker->Publish(e);
|
||||||
|
CreateBasicLevel(Rows(), Lines(), SpaceBetweenBricks(), SpaceToEdge());
|
||||||
|
}
|
||||||
|
Events::ScoreEvent es;
|
||||||
|
es.Score = brick->Score;
|
||||||
|
EventBroker->Publish(es);
|
||||||
|
|
||||||
|
std::cout << "Score: " << Score() << std::endl;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dd::Systems::LevelSystem::LifeLost(const dd::Events::LifeLost &event)
|
bool dd::Systems::LevelSystem::LifeLost(const dd::Events::LifeLost &event)
|
||||||
{
|
{
|
||||||
lives--;
|
SetLives(Lives() - 1);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dd::Systems::LevelSystem::ScoreEvent(const dd::Events::ScoreEvent &event)
|
||||||
|
{
|
||||||
|
SetScore(Score() += event.Score);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "Core/World.h"
|
#include "Core/World.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <Game/CPad.h>
|
#include <Game/CPad.h>
|
||||||
|
#include <Rendering/CPointLight.h>
|
||||||
|
|
||||||
|
|
||||||
void dd::Systems::PadSystem::Initialize()
|
void dd::Systems::PadSystem::Initialize()
|
||||||
@@ -24,7 +25,7 @@ void dd::Systems::PadSystem::Initialize()
|
|||||||
EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, PadSystem::OnKeyDown);
|
EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, PadSystem::OnKeyDown);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, PadSystem::OnKeyUp);
|
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, PadSystem::OnKeyUp);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EContact, PadSystem::OnContact);
|
EVENT_SUBSCRIBE_MEMBER(m_EContact, PadSystem::OnContact);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, PadSystem::LifeLost);
|
EVENT_SUBSCRIBE_MEMBER(m_EResetBall, PadSystem::ResetBall);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -33,22 +34,34 @@ void dd::Systems::PadSystem::UpdateEntity(double dt, EntityID entity, EntityID p
|
|||||||
{
|
{
|
||||||
auto ball = m_World->GetComponent<Components::Ball>(entity);
|
auto ball = m_World->GetComponent<Components::Ball>(entity);
|
||||||
if (ball != NULL) {
|
if (ball != NULL) {
|
||||||
if (replaceBall == true) {
|
if (ReplaceBall() == true) {
|
||||||
replaceBall = false;
|
SetReplaceBall(false);
|
||||||
|
|
||||||
auto transformEntity = m_World->GetComponent<Components::Transform>(entity);
|
auto transformEntity = m_World->GetComponent<Components::Transform>(entity);
|
||||||
transformEntity->Position = glm::vec3(20, 20, -10);
|
transformEntity->Position = glm::vec3(20, 20, -10);
|
||||||
|
|
||||||
//Temporary. Create new ball.
|
//Temporary. Create new ball.
|
||||||
auto ent = m_World->CreateEntity();
|
/*auto ent = m_World->CreateEntity();
|
||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
||||||
transform->Position = glm::vec3(0.5f, 0.f, -10.f);;
|
transform->Position = glm::vec3(0.5f, 0.f, -10.f);
|
||||||
transform->Scale = glm::vec3(1.f, 1.f, 1.f);
|
transform->Scale = glm::vec3(1.f, 1.f, 1.f);
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(ent);
|
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(ent);
|
||||||
sprite->SpriteFile = "Textures/Ball.png";
|
sprite->SpriteFile = "Textures/Ball.png";
|
||||||
std::shared_ptr<Components::CircleShape> circleShape = m_World->AddComponent<Components::CircleShape>(ent);
|
std::shared_ptr<Components::CircleShape> circleShape = m_World->AddComponent<Components::CircleShape>(ent);
|
||||||
std::shared_ptr<Components::Ball> cball = m_World->AddComponent<Components::Ball>(ent);
|
std::shared_ptr<Components::Ball> cball = m_World->AddComponent<Components::Ball>(ent);
|
||||||
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(ent);
|
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(ent);
|
||||||
|
physics->Static = false;*/
|
||||||
|
|
||||||
|
auto ent = m_World->CreateEntity();
|
||||||
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
||||||
|
transform->Position = glm::vec3(0.5f, 0.f, -10.f);
|
||||||
|
transform->Scale = glm::vec3(1.f, 1.f, 1.f);
|
||||||
|
auto model = m_World->AddComponent<Components::Model>(ent);
|
||||||
|
model->ModelFile = "Models/Test/Ball/Ballopus.obj";
|
||||||
|
//auto pointlight = m_World->AddComponent<Components::PointLight>(ent);
|
||||||
|
std::shared_ptr<Components::CircleShape> circleShape = m_World->AddComponent<Components::CircleShape>(ent);
|
||||||
|
std::shared_ptr<Components::Ball> cball = m_World->AddComponent<Components::Ball>(ent);
|
||||||
|
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(ent);
|
||||||
physics->Static = false;
|
physics->Static = false;
|
||||||
|
|
||||||
m_World->RemoveEntity(entity);
|
m_World->RemoveEntity(entity);
|
||||||
@@ -65,70 +78,65 @@ void dd::Systems::PadSystem::UpdateEntity(double dt, EntityID entity, EntityID p
|
|||||||
|
|
||||||
void dd::Systems::PadSystem::Update(double dt)
|
void dd::Systems::PadSystem::Update(double dt)
|
||||||
{
|
{
|
||||||
if (ent == 0) {
|
if (Entity() == 0) {
|
||||||
for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) {
|
for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) {
|
||||||
if (m_World->GetProperty<std::string>(it->first, "Name") == "Pad") {
|
if (m_World->GetProperty<std::string>(it->first, "Name") == "Pad") {
|
||||||
ent = it->first;
|
SetEntity(it->first);
|
||||||
transform = m_World->GetComponent<Components::Transform>(ent);
|
SetTransform(m_World->GetComponent<Components::Transform>(Entity()));
|
||||||
|
SetPad(m_World->GetComponent<Components::Pad>(Entity()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transform->Velocity.x < -maxSpeed)
|
auto transform = Transform();
|
||||||
{
|
auto pad = Pad();
|
||||||
transform->Velocity.x = -maxSpeed;
|
auto acceleration = Acceleration();
|
||||||
|
|
||||||
|
if (transform->Velocity.x < -pad->MaxSpeed) {
|
||||||
|
transform->Velocity.x = -pad->MaxSpeed;
|
||||||
}
|
}
|
||||||
else if (transform->Velocity.x > maxSpeed)
|
else if (transform->Velocity.x > pad->MaxSpeed) {
|
||||||
{
|
transform->Velocity.x = pad->MaxSpeed;
|
||||||
transform->Velocity.x = maxSpeed;
|
|
||||||
}
|
}
|
||||||
transform->Position += transform->Velocity * (float)dt;
|
transform->Position += transform->Velocity * (float)dt;
|
||||||
transform->Velocity += acceleration * (float)dt;
|
transform->Velocity += acceleration * (float)dt;
|
||||||
transform->Velocity -= transform->Velocity * slowdownModifier * (float)dt;
|
transform->Velocity -= transform->Velocity * pad->SlowdownModifier * (float)dt;
|
||||||
|
|
||||||
if (left)
|
if (Left()) {
|
||||||
{
|
acceleration.x = -pad->AccelerationSpeed;
|
||||||
acceleration.x = -accelerationSpeed;
|
|
||||||
}
|
}
|
||||||
else if (right)
|
else if (Right()) {
|
||||||
{
|
acceleration.x = pad->AccelerationSpeed;
|
||||||
acceleration.x = accelerationSpeed;
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
acceleration.x = 0.f;
|
acceleration.x = 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetTransform(transform);
|
||||||
|
SetPad(pad);
|
||||||
|
SetAcceleration(acceleration);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event)
|
bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event)
|
||||||
{
|
{
|
||||||
int val = event.KeyCode;
|
int val = event.KeyCode;
|
||||||
if (val == 265)
|
if (val == GLFW_KEY_UP) {
|
||||||
{
|
|
||||||
//std::cout << "Up!" << std::endl;
|
//std::cout << "Up!" << std::endl;
|
||||||
}
|
} else if (val == GLFW_KEY_DOWN) {
|
||||||
else if (val == 264)
|
|
||||||
{
|
|
||||||
//std::cout << "Down!" << std::endl;
|
//std::cout << "Down!" << std::endl;
|
||||||
}
|
} else if (val == GLFW_KEY_LEFT) {
|
||||||
else if (val == 263)
|
|
||||||
{
|
|
||||||
//std::cout << "Left!" << std::endl;
|
//std::cout << "Left!" << std::endl;
|
||||||
//acceleration.x = -0.01f;
|
//acceleration.x = -0.01f;
|
||||||
left = true;
|
SetLeft(true);
|
||||||
}
|
} else if (val == GLFW_KEY_RIGHT) {
|
||||||
else if (val == 262)
|
|
||||||
{
|
|
||||||
//std::cout << "Right!" << std::endl;
|
//std::cout << "Right!" << std::endl;
|
||||||
//acceleration.x = 0.01f;
|
//acceleration.x = 0.01f;
|
||||||
right = true;
|
SetRight(true);
|
||||||
}
|
} else if (val == GLFW_KEY_R) {
|
||||||
else if (val == 82)
|
SetReplaceBall(true);
|
||||||
{
|
|
||||||
replaceBall = true;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -136,21 +144,14 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event)
|
|||||||
bool dd::Systems::PadSystem::OnKeyUp(const dd::Events::KeyUp &event)
|
bool dd::Systems::PadSystem::OnKeyUp(const dd::Events::KeyUp &event)
|
||||||
{
|
{
|
||||||
int val = event.KeyCode;
|
int val = event.KeyCode;
|
||||||
if (val == 265)
|
if (val == GLFW_KEY_UP) {
|
||||||
{
|
|
||||||
|
|
||||||
}
|
} else if (val == GLFW_KEY_DOWN) {
|
||||||
else if (val == 264)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
} else if (val == GLFW_KEY_LEFT) {
|
||||||
else if (val == 263)
|
SetLeft(false);
|
||||||
{
|
} else if (val == GLFW_KEY_RIGHT) {
|
||||||
left = false;
|
SetRight(false);
|
||||||
}
|
|
||||||
else if (val == 262)
|
|
||||||
{
|
|
||||||
right = false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -159,14 +160,12 @@ bool dd::Systems::PadSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
{
|
{
|
||||||
EntityID entityBall = event.Entity2;
|
EntityID entityBall = event.Entity2;
|
||||||
auto ball = m_World->GetComponent<Components::Ball>(entityBall);
|
auto ball = m_World->GetComponent<Components::Ball>(entityBall);
|
||||||
if (ball == NULL)
|
if (ball == NULL) {
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
EntityID entityPad = event.Entity1;
|
EntityID entityPad = event.Entity1;
|
||||||
auto pad = m_World->GetComponent<Components::Pad>(entityPad);
|
auto pad = m_World->GetComponent<Components::Pad>(entityPad);
|
||||||
if (pad == NULL)
|
if (pad == NULL) {
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
auto transformBall = m_World->GetComponent<Components::Transform>(entityBall);
|
auto transformBall = m_World->GetComponent<Components::Transform>(entityBall);
|
||||||
@@ -176,13 +175,10 @@ bool dd::Systems::PadSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
|
|
||||||
float whatX = transformBall->Position.x - transformPad->Position.x;
|
float whatX = transformBall->Position.x - transformPad->Position.x;
|
||||||
float movementX;
|
float movementX;
|
||||||
if (whatX > 0)
|
if (whatX > 0) {
|
||||||
{
|
|
||||||
movementX = movementMultiplier * whatX;
|
movementX = movementMultiplier * whatX;
|
||||||
//std::cout << "Right!" << std::endl;
|
//std::cout << "Right!" << std::endl;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
movementX = movementMultiplier * whatX;
|
movementX = movementMultiplier * whatX;
|
||||||
//std::cout << "Left!" << std::endl;
|
//std::cout << "Left!" << std::endl;
|
||||||
}
|
}
|
||||||
@@ -199,8 +195,9 @@ bool dd::Systems::PadSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
||||||
transform->Position = glm::vec3(transformBall->Position.x, transformBall->Position.y + 0.01f, -10.f);
|
transform->Position = glm::vec3(transformBall->Position.x, transformBall->Position.y + 0.01f, -10.f);
|
||||||
transform->Scale = glm::vec3(1.f, 1.f, 1.f);
|
transform->Scale = glm::vec3(1.f, 1.f, 1.f);
|
||||||
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(ent);
|
auto model = m_World->AddComponent<Components::Model>(ent);
|
||||||
sprite->SpriteFile = "Textures/Ball.png";
|
model->ModelFile = "Models/Test/Ball/Ballopus.obj";
|
||||||
|
//auto pointlight = m_World->AddComponent<Components::PointLight>(ent);
|
||||||
std::shared_ptr<Components::CircleShape> circleShape = m_World->AddComponent<Components::CircleShape>(ent);
|
std::shared_ptr<Components::CircleShape> circleShape = m_World->AddComponent<Components::CircleShape>(ent);
|
||||||
std::shared_ptr<Components::Ball> cball = m_World->AddComponent<Components::Ball>(ent);
|
std::shared_ptr<Components::Ball> cball = m_World->AddComponent<Components::Ball>(ent);
|
||||||
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(ent);
|
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(ent);
|
||||||
@@ -216,9 +213,9 @@ bool dd::Systems::PadSystem::OnContact(const dd::Events::Contact &event)
|
|||||||
EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dd::Systems::PadSystem::LifeLost(const dd::Events::LifeLost &event)
|
bool dd::Systems::PadSystem::ResetBall(const dd::Events::ResetBall &event)
|
||||||
{
|
{
|
||||||
replaceBall = true;
|
SetReplaceBall(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,12 +225,9 @@ bool dd::Systems::PadSystem::PadSteeringInputController::OnCommand(const Events:
|
|||||||
|
|
||||||
std::cout << "Command!" << std::endl;
|
std::cout << "Command!" << std::endl;
|
||||||
|
|
||||||
if (command == "right")
|
if (command == "right") {
|
||||||
{
|
|
||||||
std::cout << "Right!" << std::endl;
|
std::cout << "Right!" << std::endl;
|
||||||
}
|
} else if (command == "left") {
|
||||||
else if (command == "left")
|
|
||||||
{
|
|
||||||
std::cout << "Left!" << std::endl;
|
std::cout << "Left!" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,11 @@ void dd::Systems::PhysicsSystem::Update(double dt)
|
|||||||
if (! transformComponent)
|
if (! transformComponent)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (body == nullptr) {
|
||||||
|
//LOG_ERROR("This body should not exist");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (m_World->GetEntityParent(entity) == 0) {
|
if (m_World->GetEntityParent(entity) == 0) {
|
||||||
b2Vec2 position;
|
b2Vec2 position;
|
||||||
@@ -86,6 +91,11 @@ void dd::Systems::PhysicsSystem::Update(double dt)
|
|||||||
EntityID entity = i.first;
|
EntityID entity = i.first;
|
||||||
b2Body* body = i.second;
|
b2Body* body = i.second;
|
||||||
|
|
||||||
|
if (body == nullptr) {
|
||||||
|
//LOG_ERROR("This body should not exist");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
|
auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
|
||||||
if (! transformComponent)
|
if (! transformComponent)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ include_directories(
|
|||||||
set(SOURCE_FILES
|
set(SOURCE_FILES
|
||||||
main.cpp
|
main.cpp
|
||||||
FileWatcherTest.cpp
|
FileWatcherTest.cpp
|
||||||
|
EventTest.cpp
|
||||||
ComponentCopyTest.cpp
|
ComponentCopyTest.cpp
|
||||||
|
EntityCloneTest.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
#include "Core/World.h"
|
||||||
|
#include "Core/CTemplate.h"
|
||||||
|
using namespace dd;
|
||||||
|
|
||||||
|
struct TestComponent : public Component
|
||||||
|
{
|
||||||
|
int Int = 5;
|
||||||
|
float Float = 1.33333f;
|
||||||
|
double Double = 1.33333;
|
||||||
|
std::string String = "Hello World";
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(EntityCloneTest)
|
||||||
|
{
|
||||||
|
// Setup world
|
||||||
|
std::shared_ptr<EventBroker> eventBroker = std::make_shared<EventBroker>();
|
||||||
|
World world(eventBroker);
|
||||||
|
world.ComponentFactory.Register<Components::Template>();
|
||||||
|
world.ComponentFactory.Register<TestComponent>();
|
||||||
|
|
||||||
|
// Create our original entity
|
||||||
|
EntityID entOriginal = world.CreateEntity();
|
||||||
|
world.AddComponent<Components::Template>(entOriginal);
|
||||||
|
world.AddComponent<TestComponent>(entOriginal);
|
||||||
|
|
||||||
|
// Clone it
|
||||||
|
EntityID entClone = world.CloneEntity(entOriginal);
|
||||||
|
|
||||||
|
// Check
|
||||||
|
// EntityID of clone should not be same as original (obviously)
|
||||||
|
BOOST_CHECK(entOriginal != entClone);
|
||||||
|
// Template component SHOULD be in clone
|
||||||
|
auto templateComponentClone = world.GetComponent<Components::Template>(entClone);
|
||||||
|
BOOST_REQUIRE(templateComponentClone != nullptr);
|
||||||
|
// Values should be the same across the clone
|
||||||
|
auto testComponentOriginal = world.GetComponent<TestComponent>(entOriginal);
|
||||||
|
BOOST_REQUIRE(testComponentOriginal != nullptr);
|
||||||
|
auto testComponentClone = world.GetComponent<TestComponent>(entClone);
|
||||||
|
BOOST_REQUIRE(testComponentClone != nullptr);
|
||||||
|
BOOST_CHECK(testComponentClone->Int == testComponentOriginal->Int);
|
||||||
|
BOOST_CHECK(testComponentClone->Float == testComponentOriginal->Float);
|
||||||
|
BOOST_CHECK(testComponentClone->Double == testComponentOriginal->Double);
|
||||||
|
BOOST_CHECK(testComponentClone->String == testComponentOriginal->String);
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
#ifndef EVENTFIXTURE_H
|
||||||
|
#define EVENTFIXTURE_H
|
||||||
|
|
||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
|
||||||
|
template <typename EventType>
|
||||||
|
struct EventFixture
|
||||||
|
{
|
||||||
|
EventFixture()
|
||||||
|
{
|
||||||
|
this->EventBroker = new dd::EventBroker();
|
||||||
|
m_EEventType = decltype(m_EEventType)(std::bind(&OnEvent, this, std::placeholders::_1));
|
||||||
|
this->EventBroker->Subscribe(m_EEventType);
|
||||||
|
Run();
|
||||||
|
Check();
|
||||||
|
}
|
||||||
|
~EventFixture()
|
||||||
|
{
|
||||||
|
this->EventBroker->Unsubscribe(m_EEventType);
|
||||||
|
delete this->EventBroker;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd::EventBroker* EventBroker = nullptr;
|
||||||
|
dd::EventRelay<EventFixture, EventType> m_EEventType;
|
||||||
|
bool m_EventRecieved = false;
|
||||||
|
EventType Before;
|
||||||
|
EventType After;
|
||||||
|
|
||||||
|
bool OnEvent(const EventType& event)
|
||||||
|
{
|
||||||
|
m_EventRecieved = true;
|
||||||
|
After = event;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Run()
|
||||||
|
{
|
||||||
|
// Publish the event
|
||||||
|
this->EventBroker->Publish(Before);
|
||||||
|
// Clear to swap buffers
|
||||||
|
this->EventBroker->Clear();
|
||||||
|
// Process the event
|
||||||
|
this->EventBroker->template Process<EventFixture>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Check()
|
||||||
|
{
|
||||||
|
BOOST_CHECK(m_EventRecieved);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
#include "EventFixture.h"
|
||||||
|
|
||||||
|
using namespace dd;
|
||||||
|
|
||||||
|
struct ETestEvent : public Event
|
||||||
|
{
|
||||||
|
int Int = 5;
|
||||||
|
float Float = 1.33333f;
|
||||||
|
double Double = 1.33333;
|
||||||
|
std::string String = "Hello World";
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(EventBrokerTest)
|
||||||
|
{
|
||||||
|
EventFixture<ETestEvent> f;
|
||||||
|
BOOST_CHECK(f.Before.Int == f.After.Int);
|
||||||
|
BOOST_CHECK_CLOSE(f.Before.Float, f.After.Float, 0.00001f);
|
||||||
|
BOOST_CHECK_CLOSE(f.Before.Double, f.After.Double, 0.00001f);
|
||||||
|
BOOST_CHECK(f.Before.String == f.After.String);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#ifndef FILENAME_H__
|
#ifndef NAMESPACE_FILENAME_H__
|
||||||
#define FILENAME_H__
|
#define NAMESPACE_FILENAME_H__
|
||||||
|
|
||||||
namespace dd
|
namespace dd
|
||||||
{
|
{
|
||||||
@@ -62,8 +62,7 @@ private:
|
|||||||
// Private member function
|
// Private member function
|
||||||
bool privateMemberFunction()
|
bool privateMemberFunction()
|
||||||
{
|
{
|
||||||
switch (m_PrivateMember1)
|
switch (m_PrivateMember1) {
|
||||||
{
|
|
||||||
case 1:
|
case 1:
|
||||||
m_PrivateMember2 = new ClassName(2);
|
m_PrivateMember2 = new ClassName(2);
|
||||||
break;
|
break;
|
||||||
|
|||||||