Implemented a Kraken State Machine that can grab the player, and the Generating Bricks option.
This commit is contained in:
@@ -31,7 +31,7 @@ void dd::Systems::BallSystem::Initialize()
|
||||
{
|
||||
auto ent = m_World->CreateEntity();
|
||||
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
|
||||
transform->Position = glm::vec3(0.f, 0.26f, -10.f);
|
||||
transform->Position = glm::vec3(-20.f, 0.26f, -10.f);
|
||||
transform->Scale = glm::vec3(0.3f, 0.3f, 0.3f);
|
||||
transform->Velocity = glm::vec3(0.f, 0.f, 0.f);
|
||||
auto model = m_World->AddComponent<Components::Model>(ent);
|
||||
|
||||
@@ -7,15 +7,20 @@
|
||||
|
||||
void dd::Systems::KrakenSystem::Initialize()
|
||||
{
|
||||
std::random_device rd;
|
||||
m_RandomGenerator = std::mt19937(rd());
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EPause, &KrakenSystem::OnPause);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenAppear, &KrakenSystem::OnKrakenAppear);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttack, &KrakenSystem::OnKrakenAttack);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &KrakenSystem::OnBrickGenerating);
|
||||
|
||||
EntityID ent = m_World->CreateEntity();
|
||||
auto transform = m_World->AddComponent<Components::Transform>(ent);
|
||||
auto model = m_World->AddComponent<Components::Model>(ent);
|
||||
std::shared_ptr<Components::CircleShape> cCircle = m_World->AddComponent<Components::CircleShape>(ent);
|
||||
cCircle->Radius = 2;
|
||||
auto kraken = m_World->AddComponent<Components::Kraken>(ent);
|
||||
std::shared_ptr<Components::RectangleShape> cCircle = m_World->AddComponent<Components::RectangleShape>(ent);
|
||||
cCircle->Dimensions = glm::vec2(2, 4);
|
||||
//cCircle->Radius = 2;
|
||||
std::shared_ptr<Components::Physics> cPhys = m_World->AddComponent<Components::Physics>(ent);
|
||||
std::shared_ptr<Components::Template> cTemplate = m_World->AddComponent<Components::Template>(ent);
|
||||
|
||||
@@ -31,7 +36,7 @@ void dd::Systems::KrakenSystem::Initialize()
|
||||
transform->Position = glm::vec3(50, 50, -10);
|
||||
//sound
|
||||
auto collisionSound = m_World->AddComponent<Components::CollisionSound>(ent);
|
||||
collisionSound->FilePath = "Sounds/Brick/shortbrickbreak.wav";
|
||||
collisionSound->FilePath = "Sounds/Brick/LTTP_Boss_Hit.wav";
|
||||
m_World->CommitEntity(ent);
|
||||
|
||||
m_KrakenTemplate = ent;
|
||||
@@ -44,16 +49,66 @@ void dd::Systems::KrakenSystem::InitializeObjects()
|
||||
|
||||
}
|
||||
|
||||
void dd::Systems::KrakenSystem::Update(double dt)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
||||
{
|
||||
if (IsPaused()) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto templateCheck = m_World->GetComponent<Components::Template>(entity);
|
||||
if (templateCheck != nullptr){ return; }
|
||||
|
||||
auto kraken = m_World->GetComponent<Components::Kraken>(entity);
|
||||
if (kraken != nullptr) {
|
||||
Events::KrakenAttack krakenAttack;
|
||||
switch (kraken->CurrentAction)
|
||||
{
|
||||
case 1: // Idle
|
||||
//m_KrakenTimer += dt;
|
||||
if (m_KrakenTimer > m_KrakenSecondsToAction) {
|
||||
m_KrakenTimer = 0;
|
||||
std::uniform_real_distribution<float> dist(1, 2.999f);
|
||||
float random = dist(m_RandomGenerator);
|
||||
std::cout << random << std::endl;
|
||||
kraken->CurrentAction = random;
|
||||
std::cout << kraken->CurrentAction << std::endl;
|
||||
}
|
||||
break;
|
||||
case 2: // Grabbing
|
||||
kraken->CurrentAction = 5;
|
||||
krakenAttack.ChargeUpdate = 0;
|
||||
krakenAttack.KrakenStrength = 0.1;
|
||||
krakenAttack.PlayerStrength = 0.05;
|
||||
EventBroker->Publish(krakenAttack);
|
||||
break;
|
||||
case 3: // Brick Generating
|
||||
break;
|
||||
case 4: // Moving
|
||||
break;
|
||||
case 5: // Taunting
|
||||
if (m_ReturnToIdle) {
|
||||
m_ReturnToIdle = false;
|
||||
kraken->CurrentAction = Idle;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
//LOG_INFO("Something's probably off about the random number generator.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool dd::Systems::KrakenSystem::OnPause(const dd::Events::Pause &event)
|
||||
{
|
||||
if (event.Type != "KrakenSystem" && event.Type != "All") {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (IsPaused()) {
|
||||
SetPause(false);
|
||||
} else {
|
||||
@@ -68,11 +123,19 @@ bool dd::Systems::KrakenSystem::OnKrakenAppear(const dd::Events::KrakenAppear &e
|
||||
m_World->RemoveComponent<Components::Template>(ent);
|
||||
auto transform = m_World->GetComponent<Components::Transform>(ent);
|
||||
transform->Position = event.Position;
|
||||
m_KrakenBattle = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::KrakenSystem::OnKrakenAttack(const dd::Events::KrakenAttack &event)
|
||||
{
|
||||
|
||||
if (event.ChargeUpdate >= 1) {
|
||||
m_ReturnToIdle = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dd::Systems::KrakenSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
+126
-10
@@ -20,6 +20,7 @@ void dd::Systems::LevelSystem::Initialize()
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EStageCleared, &LevelSystem::OnStageCleared);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EPause, &LevelSystem::OnPause);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EHitPad, &LevelSystem::OnHitPad);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &LevelSystem::OnBrickGenerating);
|
||||
|
||||
//PointLightTest
|
||||
{
|
||||
@@ -389,11 +390,11 @@ void dd::Systems::LevelSystem::CreateLevel(int aboveBasicLevel)
|
||||
SetRestarting(false);
|
||||
}
|
||||
|
||||
void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBetweenBricks, float spaceToEdge, int aboveLevel, int num, int typeInt, glm::vec4 colorVec)
|
||||
EntityID dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBetweenBricks, float spaceToEdge, int aboveLevel, int num, int typeInt, glm::vec4 colorVec)
|
||||
{
|
||||
if (typeInt == EmptyBrickSpace) {
|
||||
SetNumberOfBricks(NumberOfBricks() - 1);
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
auto brick = m_World->CloneEntity(m_BrickTemplate);
|
||||
m_World->RemoveComponent<Components::Template>(brick);
|
||||
@@ -436,13 +437,128 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe
|
||||
e.Health = 10;
|
||||
EventBroker->Publish(e);
|
||||
m_World->RemoveEntity(brick);
|
||||
return;
|
||||
return brick;
|
||||
}
|
||||
|
||||
cBrick->Score = 10 * num;
|
||||
return;
|
||||
return brick;
|
||||
}
|
||||
|
||||
bool dd::Systems::LevelSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event)
|
||||
{
|
||||
GetBrickSet(event.Set);
|
||||
LOG_DEBUG("This is happening.");
|
||||
|
||||
int rows = 2;
|
||||
int lines = 7;
|
||||
int getter = 0;
|
||||
for (int i = 0; i < rows; i++) {
|
||||
for (int j = 0; j < lines; j++) {
|
||||
auto ent = CreateBrick(i, j, SpaceBetweenBricks(), SpaceToEdge(), -4, 1, m_BrickSet[getter], m_ColorSet[getter]);
|
||||
if (ent != NULL) {
|
||||
auto transform = m_World->GetComponent<Components::Transform>(ent);
|
||||
Events::Move e;
|
||||
e.GoalPosition = transform->Position;
|
||||
transform->Position = event.Origin;
|
||||
e.Entity = ent;
|
||||
e.Speed = 6;
|
||||
e.Queue = false;
|
||||
EventBroker->Publish(e);
|
||||
m_LooseBricks++;
|
||||
SetNumberOfBricks(NumberOfBricks() + 1);
|
||||
}
|
||||
getter++;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void dd::Systems::LevelSystem::GetBrickSet(int set)
|
||||
{
|
||||
std::array<int, 14> level;
|
||||
std::array<glm::vec4, 14> color;
|
||||
// Level array indicates type of brick.
|
||||
// 0 is empty space.
|
||||
// 1 is standard brick.
|
||||
// 2 is multiball brick.
|
||||
// 3 is lifebuoy brick.
|
||||
// 4 is sticky brick.
|
||||
// 5 is ink blaster brick.
|
||||
// 6 is kraken attack brick.
|
||||
|
||||
// color array determines the color of standard bricks.
|
||||
// w is white.
|
||||
// r is red.
|
||||
// g is green.
|
||||
// b is blue.
|
||||
// y is yellow.
|
||||
// c is cyan.
|
||||
// m is magenta.
|
||||
// d is dark.
|
||||
// Feel free to make your own.
|
||||
glm::vec4 w = glm::vec4(1, 1, 1, 0);
|
||||
glm::vec4 r = glm::vec4(1, 0, 0, 0);
|
||||
glm::vec4 g = glm::vec4(0, 1, 0, 0);
|
||||
glm::vec4 b = glm::vec4(0, 0, 1, 0);
|
||||
glm::vec4 y = glm::vec4(1, 1, 0, 0);
|
||||
glm::vec4 c = glm::vec4(0, 1, 1, 0);
|
||||
glm::vec4 m = glm::vec4(1, 0, 1, 0);
|
||||
glm::vec4 d = glm::vec4(0, 0, 0, 0);
|
||||
|
||||
if (set == 1) {
|
||||
level =
|
||||
{1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1 };
|
||||
color =
|
||||
{r, r, r, r, r, r, r,
|
||||
r, r, r, r, r, r, r };
|
||||
}
|
||||
else if (set == 2) {
|
||||
level =
|
||||
{2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2 };
|
||||
color =
|
||||
{w, w, w, w, w, w, w,
|
||||
w, w, w, w, w, w, w };
|
||||
}
|
||||
else if (set == 3) {
|
||||
level =
|
||||
{0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0 };
|
||||
color =
|
||||
{w, w, w, w, w, w, w,
|
||||
w, w, w, w, w, w, w };
|
||||
}
|
||||
else if (set == 4) {
|
||||
level =
|
||||
{0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0 };
|
||||
color =
|
||||
{w, w, w, w, w, w, w,
|
||||
w, w, w, w, w, w, w };
|
||||
}
|
||||
else if (set == 5) {
|
||||
level =
|
||||
{0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0 };
|
||||
color =
|
||||
{w, w, w, w, w, w, w,
|
||||
w, w, w, w, w, w, w };
|
||||
}
|
||||
else if (set == 6) {
|
||||
level =
|
||||
{0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0 };
|
||||
color =
|
||||
{w, w, w, w, w, w, w,
|
||||
w, w, w, w, w, w, w };
|
||||
}
|
||||
|
||||
std::copy(std::begin(level), std::end(level), std::begin(m_BrickSet));
|
||||
std::copy(std::begin(color), std::end(color), std::begin(m_ColorSet));
|
||||
}
|
||||
|
||||
|
||||
void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity)
|
||||
{
|
||||
|
||||
@@ -710,7 +826,7 @@ void dd::Systems::LevelSystem::GetNextLevel()
|
||||
|
||||
// 100 is KRAKEN!
|
||||
|
||||
// wolor array determines the color of standard bricks.
|
||||
// color array determines the color of standard bricks.
|
||||
// w is white.
|
||||
// r is red.
|
||||
// g is green.
|
||||
@@ -746,12 +862,12 @@ void dd::Systems::LevelSystem::GetNextLevel()
|
||||
if (m_CurrentCluster == 0) {
|
||||
if (m_CurrentLevel == 1) {
|
||||
level =
|
||||
{1, 0, 0, 0, 0, 0, 0,
|
||||
{0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0};
|
||||
0, 0, 0, 0, 0, 0, 1};
|
||||
color =
|
||||
{w, w, w, w, w, w, w,
|
||||
w, w, w, w, w, w, w,
|
||||
@@ -761,9 +877,9 @@ void dd::Systems::LevelSystem::GetNextLevel()
|
||||
w, w, w, w, w, w, w};
|
||||
} else if (m_CurrentLevel == 2) {
|
||||
level =
|
||||
{0, 0, 0, 0, 0, 0, 1,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
{0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 100, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0};
|
||||
@@ -808,7 +924,7 @@ void dd::Systems::LevelSystem::GetNextLevel()
|
||||
level =
|
||||
{0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 100, 0, 0, 0,
|
||||
0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
@@ -234,6 +234,11 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
|
||||
e.Time = 3;
|
||||
e.TimeTakenToCoolDown = 10;
|
||||
EventBroker->Publish(e);
|
||||
} else if (val == GLFW_KEY_G) {
|
||||
Events::BrickGenerating e;
|
||||
e.Origin = glm::vec3(-5, 7, -10);
|
||||
e.Set = 1;
|
||||
EventBroker->Publish(e);
|
||||
} else if (val == GLFW_KEY_L) {
|
||||
Events::Lifebuoy e;
|
||||
e.Transform = Transform();
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
void dd::Systems::ScreenShakeSystem::Initialize()
|
||||
{
|
||||
std::random_device rd;
|
||||
m_RandomGenerator = std::mt19937(rd());
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EPause, &ScreenShakeSystem::OnPause);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EScreenShake, &ScreenShakeSystem::OnScreenShake);
|
||||
|
||||
@@ -55,13 +57,15 @@ void dd::Systems::ScreenShakeSystem::UpdateEntity(double dt, EntityID entity, En
|
||||
else {
|
||||
//std::cout << "Timer: " << m_ShakeTimer << " End: " << m_ShakeEndTime << std::endl;
|
||||
}
|
||||
m_Random.x = (rand() % m_ShakeIntensity);
|
||||
m_Random.y = (rand() % m_ShakeIntensity);
|
||||
std::uniform_real_distribution<float> dist(-m_ShakeIntensity, m_ShakeIntensity);
|
||||
//float impulseStrength = dist(m_RandomGenerator);
|
||||
m_Random.x = dist(m_RandomGenerator) / 20;
|
||||
m_Random.y = dist(m_RandomGenerator) / 20;
|
||||
|
||||
float half = m_ShakeIntensity / 2;
|
||||
//float half = m_ShakeIntensity / 2;
|
||||
|
||||
m_Random.x = (m_Random.x - half) / 20;
|
||||
m_Random.y = (m_Random.y - half) / 20;
|
||||
//m_Random.x = (m_Random.x - half) / 20;
|
||||
//m_Random.y = (m_Random.y - half) / 20;
|
||||
|
||||
//std::cout << "X: " << randomX << " Y: " << randomY << std::endl;
|
||||
transform->Position = glm::vec3(m_Random);
|
||||
@@ -73,6 +77,10 @@ void dd::Systems::ScreenShakeSystem::UpdateEntity(double dt, EntityID entity, En
|
||||
|
||||
bool dd::Systems::ScreenShakeSystem::OnPause(const dd::Events::Pause &event)
|
||||
{
|
||||
if (event.Type != "ScreenShakeSystem" && event.Type != "All") {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (IsPaused()) {
|
||||
SetPause(false);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user