Merge remote-tracking branch 'origin/master' into LevelSystemAndSuch

This commit is contained in:
PlatinumSkink
2015-10-23 15:13:50 +02:00
23 changed files with 3693 additions and 53 deletions
+9 -2
View File
@@ -1,6 +1,7 @@
[Debug] [Debug]
SkipStory=false
LogLevel=1 LogLevel=1
SkipPreload=false
SkipMenu=false
[Audio] [Audio]
SFXVolume=0.5 SFXVolume=0.5
@@ -9,4 +10,10 @@ BGMVolume=0.5
[Video] [Video]
Fullscreen=false Fullscreen=false
Width=675 Width=675
Height=1080[Water]Radius=0.3[Cheat]GodMode=false Height=1080
[Water]
Radius=0.3
[Cheat]
GodMode=false
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+20 -2
View File
@@ -37,6 +37,7 @@
#include "Rendering/CModel.h" #include "Rendering/CModel.h"
#include "Rendering/CSprite.h" #include "Rendering/CSprite.h"
#include "Rendering/CPointLight.h" #include "Rendering/CPointLight.h"
#include "Rendering/CCamera.h"
#include "Transform/TransformSystem.h" #include "Transform/TransformSystem.h"
#include "Sound/SoundSystem.h" #include "Sound/SoundSystem.h"
#include "Sound/CCollisionSound.h" #include "Sound/CCollisionSound.h"
@@ -67,6 +68,7 @@
#include "Game/BrickComponents.h" #include "Game/BrickComponents.h"
#include "Game/ScreenShakeSystem.h"
#include "Game/EScreenShake.h" #include "Game/EScreenShake.h"
#include "Physics/PhysicsSystem.h" #include "Physics/PhysicsSystem.h"
@@ -147,6 +149,7 @@ public:
m_World->ComponentFactory.Register<Components::Sprite>(); m_World->ComponentFactory.Register<Components::Sprite>();
m_World->ComponentFactory.Register<Components::Camera>();
m_World->ComponentFactory.Register<Components::RectangleShape>(); m_World->ComponentFactory.Register<Components::RectangleShape>();
m_World->ComponentFactory.Register<Components::Physics>(); m_World->ComponentFactory.Register<Components::Physics>();
m_World->ComponentFactory.Register<Components::Ball>(); m_World->ComponentFactory.Register<Components::Ball>();
@@ -209,6 +212,9 @@ public:
m_World->SystemFactory.Register<Systems::LifeSystem>( m_World->SystemFactory.Register<Systems::LifeSystem>(
[this]() { return new Systems::LifeSystem(m_World.get(), m_EventBroker); }); [this]() { return new Systems::LifeSystem(m_World.get(), m_EventBroker); });
m_World->AddSystem<Systems::LifeSystem>(); m_World->AddSystem<Systems::LifeSystem>();
m_World->SystemFactory.Register<Systems::ScreenShakeSystem>(
[this]() { return new Systems::ScreenShakeSystem(m_World.get(), m_EventBroker); });
m_World->AddSystem<Systems::ScreenShakeSystem>();
m_World->ComponentFactory.Register<Components::Model>(); m_World->ComponentFactory.Register<Components::Model>();
m_World->ComponentFactory.Register<Components::Template>(); m_World->ComponentFactory.Register<Components::Template>();
@@ -271,8 +277,6 @@ public:
TEMPAddToRenderQueue(); TEMPAddToRenderQueue();
} }
std::unique_ptr<dd::Camera> defaultCamera = nullptr;
// Render scene // Render scene
//TODO send renderqueue to draw. //TODO send renderqueue to draw.
m_Renderer->Draw(m_RendererQueue); m_Renderer->Draw(m_RendererQueue);
@@ -293,6 +297,20 @@ public:
if (!m_TransformSystem) if (!m_TransformSystem)
m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>(); m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
// HACK: How do we handle multiple cameras? Maybe view and projection matrices in render queue...
auto cameras = m_World->GetComponentsOfType<Components::Camera>();
if (cameras != nullptr) {
for (auto& component : *cameras) {
auto camera = static_cast<Components::Camera*>(component.get());
auto transform = m_World->GetComponent<Components::Transform>(camera->Entity);
m_Renderer->Camera()->SetPosition(transform->Position);
m_Renderer->Camera()->SetOrientation(transform->Orientation);
m_Renderer->Camera()->SetFOV(camera->FOV);
m_Renderer->Camera()->SetNearClip(camera->NearClip);
m_Renderer->Camera()->SetFarClip(camera->FarClip);
}
}
for (auto &pair : *m_World->GetEntities()) for (auto &pair : *m_World->GetEntities())
{ {
EntityID entity = pair.first; EntityID entity = pair.first;
+3
View File
@@ -50,6 +50,7 @@
#include "Physics/ECreateParticleSequence.h" #include "Physics/ECreateParticleSequence.h"
#include "Sound/CCollisionSound.h" #include "Sound/CCollisionSound.h"
#include "Sound/EPlaySound.h" #include "Sound/EPlaySound.h"
#include "Rendering/EAnimationComplete.h"
namespace dd namespace dd
{ {
@@ -145,6 +146,7 @@ private:
dd::EventRelay<BallSystem, dd::Events::ActionButton> m_EActionButton; dd::EventRelay<BallSystem, dd::Events::ActionButton> m_EActionButton;
dd::EventRelay<BallSystem, dd::Events::StageCleared> m_EStageCleared; dd::EventRelay<BallSystem, dd::Events::StageCleared> m_EStageCleared;
dd::EventRelay<BallSystem, dd::Events::ArrivedAtNewStage> m_EArrivedAtNewStage; dd::EventRelay<BallSystem, dd::Events::ArrivedAtNewStage> m_EArrivedAtNewStage;
dd::EventRelay<BallSystem, dd::Events::AnimationComplete> m_EAnimationComplete;
bool Contact(const Events::Contact &event); bool Contact(const Events::Contact &event);
bool OnMultiBallLost(const dd::Events::MultiBallLost &event); bool OnMultiBallLost(const dd::Events::MultiBallLost &event);
@@ -160,6 +162,7 @@ private:
bool OnActionButton(const dd::Events::ActionButton &event); bool OnActionButton(const dd::Events::ActionButton &event);
bool OnStageCleared(const dd::Events::StageCleared &event); bool OnStageCleared(const dd::Events::StageCleared &event);
bool OnArrivedToNewStage(const dd::Events::ArrivedAtNewStage &event); bool OnArrivedToNewStage(const dd::Events::ArrivedAtNewStage &event);
bool OnAnimationComplete(const dd::Events::AnimationComplete &event);
}; };
} }
+1
View File
@@ -22,6 +22,7 @@ struct Ball : Component
bool Waiting = true; bool Waiting = true;
bool InkBlaster = false; bool InkBlaster = false;
bool Sticky = false; bool Sticky = false;
bool Loaded = false;
glm::vec3 StickyPlacement = glm::vec3(0, 0, 0); glm::vec3 StickyPlacement = glm::vec3(0, 0, 0);
glm::vec3 SavedSpeed = glm::vec3(0, 1, 0); glm::vec3 SavedSpeed = glm::vec3(0, 1, 0);
+3 -3
View File
@@ -15,9 +15,9 @@ namespace Events
struct ScreenShake : Event struct ScreenShake : Event
{ {
float Time; float Time = 1.f;
int Intensity; float Intensity = 1.f;
float TimeTakenToCoolDown; float TimeTakenToCoolDown = 1.f;
}; };
} }
+1
View File
@@ -33,6 +33,7 @@
#include "Game/CKraken.h" #include "Game/CKraken.h"
#include "Game/CBall.h" #include "Game/CBall.h"
#include "Game/CProjectile.h" #include "Game/CProjectile.h"
#include "Game/EScreenShake.h"
#include "Sound/CCollisionSound.h" #include "Sound/CCollisionSound.h"
#include "Rendering/CAnimation.h" #include "Rendering/CAnimation.h"
#include "Rendering/CSprite.h" #include "Rendering/CSprite.h"
+1
View File
@@ -19,6 +19,7 @@
#include "Rendering/CSprite.h" #include "Rendering/CSprite.h"
#include "Rendering/CModel.h" #include "Rendering/CModel.h"
#include "Rendering/CPointLight.h" #include "Rendering/CPointLight.h"
#include "Rendering/CCamera.h"
#include "Transform/EMove.h" #include "Transform/EMove.h"
+1
View File
@@ -30,6 +30,7 @@
#include "Game/CProjectile.h" #include "Game/CProjectile.h"
#include "Game/CBall.h" #include "Game/CBall.h"
#include "Rendering/CSprite.h" #include "Rendering/CSprite.h"
#include "Rendering/CAnimation.h"
namespace dd namespace dd
{ {
+3 -3
View File
@@ -37,8 +37,8 @@ public:
void SetFullscreen(bool fullscreen) { m_Fullscreen = fullscreen; } void SetFullscreen(bool fullscreen) { m_Fullscreen = fullscreen; }
bool VSYNC() const { return m_VSYNC; } bool VSYNC() const { return m_VSYNC; }
void SetVSYNC(bool vsync) { m_VSYNC = vsync; } void SetVSYNC(bool vsync) { m_VSYNC = vsync; }
const dd::Camera* Camera() const { return m_Camera; } dd::Camera* Camera() const { return m_Camera; }
void SetCamera(const dd::Camera* camera) void SetCamera(dd::Camera* camera)
{ {
if (camera == nullptr) { if (camera == nullptr) {
m_Camera = m_DefaultCamera.get(); m_Camera = m_DefaultCamera.get();
@@ -55,7 +55,7 @@ protected:
bool m_Fullscreen = false; bool m_Fullscreen = false;
bool m_VSYNC = false; bool m_VSYNC = false;
std::unique_ptr<dd::Camera> m_DefaultCamera = nullptr; std::unique_ptr<dd::Camera> m_DefaultCamera = nullptr;
const dd::Camera* m_Camera = nullptr; dd::Camera* m_Camera = nullptr;
GLFWwindow* m_Window = nullptr; GLFWwindow* m_Window = nullptr;
}; };
+3 -8
View File
@@ -30,14 +30,9 @@ namespace Components
struct Camera : Component struct Camera : Component
{ {
Camera() float FOV = glm::radians(45.f);
: FOV(glm::radians(45.f)) float NearClip = 0.01f;
, NearClip(0.1f) float FarClip = 100.f;
, FarClip(100.f) { }
float FOV;
float NearClip;
float FarClip;
}; };
} }
+1 -1
View File
@@ -9,7 +9,7 @@ namespace dd
namespace Events namespace Events
{ {
struct AnimationComplete struct AnimationComplete : Event
{ {
EntityID Entity; EntityID Entity;
std::string Animation; std::string Animation;
@@ -43,7 +43,6 @@ class Renderer : public BaseRenderer
public: public:
void Initialize() override; void Initialize() override;
void Draw(RenderQueueCollection& rq) override; void Draw(RenderQueueCollection& rq) override;
void PlaceCamera(glm::vec3 position);
private: private:
int m_GLVersion[2]; int m_GLVersion[2];
@@ -97,12 +96,6 @@ private:
void DrawWater(RenderQueue &objects); void DrawWater(RenderQueue &objects);
void DrawGUI(RenderQueue& rq); void DrawGUI(RenderQueue& rq);
void DebugKeys(); void DebugKeys();
dd::EventRelay<Renderer, dd::Events::ScreenShake> m_EScreenShake;
bool OnScreenShake(dd::Events::ScreenShake &event);
bool m_ScreenShake = false;
float m_ShakeIntensity = 0;
float m_ShakeTimer = 0;
}; };
} }
+52 -11
View File
@@ -28,6 +28,7 @@ void dd::Systems::BallSystem::Initialize()
EVENT_SUBSCRIBE_MEMBER(m_EActionButton, &BallSystem::OnActionButton); EVENT_SUBSCRIBE_MEMBER(m_EActionButton, &BallSystem::OnActionButton);
EVENT_SUBSCRIBE_MEMBER(m_EStageCleared, &BallSystem::OnStageCleared); EVENT_SUBSCRIBE_MEMBER(m_EStageCleared, &BallSystem::OnStageCleared);
EVENT_SUBSCRIBE_MEMBER(m_EArrivedAtNewStage, &BallSystem::OnArrivedToNewStage); EVENT_SUBSCRIBE_MEMBER(m_EArrivedAtNewStage, &BallSystem::OnArrivedToNewStage);
EVENT_SUBSCRIBE_MEMBER(m_EAnimationComplete, &BallSystem::OnAnimationComplete);
//OctoBall //OctoBall
@@ -39,7 +40,7 @@ void dd::Systems::BallSystem::Initialize()
transform->Velocity = glm::vec3(0.f, 0.f, 0.f); transform->Velocity = glm::vec3(0.f, 0.f, 0.f);
transform->Orientation = glm::quat(); transform->Orientation = glm::quat();
auto model = m_World->AddComponent<Components::Model>(ent); auto model = m_World->AddComponent<Components::Model>(ent);
model->ModelFile = "Models/Sid/Sid.dae"; model->ModelFile = "Models/Sid/Sid_Flying.dae";
auto animation = m_World->AddComponent<Components::Animation>(ent); auto animation = m_World->AddComponent<Components::Animation>(ent);
animation->Speed = 1.0; animation->Speed = 1.0;
std::shared_ptr<Components::CircleShape> circleShape = m_World->AddComponent<Components::CircleShape>(ent); std::shared_ptr<Components::CircleShape> circleShape = m_World->AddComponent<Components::CircleShape>(ent);
@@ -118,13 +119,31 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID
/*std::uniform_real_distribution<float> dist(-0.5f, 0.5f); /*std::uniform_real_distribution<float> dist(-0.5f, 0.5f);
float random = dist(m_RandomGenerator);*/ float random = dist(m_RandomGenerator);*/
transformBall->Velocity = glm::normalize(ballComponent->SavedSpeed) * ballComponent->Speed; transformBall->Velocity = glm::normalize(ballComponent->SavedSpeed) * ballComponent->Speed;
auto cAnim = m_World->GetComponent<Components::Animation>(entity);
cAnim->Loop = false;
cAnim->Speed = 2.f;
cAnim->Time = 0.f;
//transform->Velocity = glm::normalize(glm::vec3(0, 1, 0)) * ballComponent->Speed; //transform->Velocity = glm::normalize(glm::vec3(0, 1, 0)) * ballComponent->Speed;
} else if (!ballComponent->Sticky) { } else {
transformBall->Velocity = glm::vec3(0.f, 0.f, 0.f); transformBall->Velocity = glm::vec3(0.f, 0.f, 0.f);
//transform->Position = glm::vec3(0.0f, -3.f, -10.f);
if (m_First) { auto cModel = m_World->GetComponent<Components::Model>(entity);
transformBall->Orientation = glm::quat(); cModel->ModelFile = "Models/Sid/Sid_Jump.dae";
m_First = false;
auto cAnim = m_World->GetComponent<Components::Animation>(entity);
cAnim->Speed = 0.f;
//cAnim->Time = 0.f; //Maybe not the best but it works;
if (!ballComponent->Sticky) {
auto transform = m_World->GetComponent<Components::Transform>(entity);
transform->Velocity = glm::vec3(0.f, 0.f, 0.f);
//transform->Position = glm::vec3(0.0f, -3.f, -10.f);
if (m_First) {
transform->Orientation = glm::quat();
m_First = false;
}
} }
return; return;
} }
@@ -330,7 +349,7 @@ bool dd::Systems::BallSystem::Contact(const Events::Contact &event)
m_Waiting = true; m_Waiting = true;
m_InkBlockedWaiting = true; m_InkBlockedWaiting = true;
ballComponent->Sticky = true; ballComponent->Sticky = true;
ballComponent->StickyPlacement = glm::vec3(0, 0.5f, 0); ballComponent->StickyPlacement = glm::vec3(0, 0.25f, 0);
ballComponent->SavedSpeed = glm::normalize(glm::vec3(x, y, 0.f)) * ballComponent->Speed; ballComponent->SavedSpeed = glm::normalize(glm::vec3(x, y, 0.f)) * ballComponent->Speed;
ballTransform->Velocity = glm::vec3(0.f, 0.f, 0.f); ballTransform->Velocity = glm::vec3(0.f, 0.f, 0.f);
} }
@@ -340,7 +359,7 @@ bool dd::Systems::BallSystem::Contact(const Events::Contact &event)
m_Waiting = true; m_Waiting = true;
ballComponent->Sticky = true; ballComponent->Sticky = true;
//ballComponent->StickyPlacement = ballTransform->Position - padTransform->Position; //ballComponent->StickyPlacement = ballTransform->Position - padTransform->Position;
ballComponent->StickyPlacement = glm::vec3(0, 0.5f, 0); ballComponent->StickyPlacement = glm::vec3(0, 0.25f, 0);
ballComponent->SavedSpeed = glm::normalize(glm::vec3(x, y, 0.f)) * ballComponent->Speed; ballComponent->SavedSpeed = glm::normalize(glm::vec3(x, y, 0.f)) * ballComponent->Speed;
ballTransform->Velocity *= -1; ballTransform->Velocity *= -1;
Events::StickyAttachedToPad e; Events::StickyAttachedToPad e;
@@ -395,10 +414,7 @@ void dd::Systems::BallSystem::ResolveContacts()
auto ballComponent = m_World->GetComponent<Components::Ball>(entity); auto ballComponent = m_World->GetComponent<Components::Ball>(entity);
reflectedVelocity = glm::normalize(reflectedVelocity) * ballComponent->Speed; reflectedVelocity = glm::normalize(reflectedVelocity) * ballComponent->Speed;
transform->Velocity = glm::vec3(reflectedVelocity, 0.f); transform->Velocity = glm::vec3(reflectedVelocity, 0.f);
} }
m_Contacts.clear(); m_Contacts.clear();
} }
@@ -474,6 +490,14 @@ bool dd::Systems::BallSystem::OnInkBlasterOver(const dd::Events::InkBlasterOver
auto ballComponent = m_World->GetComponent<Components::Ball>(event.Ball); auto ballComponent = m_World->GetComponent<Components::Ball>(event.Ball);
auto transform = m_World->GetComponent<Components::Transform>(event.Ball); auto transform = m_World->GetComponent<Components::Transform>(event.Ball);
auto cModel = m_World->GetComponent<Components::Model>(event.Ball);
cModel->ModelFile = "Models/Sid/Sid_Jump.dae";
auto cAnim = m_World->GetComponent<Components::Animation>(event.Ball);
cAnim->Speed = 2.f;
cAnim->Loop = false;
m_InkBlaster = false; m_InkBlaster = false;
m_InkAttached = false; m_InkAttached = false;
m_InkBlockedWaiting = false; m_InkBlockedWaiting = false;
@@ -520,3 +544,20 @@ bool dd::Systems::BallSystem::OnArrivedToNewStage(const dd::Events::ArrivedAtNew
return true; return true;
} }
bool dd::Systems::BallSystem::OnAnimationComplete(const dd::Events::AnimationComplete &event)
{
auto model = m_World->GetComponent<Components::Model>(event.Entity);
if (model) {
if (model->ModelFile == "Models/Sid/Sid_Jump.dae") {
model->ModelFile = "Models/Sid/Sid_Flying.dae";
auto anim = m_World->GetComponent<Components::Animation>(event.Entity);
anim->Speed = 1.f;
anim->Loop = true;
anim->Time = 0.f;
}
}
return true;
}
+21
View File
@@ -289,6 +289,13 @@ bool dd::Systems::KrakenSystem::OnKrakenAppear(const dd::Events::KrakenAppear &e
transform->Position = event.Position; transform->Position = event.Position;
transform->Position.y += 3.f; transform->Position.y += 3.f;
m_KrakenBattle = true; m_KrakenBattle = true;
Events::ScreenShake e;
e.Intensity = 10;
e.Time = 2;
e.TimeTakenToCoolDown = 6;
EventBroker->Publish(e);
return true; return true;
} }
@@ -297,6 +304,13 @@ bool dd::Systems::KrakenSystem::OnKrakenAttack(const dd::Events::KrakenAttack &e
if (event.ChargeUpdate >= 1) { if (event.ChargeUpdate >= 1) {
m_ReturnToIdle = true; m_ReturnToIdle = true;
} }
Events::ScreenShake e;
e.Intensity = 2;
e.Time = 0.5f;
e.TimeTakenToCoolDown = 3.f;
EventBroker->Publish(e);
return true; return true;
} }
@@ -368,6 +382,13 @@ bool dd::Systems::KrakenSystem::OnKrakenHit(const dd::Events::KrakenHit &event)
e.Hitter = event.Hitter; e.Hitter = event.Hitter;
EventBroker->Publish(e); EventBroker->Publish(e);
} }
Events::ScreenShake e;
e.Intensity = 2;
e.Time = 0.2f;
e.TimeTakenToCoolDown = 1.5f;
EventBroker->Publish(e);
return false; return false;
} }
+23 -2
View File
@@ -28,6 +28,15 @@ void dd::Systems::LevelSystem::Initialize()
m_GodMode = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Cheat.GodMode", false); m_GodMode = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Cheat.GodMode", false);
// Camera
{
auto ent = m_World->CreateEntity();
auto transform = m_World->AddComponent<Components::Transform>(ent);
auto camera = m_World->AddComponent<Components::Camera>(ent);
camera->FOV = glm::radians(58.31f);
m_World->CommitEntity(ent);
}
//PointLightTest //PointLightTest
{ {
auto t_Light = m_World->CreateEntity(); auto t_Light = m_World->CreateEntity();
@@ -69,8 +78,20 @@ void dd::Systems::LevelSystem::Initialize()
auto t_halfPipe2 = m_World->CloneEntity(t_halfPipe); auto t_halfPipe2 = m_World->CloneEntity(t_halfPipe);
auto transform2 = m_World->GetComponent<Components::Transform>(t_halfPipe); auto transform2 = m_World->GetComponent<Components::Transform>(t_halfPipe);
transform2->Position = glm::vec3(0.f, 34.6f, -15.f); //Halfpipe Value transform2->Position = glm::vec3(0.f, 34.6f, -15.f); //Halfpipe Value
// Added to prevent white borders around screen shake
{
auto halfPipeBackground = m_World->CreateEntity();
auto transform = m_World->AddComponent<Components::Transform>(halfPipeBackground);
transform->Position = glm::vec3(0.f, 0.f, -15.f);
transform->Scale = glm::vec3(6.f, 6.f, 10.f) * 2.f;
auto model = m_World->AddComponent<Components::Model>(halfPipeBackground);
model->ModelFile = "Models/Halfpipe.obj";
m_World->CommitEntity(halfPipeBackground);
}
} }
//Background //Background
/*{ /*{
@@ -133,8 +154,8 @@ void dd::Systems::LevelSystem::Initialize()
auto wall = m_World->AddComponent<Components::Wall>(BottomWall); auto wall = m_World->AddComponent<Components::Wall>(BottomWall);
transform->Position = glm::vec3(0.f, -6.f, -10.f); transform->Position = glm::vec3(0.f, -6.f, -10.f);
transform->Scale = glm::vec3(20.f, 0.5f, 1.f); transform->Scale = glm::vec3(20.f, 0.5f, 1.f);
std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(BottomWall); //std::shared_ptr<Components::Sprite> sprite = m_World->AddComponent<Components::Sprite>(BottomWall);
sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; //sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
std::shared_ptr<Components::RectangleShape> rectangleShape = m_World->AddComponent<Components::RectangleShape>(BottomWall); std::shared_ptr<Components::RectangleShape> rectangleShape = m_World->AddComponent<Components::RectangleShape>(BottomWall);
rectangleShape->Dimensions = glm::vec2(20.f, 0.5f); rectangleShape->Dimensions = glm::vec2(20.f, 0.5f);
std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(BottomWall); std::shared_ptr<Components::Physics> physics = m_World->AddComponent<Components::Physics>(BottomWall);
+12 -7
View File
@@ -129,14 +129,19 @@ void dd::Systems::PadSystem::UpdateEntity(double dt, EntityID entity, EntityID p
auto ballTransform = m_World->GetComponent<Components::Transform>(entity); auto ballTransform = m_World->GetComponent<Components::Transform>(entity);
ballTransform->Position = m_PadTransform->Position; ballTransform->Position = m_PadTransform->Position;
ballTransform->Position += ball->StickyPlacement; ballTransform->Position += ball->StickyPlacement;
glm::vec2 dir = glm::normalize(glm::vec2(ball->SavedSpeed.x, ball->SavedSpeed.y)); if (ball->Loaded) {
glm::vec2 up = glm::vec2(0.f, 1.f); ballTransform->Orientation = glm::quat();
float angle = glm::acos(glm::dot<float>(dir, up)) * glm::sign(dir.x); } else {
ballTransform->Orientation = glm::rotate(glm::quat(), angle, glm::vec3(0.f, 0.f, -1.f)); glm::vec2 dir = glm::normalize(glm::vec2(ball->SavedSpeed.x, ball->SavedSpeed.y));
if (ball->Sticky) { glm::vec2 up = glm::vec2(0.f, 1.f);
m_StickTransform->Orientation = glm::rotate(glm::quat(), angle, glm::vec3(0.f, 0.f, 1.f)); float angle = glm::acos(glm::dot<float>(dir, up)) * glm::sign(dir.x);
m_StickTransform->Position = ballTransform->Position; ballTransform->Orientation = glm::rotate(glm::quat(), angle, glm::vec3(0.f, 0.f, -1.f));
if (ball->Sticky) {
m_StickTransform->Orientation = glm::rotate(glm::quat(), angle, glm::vec3(0.f, 0.f, 1.f));
m_StickTransform->Position = ballTransform->Position;
}
} }
} }
if (!m_StickyAim->Aiming) { if (!m_StickyAim->Aiming) {
m_StickTransform->Position = glm::vec3(30.f, 0.f, 0.f); m_StickTransform->Position = glm::vec3(30.f, 0.f, 0.f);
+22
View File
@@ -109,8 +109,17 @@ bool dd::Systems::ProjectileSystem::OnInkBlaster(const dd::Events::InkBlaster &e
bool dd::Systems::ProjectileSystem::OnHitPad(const dd::Events::HitPad &event) bool dd::Systems::ProjectileSystem::OnHitPad(const dd::Events::HitPad &event)
{ {
if (m_InkBlaster) { if (m_InkBlaster) {
auto ball = m_World->GetComponent<Components::Ball>(event.Ball);
ball->Loaded = true;
m_SquidLoaded = true; m_SquidLoaded = true;
m_AttachedSquid = event.Ball; m_AttachedSquid = event.Ball;
auto model = m_World->GetComponent<Components::Model>(m_AttachedSquid);
model->ModelFile = "Models/Sid/Sid_Shoot.dae";
auto anim = m_World->GetComponent<Components::Animation>(m_AttachedSquid);
anim->Loop = false;
anim->Speed = 0.f;
} }
return true; return true;
} }
@@ -140,18 +149,31 @@ bool dd::Systems::ProjectileSystem::OnActionButton(const dd::Events::ActionButto
transform->Velocity = glm::vec3(0, projectile->Speed, 0); transform->Velocity = glm::vec3(0, projectile->Speed, 0);
m_Shots--; m_Shots--;
auto anim = m_World->GetComponent<Components::Animation>(m_AttachedSquid);
anim->Loop = false;
anim->Speed = 1.f;
anim->Time = 0.f;
if (m_Shots <= 0) { if (m_Shots <= 0) {
auto ball = m_World->GetComponent<Components::Ball>(m_AttachedSquid); auto ball = m_World->GetComponent<Components::Ball>(m_AttachedSquid);
m_InkBlaster = false; m_InkBlaster = false;
m_SquidLoaded = false; m_SquidLoaded = false;
ball->InkBlaster = false; ball->InkBlaster = false;
ball->Sticky = false; ball->Sticky = false;
ball->Loaded = false;
ball->Waiting = true; ball->Waiting = true;
{ {
Events::InkBlasterOver e; Events::InkBlasterOver e;
e.Ball = m_AttachedSquid; e.Ball = m_AttachedSquid;
EventBroker->Publish(e); EventBroker->Publish(e);
auto model = m_World->GetComponent<Components::Model>(m_AttachedSquid);
model->ModelFile = "Models/Sid/Sid_Flying.dae";
auto anim = m_World->GetComponent<Components::Animation>(m_AttachedSquid);
anim->Loop = true;
anim->Speed = 1.f;
} }
{ {
Events::ActionButton e; Events::ActionButton e;
+1
View File
@@ -5,6 +5,7 @@
#include "PrecompiledHeader.h" #include "PrecompiledHeader.h"
#include "Game/ScreenShakeSystem.h" #include "Game/ScreenShakeSystem.h"
void dd::Systems::ScreenShakeSystem::Initialize() void dd::Systems::ScreenShakeSystem::Initialize()
{ {
std::random_device rd; std::random_device rd;
+1
View File
@@ -42,6 +42,7 @@ void dd::Systems::AnimationSystem::Update(double dt)
Events::AnimationComplete e; Events::AnimationComplete e;
e.Entity = ent; e.Entity = ent;
e.Animation = animationComponent->Name; e.Animation = animationComponent->Name;
EventBroker->Publish(e);
} else { } else {
animationComponent->Time = nextTime; animationComponent->Time = nextTime;
} }
+1 -6
View File
@@ -63,7 +63,7 @@ void dd::Renderer::Initialize()
} }
// Create default camera // Create default camera
m_DefaultCamera = std::unique_ptr<dd::Camera>(new dd::Camera((float)m_Resolution.Width / m_Resolution.Height, 45.f, 0.01f, 5000.f)); m_DefaultCamera = std::unique_ptr<dd::Camera>(new dd::Camera((float)m_Resolution.Width / m_Resolution.Height, glm::radians(45.f), 0.01f, 5000.f));
m_DefaultCamera->SetPosition(glm::vec3(0, 0, 0)); m_DefaultCamera->SetPosition(glm::vec3(0, 0, 0));
if (m_Camera == nullptr) { if (m_Camera == nullptr) {
m_Camera = m_DefaultCamera.get(); m_Camera = m_DefaultCamera.get();
@@ -391,11 +391,6 @@ void dd::Renderer::DrawForward(RenderQueue &objects, RenderQueue &lights)
DrawWater(objects); DrawWater(objects);
} }
void dd::Renderer::PlaceCamera(glm::vec3 position)
{
m_DefaultCamera->SetPosition(position);
}
void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program)
{ {
GLuint shaderProgramHandle = program; GLuint shaderProgramHandle = program;