Merge pull request #16 from CrystalPointA4/feature/portal_logic
Feature/portal logic
This commit is contained in:
+14
-4
@@ -5,10 +5,11 @@
|
|||||||
|
|
||||||
Crystal::Crystal(const std::string & filled, const std::string & empty, const Vec3f & position, Vec3f & rotation, const float & scale)
|
Crystal::Crystal(const std::string & filled, const std::string & empty, const Vec3f & position, Vec3f & rotation, const float & scale)
|
||||||
{
|
{
|
||||||
this->filled = filled;
|
this->filled = Model::load(filled);
|
||||||
this->empty = empty;
|
this->empty = Model::load(empty);
|
||||||
|
model = this->filled;
|
||||||
|
|
||||||
|
|
||||||
model = Model::load(this->filled);
|
|
||||||
this->position = position;
|
this->position = position;
|
||||||
this->rotation = rotation;
|
this->rotation = rotation;
|
||||||
this->scale = scale;
|
this->scale = scale;
|
||||||
@@ -20,6 +21,15 @@ Crystal::~Crystal()
|
|||||||
{
|
{
|
||||||
if (model)
|
if (model)
|
||||||
Model::unload(model);
|
Model::unload(model);
|
||||||
|
|
||||||
|
//if isfilled, means model is model filled, so model empty has to been deleted.
|
||||||
|
//if is not filled, means model is model empty, so model filled has to been deleted.
|
||||||
|
if (isFilled)
|
||||||
|
if(empty)
|
||||||
|
Model::unload(empty);
|
||||||
|
else
|
||||||
|
if(filled)
|
||||||
|
Model::unload(filled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Crystal::draw()
|
void Crystal::draw()
|
||||||
@@ -33,6 +43,6 @@ void Crystal::collide()
|
|||||||
{
|
{
|
||||||
Player::getInstance()->crystals++;
|
Player::getInstance()->crystals++;
|
||||||
isFilled = false;
|
isFilled = false;
|
||||||
model = Model::load(empty);
|
model = empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public:
|
|||||||
void draw();
|
void draw();
|
||||||
void collide();
|
void collide();
|
||||||
private:
|
private:
|
||||||
std::string filled, empty;
|
Model* filled;
|
||||||
|
Model* empty;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -165,6 +165,7 @@
|
|||||||
<ClCompile Include="LevelObject.cpp" />
|
<ClCompile Include="LevelObject.cpp" />
|
||||||
<ClCompile Include="Main.cpp" />
|
<ClCompile Include="Main.cpp" />
|
||||||
<ClCompile Include="Model.cpp" />
|
<ClCompile Include="Model.cpp" />
|
||||||
|
<ClCompile Include="Portal.cpp" />
|
||||||
<ClCompile Include="Sound.cpp" />
|
<ClCompile Include="Sound.cpp" />
|
||||||
<ClCompile Include="SoundSystem.cpp" />
|
<ClCompile Include="SoundSystem.cpp" />
|
||||||
<ClCompile Include="Player.cpp" />
|
<ClCompile Include="Player.cpp" />
|
||||||
@@ -186,6 +187,7 @@
|
|||||||
<ClInclude Include="LevelObject.h" />
|
<ClInclude Include="LevelObject.h" />
|
||||||
<ClInclude Include="Main.h" />
|
<ClInclude Include="Main.h" />
|
||||||
<ClInclude Include="Model.h" />
|
<ClInclude Include="Model.h" />
|
||||||
|
<ClInclude Include="Portal.h" />
|
||||||
<ClInclude Include="Sound.h" />
|
<ClInclude Include="Sound.h" />
|
||||||
<ClInclude Include="SoundSystem.h" />
|
<ClInclude Include="SoundSystem.h" />
|
||||||
<ClInclude Include="Player.h" />
|
<ClInclude Include="Player.h" />
|
||||||
|
|||||||
@@ -79,10 +79,13 @@
|
|||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="Sound.cpp">
|
<ClCompile Include="Sound.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="Crystal.cpp">
|
<ClCompile Include="Crystal.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="Portal.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -138,7 +141,7 @@
|
|||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="Sound.h">
|
<ClInclude Include="Sound.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="Crystal.h">
|
<ClInclude Include="Crystal.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
@@ -146,6 +149,9 @@
|
|||||||
<ClInclude Include="Skybox.h">
|
<ClInclude Include="Skybox.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Portal.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="worlds\worlds.json">
|
<None Include="worlds\worlds.json">
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ Enemy::Enemy(const std::string &fileName,
|
|||||||
radius = 10;
|
radius = 10;
|
||||||
hasTarget = false;
|
hasTarget = false;
|
||||||
hit_sound_id = CrystalPoint::GetSoundSystem().LoadSound("WAVE/Sound.wav", false);
|
hit_sound_id = CrystalPoint::GetSoundSystem().LoadSound("WAVE/Sound.wav", false);
|
||||||
|
attack = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -83,6 +84,8 @@ void Enemy::update(float delta)
|
|||||||
length = sqrt(dx*dx + dz*dz);
|
length = sqrt(dx*dx + dz*dz);
|
||||||
if (length > 1)
|
if (length > 1)
|
||||||
{
|
{
|
||||||
|
attack = false;
|
||||||
|
|
||||||
dx /= length;
|
dx /= length;
|
||||||
dz /= length;
|
dz /= length;
|
||||||
|
|
||||||
@@ -92,6 +95,11 @@ void Enemy::update(float delta)
|
|||||||
position.x += dx;
|
position.x += dx;
|
||||||
position.z += dz;
|
position.z += dz;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
attack = true;
|
||||||
|
}
|
||||||
|
|
||||||
rotation.y = atan2f(dx, dz) * 180 / M_PI;
|
rotation.y = atan2f(dx, dz) * 180 / M_PI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ public:
|
|||||||
bool hasTarget;
|
bool hasTarget;
|
||||||
Vec3f target;
|
Vec3f target;
|
||||||
float speed,radius;
|
float speed,radius;
|
||||||
|
bool attack;
|
||||||
|
|
||||||
void update(float);
|
void update(float);
|
||||||
void draw();
|
void draw();
|
||||||
|
|||||||
+21
-7
@@ -14,6 +14,15 @@ Interface::Interface()
|
|||||||
crystalWidth = 20;
|
crystalWidth = 20;
|
||||||
crystalHeight = 50;
|
crystalHeight = 50;
|
||||||
crystalOffset = 5;
|
crystalOffset = 5;
|
||||||
|
maxCrystals = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Interface::Interface(int maxCrystal)
|
||||||
|
{
|
||||||
|
crystalWidth = 20;
|
||||||
|
crystalHeight = 50;
|
||||||
|
crystalOffset = 5;
|
||||||
|
maxCrystals = maxCrystal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -80,18 +89,23 @@ void Interface::draw()
|
|||||||
glColor4f(1.0f, 1.0f, 0.1f, 1.0);
|
glColor4f(1.0f, 1.0f, 0.1f, 1.0);
|
||||||
glutBitmapString("Level: " + std::to_string(player->level), 490, 900);
|
glutBitmapString("Level: " + std::to_string(player->level), 490, 900);
|
||||||
|
|
||||||
int cw, ch, offset;
|
for (int i = 0; i < maxCrystals; i++)
|
||||||
cw = 20;
|
|
||||||
ch = 50;
|
|
||||||
offset = 5;
|
|
||||||
for (int i = 0; i < player->crystals; i++)
|
|
||||||
{
|
{
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
glColor4f(0, 1.0f, 1.0f, 1.0f);
|
|
||||||
|
if(i < player->crystals)
|
||||||
|
glColor4f(0, 1.0f, 1.0f, 1.0f);
|
||||||
|
else
|
||||||
|
glColor4f(0, 0.4f, 0.4f, 1.0f);
|
||||||
|
|
||||||
glVertex2f(975 - crystalWidth / 2 , crystalOffset*i + crystalHeight*i);
|
glVertex2f(975 - crystalWidth / 2 , crystalOffset*i + crystalHeight*i);
|
||||||
glVertex2f(975 - crystalWidth , crystalHeight / 2 + crystalOffset*i + crystalHeight*i);
|
glVertex2f(975 - crystalWidth , crystalHeight / 2 + crystalOffset*i + crystalHeight*i);
|
||||||
|
|
||||||
glColor4f(0, 0.8f, 0.8f, 1.0f);
|
if (i < player->crystals)
|
||||||
|
glColor4f(0, 0.7f, 0.7f, 1.0f);
|
||||||
|
else
|
||||||
|
glColor4f(0, 0.2f, 0.2f, 1.0f);
|
||||||
|
|
||||||
glVertex2f(975 - crystalWidth / 2 , crystalHeight + crystalOffset*i + crystalHeight*i);
|
glVertex2f(975 - crystalWidth / 2 , crystalHeight + crystalOffset*i + crystalHeight*i);
|
||||||
glVertex2f(975 , crystalHeight / 2 + crystalOffset*i + crystalHeight*i);
|
glVertex2f(975 , crystalHeight / 2 + crystalOffset*i + crystalHeight*i);
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ class Interface
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Interface();
|
Interface();
|
||||||
|
Interface(int);
|
||||||
~Interface();
|
~Interface();
|
||||||
|
|
||||||
void draw(void);
|
void draw(void);
|
||||||
void update(float deltaTime);
|
void update(float deltaTime);
|
||||||
|
|
||||||
int crystalWidth, crystalHeight, crystalOffset;
|
int crystalWidth, crystalHeight, crystalOffset;
|
||||||
|
int maxCrystals;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ void configureOpenGL()
|
|||||||
//Init window and glut display mode
|
//Init window and glut display mode
|
||||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||||
glutInitWindowSize(800, 600);
|
glutInitWindowSize(800, 600);
|
||||||
|
//glutInitWindowPosition(glutGet(GLUT_WINDOW_WIDTH) / 2 - 800/2, glutGet(GLUT_WINDOW_HEIGHT) / 2 - 600/2);
|
||||||
glutCreateWindow("Crystal Point");
|
glutCreateWindow("Crystal Point");
|
||||||
glutFullScreen();
|
glutFullScreen();
|
||||||
|
|
||||||
|
|||||||
+34
@@ -0,0 +1,34 @@
|
|||||||
|
#include "Portal.h"
|
||||||
|
#include "Model.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include "Player.h"
|
||||||
|
#include "WorldHandler.h"
|
||||||
|
|
||||||
|
Portal::Portal(const std::string &fileName,
|
||||||
|
const Vec3f &position,
|
||||||
|
Vec3f &rotation,
|
||||||
|
const float &scale)
|
||||||
|
{
|
||||||
|
model = Model::load(fileName);
|
||||||
|
this->position = position;
|
||||||
|
this->rotation = rotation;
|
||||||
|
this->scale = scale;
|
||||||
|
this->canCollide = true;
|
||||||
|
|
||||||
|
mayEnter = false;
|
||||||
|
maxCrystals = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Portal::~Portal()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Portal::collide()
|
||||||
|
{
|
||||||
|
if (maxCrystals == (Player::getInstance()->crystals) && !mayEnter)
|
||||||
|
{
|
||||||
|
canCollide = false;
|
||||||
|
mayEnter = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Entity.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class Portal :
|
||||||
|
public Entity
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Portal(const std::string &fileName,
|
||||||
|
const Vec3f &position,
|
||||||
|
Vec3f &rotation,
|
||||||
|
const float &scale);
|
||||||
|
~Portal();
|
||||||
|
|
||||||
|
void collide();
|
||||||
|
int maxCrystals;
|
||||||
|
bool mayEnter;
|
||||||
|
};
|
||||||
|
|
||||||
+16
@@ -4,6 +4,7 @@
|
|||||||
#include "stb_image.h"
|
#include "stb_image.h"
|
||||||
#include "Skybox.h"
|
#include "Skybox.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
enum{SKY_LEFT=0,SKY_BACK,SKY_RIGHT,SKY_FRONT,SKY_TOP,SKY_BOTTOM};
|
enum{SKY_LEFT=0,SKY_BACK,SKY_RIGHT,SKY_FRONT,SKY_TOP,SKY_BOTTOM};
|
||||||
GLuint skybox[6];
|
GLuint skybox[6];
|
||||||
@@ -12,6 +13,9 @@ Skybox::Skybox(const float &size, const std::string &folder)
|
|||||||
{
|
{
|
||||||
this->size = size;
|
this->size = size;
|
||||||
this->folder = folder;
|
this->folder = folder;
|
||||||
|
|
||||||
|
brightness = 80;
|
||||||
|
targetBrightness = 80;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skybox::~Skybox()
|
Skybox::~Skybox()
|
||||||
@@ -31,6 +35,8 @@ void Skybox::init()
|
|||||||
|
|
||||||
void Skybox::draw()
|
void Skybox::draw()
|
||||||
{
|
{
|
||||||
|
glColor4f(brightness/255, brightness/255, brightness/255, 1);
|
||||||
|
|
||||||
bool b1 = glIsEnabled(GL_TEXTURE_2D);
|
bool b1 = glIsEnabled(GL_TEXTURE_2D);
|
||||||
glDisable(GL_LIGHTING);
|
glDisable(GL_LIGHTING);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
@@ -114,6 +120,16 @@ void Skybox::draw()
|
|||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Skybox::update(float deltaTime, int curr, int max)
|
||||||
|
{
|
||||||
|
targetBrightness = 80 + ((255 - 80) / max) * curr;
|
||||||
|
|
||||||
|
if (targetBrightness > brightness)
|
||||||
|
{
|
||||||
|
brightness += 20 * deltaTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GLuint Skybox::loadTexture(const std::string & fileName) //load the filename named texture
|
GLuint Skybox::loadTexture(const std::string & fileName) //load the filename named texture
|
||||||
{
|
{
|
||||||
int width, height, bpp;
|
int width, height, bpp;
|
||||||
|
|||||||
@@ -6,11 +6,14 @@ class Skybox
|
|||||||
private:
|
private:
|
||||||
float size;
|
float size;
|
||||||
std::string folder;
|
std::string folder;
|
||||||
|
float brightness;
|
||||||
|
float targetBrightness;
|
||||||
public:
|
public:
|
||||||
Skybox(const float &size, const std::string &folder);
|
Skybox(const float &size, const std::string &folder);
|
||||||
~Skybox();
|
~Skybox();
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
void draw();
|
void draw();
|
||||||
|
void update(float deltaTime, int, int);
|
||||||
GLuint loadTexture(const std::string &fileName);
|
GLuint loadTexture(const std::string &fileName);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "CrystalPoint.h"
|
#include "CrystalPoint.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <algorithm>
|
||||||
#include "WorldHandler.h"
|
#include "WorldHandler.h"
|
||||||
|
|
||||||
World::World(const std::string &fileName):
|
World::World(const std::string &fileName):
|
||||||
@@ -94,11 +95,12 @@ World::World(const std::string &fileName):
|
|||||||
|
|
||||||
//Create
|
//Create
|
||||||
Vec3f position(object["pos"][0].asFloat(), object["pos"][1].asFloat(), object["pos"][2].asFloat());
|
Vec3f position(object["pos"][0].asFloat(), object["pos"][1].asFloat(), object["pos"][2].asFloat());
|
||||||
position.y = getHeight(position.x, position.z) + 2.0f;
|
position.y = getHeight(position.x, position.z);
|
||||||
|
|
||||||
entities.push_back(new LevelObject(object["file"].asString(), position, rotation, scale, hasCollision));
|
entities.push_back(new LevelObject(object["file"].asString(), position, rotation, scale, hasCollision));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maxEnemies = 0;
|
||||||
//Load and place enemies into world
|
//Load and place enemies into world
|
||||||
for (auto e : v["enemies"])
|
for (auto e : v["enemies"])
|
||||||
{
|
{
|
||||||
@@ -124,9 +126,10 @@ World::World(const std::string &fileName):
|
|||||||
Vec3f position(e["pos"][0].asFloat(), e["pos"][1].asFloat(), e["pos"][2].asFloat());
|
Vec3f position(e["pos"][0].asFloat(), e["pos"][1].asFloat(), e["pos"][2].asFloat());
|
||||||
position.y = getHeight(position.x, position.z) + 2.0f;
|
position.y = getHeight(position.x, position.z) + 2.0f;
|
||||||
|
|
||||||
|
maxEnemies++;
|
||||||
enemies.push_back(new Enemy(e["file"].asString(), position, rotation, scale));
|
enemies.push_back(new Enemy(e["file"].asString(), position, rotation, scale));
|
||||||
}
|
}
|
||||||
|
maxCrystals = 0;
|
||||||
if (!v["crystal"].isNull())
|
if (!v["crystal"].isNull())
|
||||||
{
|
{
|
||||||
std::string filled = "unknown";
|
std::string filled = "unknown";
|
||||||
@@ -164,11 +167,12 @@ World::World(const std::string &fileName):
|
|||||||
scale = instance["scale"].asFloat();
|
scale = instance["scale"].asFloat();
|
||||||
|
|
||||||
position.y = getHeight(position.x, position.z);
|
position.y = getHeight(position.x, position.z);
|
||||||
|
maxCrystals++;
|
||||||
Crystal *c = new Crystal(filled, empty, position, rotation, scale);
|
Crystal *c = new Crystal(filled, empty, position, rotation, scale);
|
||||||
|
|
||||||
entities.push_back(c);
|
entities.push_back(c);
|
||||||
}
|
}
|
||||||
|
interface->maxCrystals = maxCrystals;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,6 +184,30 @@ World::World(const std::string &fileName):
|
|||||||
music->Play();
|
music->Play();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!v["portal"].isNull())
|
||||||
|
{
|
||||||
|
Vec3f pos(0, 0, 0);
|
||||||
|
if (!v["portal"]["pos"].isNull())
|
||||||
|
pos = Vec3f(v["portal"]["pos"][0].asFloat(),
|
||||||
|
v["portal"]["pos"][1].asFloat(),
|
||||||
|
v["portal"]["pos"][0].asFloat());
|
||||||
|
|
||||||
|
pos.y = getHeight(pos.x, pos.z);
|
||||||
|
|
||||||
|
Vec3f rot(0, 0, 0);
|
||||||
|
if (!v["portal"]["rot"].isNull())
|
||||||
|
pos = Vec3f(v["portal"]["rot"][0].asFloat(),
|
||||||
|
v["portal"]["rot"][1].asFloat(),
|
||||||
|
v["portal"]["rot"][0].asFloat());
|
||||||
|
|
||||||
|
float scale = 1.0f;
|
||||||
|
if (!v["portal"]["scale"].isNull())
|
||||||
|
scale = !v["portal"]["scale"].asFloat();
|
||||||
|
|
||||||
|
portal = new Portal(v["portal"]["file"], pos, rot, scale);
|
||||||
|
entities.push_back(portal);
|
||||||
|
portal->maxCrystals = maxCrystals;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -214,8 +242,6 @@ void World::draw()
|
|||||||
float lightAmbient[4] = { 0.2, 0.2, 0.2, 1 };
|
float lightAmbient[4] = { 0.2, 0.2, 0.2, 1 };
|
||||||
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient);
|
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient);
|
||||||
|
|
||||||
glColor4f(1, 1, 1, 1);
|
|
||||||
|
|
||||||
skybox->draw();
|
skybox->draw();
|
||||||
|
|
||||||
heightmap->Draw();
|
heightmap->Draw();
|
||||||
@@ -234,6 +260,9 @@ void World::update(float elapsedTime)
|
|||||||
for (auto &entity : entities)
|
for (auto &entity : entities)
|
||||||
entity->update(elapsedTime);
|
entity->update(elapsedTime);
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
int remove = false;
|
||||||
|
|
||||||
for (auto &enemy : enemies)
|
for (auto &enemy : enemies)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -252,9 +281,26 @@ void World::update(float elapsedTime)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (enemy->attack)
|
||||||
|
{
|
||||||
|
remove = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
enemy->position.y = getHeight(enemy->position.x, enemy->position.z) + 2.0f;
|
enemy->position.y = getHeight(enemy->position.x, enemy->position.z) + 2.0f;
|
||||||
|
|
||||||
|
if(!remove)
|
||||||
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(remove)
|
||||||
|
enemies.erase(enemies.begin() + count);
|
||||||
|
|
||||||
|
skybox->update(elapsedTime, maxEnemies - enemies.size(), maxEnemies);
|
||||||
|
|
||||||
|
if (portal->mayEnter)
|
||||||
|
WorldHandler::getInstance()->NextWorld();
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::addLevelObject(LevelObject* obj)
|
void World::addLevelObject(LevelObject* obj)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "Interface.h"
|
#include "Interface.h"
|
||||||
#include "Crystal.h"
|
#include "Crystal.h"
|
||||||
#include "Skybox.h"
|
#include "Skybox.h"
|
||||||
|
#include "Portal.h"
|
||||||
|
|
||||||
class Entity;
|
class Entity;
|
||||||
|
|
||||||
@@ -20,8 +21,9 @@ private:
|
|||||||
HeightMap* heightmap;
|
HeightMap* heightmap;
|
||||||
Interface* interface;
|
Interface* interface;
|
||||||
Skybox* skybox;
|
Skybox* skybox;
|
||||||
|
Portal* portal;
|
||||||
|
|
||||||
int music_id;
|
int music_id,maxCrystals,maxEnemies;
|
||||||
|
|
||||||
std::vector<Entity*> entities;
|
std::vector<Entity*> entities;
|
||||||
std::vector<Enemy*> enemies;
|
std::vector<Enemy*> enemies;
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ void WorldHandler::NextWorld()
|
|||||||
if (!loadingWorld)
|
if (!loadingWorld)
|
||||||
{
|
{
|
||||||
ChangeWorld(worldIndex + 1);
|
ChangeWorld(worldIndex + 1);
|
||||||
|
Player::getInstance()->crystals = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,5 +135,6 @@ void WorldHandler::PreviousWorld()
|
|||||||
if (!loadingWorld)
|
if (!loadingWorld)
|
||||||
{
|
{
|
||||||
ChangeWorld(worldIndex - 1);
|
ChangeWorld(worldIndex - 1);
|
||||||
|
Player::getInstance()->crystals = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+34
-24
@@ -1,33 +1,43 @@
|
|||||||
{
|
{
|
||||||
"world": {
|
"world": {
|
||||||
"heightmap": "worlds/hmcs.png",
|
"heightmap": "worlds/hmcs.png",
|
||||||
"texture": "worlds/hmcstexture.png",
|
"texture": "hmcstexture.png",
|
||||||
|
"skybox": "skyboxes/peaceful/",
|
||||||
"object-templates": [
|
"object-templates": [
|
||||||
{
|
{
|
||||||
"color":100,
|
"color": 100,
|
||||||
"file": "models/boom/Boom.obj",
|
"file": "models/boom/Boom.obj",
|
||||||
"collision": false
|
"collision": true
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
},
|
"music": "WAVE/bond.wav"
|
||||||
|
},
|
||||||
"player": {
|
"player": {
|
||||||
"startposition": [ 0, 1.7, 0]
|
"startposition": [ 1, 5, 20 ]
|
||||||
|
},
|
||||||
|
"objects": [ ],
|
||||||
|
"portal": {
|
||||||
|
"file": "models/Teleporter/Teleporter.obj",
|
||||||
|
"pos": [ 10, 5, 10 ]
|
||||||
},
|
},
|
||||||
"objects": [
|
|
||||||
{
|
|
||||||
"file": "models/boom/Boom.obj",
|
|
||||||
"pos": [ 10, 0, -4 ]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"file": "models/Teleporter/Teleporter.obj",
|
|
||||||
"pos": [ 0, 0, -4 ]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"enemies": [
|
"enemies": [
|
||||||
{
|
{
|
||||||
"file": "models/squid/Blooper.obj",
|
"file": "models/squid/Blooper.obj",
|
||||||
"pos": [ 10, 2, -10 ],
|
"pos": [ 20, 5, 10 ],
|
||||||
"scale": 0.01
|
"scale": 0.01
|
||||||
}
|
}],
|
||||||
]
|
"crystal": {
|
||||||
|
"full texture": "models/crystal/Crystal.obj",
|
||||||
|
"empty texture": "models/crystal/PickedUpCrystal.obj",
|
||||||
|
"instances": [
|
||||||
|
{
|
||||||
|
"pos": [ 31, 5, 33 ],
|
||||||
|
"rot": [ 0, 0, 0 ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pos": [ 40, 5, 40 ],
|
||||||
|
"rot": [ 0, 0, 0 ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+10
-1
@@ -15,11 +15,20 @@
|
|||||||
"startposition": [ 20, 5, 20 ]
|
"startposition": [ 20, 5, 20 ]
|
||||||
},
|
},
|
||||||
"objects": [ ],
|
"objects": [ ],
|
||||||
|
"portal": {
|
||||||
|
"file": "models/Teleporter/Teleporter.obj",
|
||||||
|
"pos": [ 10, 5, 10 ]
|
||||||
|
},
|
||||||
"enemies": [
|
"enemies": [
|
||||||
{
|
{
|
||||||
"file": "models/squid/Blooper.obj",
|
"file": "models/squid/Blooper.obj",
|
||||||
"pos": [ 20, 5, 10 ],
|
"pos": [ 20, 5, 10 ],
|
||||||
"scale": 0.01
|
"scale": 0.01
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "models/squid/Blooper.obj",
|
||||||
|
"pos": [ 30, 10, 10 ],
|
||||||
|
"scale": 0.01
|
||||||
}],
|
}],
|
||||||
"crystal": {
|
"crystal": {
|
||||||
"full texture": "models/crystal/Crystal.obj",
|
"full texture": "models/crystal/Crystal.obj",
|
||||||
|
|||||||
Reference in New Issue
Block a user