Merge branch 'developer' into feature/Controller

This commit is contained in:
2016-06-21 15:43:54 +02:00
7 changed files with 47 additions and 17 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ Enemy::~Enemy()
if (model) if (model)
Model::unload(model); Model::unload(model);
delete music; CrystalPoint::GetSoundSystem().UnloadSound(hit_sound_id);
} }
void Enemy::draw() void Enemy::draw()
+31 -8
View File
@@ -29,28 +29,51 @@ HeightMap::HeightMap(const std::string &file, World* world)
return imgData[(x + y * width) * 4 + offset]; return imgData[(x + y * width) * 4 + offset];
}; };
std::vector<std::vector<Vec3f>> faceNormals(width-1, std::vector<Vec3f>(height-1, Vec3f(0,1,0)));
for (int y = 0; y < height - 1; y++)
{
for (int x = 0; x < width - 1; x++)
{
int offsets[4][2] = { { 0, 0 },{ 1, 0 },{ 1, 1 },{ 0, 1 } };
Vec3f ca(0, heightAt(x, y + 1) - heightAt(x, y), 1);
Vec3f ba(1, heightAt(x + 1, y) - heightAt(x, y), 0);
Vec3f normal = ca.cross(ba);
normal.Normalize();
faceNormals[x][y] = normal;
}
}
for (int y = 0; y < height-1; y++) for (int y = 0; y < height-1; y++)
{ {
for (int x = 0; x < width-1; x++) for (int x = 0; x < width-1; x++)
{ {
int offsets[4][2] = { { 0, 0 },{ 1, 0 },{ 1, 1 },{ 0, 1 } }; int offsets[4][2] = { { 0, 0 },{ 1, 0 },{ 1, 1 },{ 0, 1 } };
Vec3f ca(0, heightAt(x, y + 1) - heightAt(x, y), 1);
Vec3f ba(1, heightAt(x + 1, y) - heightAt(x, y), 0);
if (valueAt(x, y, GREEN) > 0) if (valueAt(x, y, GREEN) > 0)
{ {
world->addLevelObject(new LevelObject(world->getObjectFromValue(valueAt(x, y, GREEN)).first, Vec3f(x, heightAt(x, y), y), Vec3f(0, 0, 0), 1, world->getObjectFromValue(valueAt(x, y, GREEN)).second)); world->addLevelObject(new LevelObject(world->getObjectFromValue(valueAt(x, y, GREEN)).first, Vec3f(x, heightAt(x, y), y), Vec3f(0, 0, 0), 1, world->getObjectFromValue(valueAt(x, y, GREEN)).second));
} }
Vec3f normal = ca.cross(ba);
normal.Normalize();
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
float h = heightAt(x + offsets[i][0], y + offsets[i][1]); int xx = x + offsets[i][0];
vertices.push_back(Vertex{ (float)(x + offsets[i][0]), h, (float)(y + offsets[i][1]), int yy = y + offsets[i][1];
Vec3f normal(0, 0, 0);
if(xx < width-1 && yy < height-1)
normal = normal + faceNormals[xx][yy];
if(xx > 0 && yy < height-1)
normal = normal + faceNormals[xx-1][yy];
if (xx > 0 && yy > 0)
normal = normal + faceNormals[xx-1][yy-1];
if (yy > 0 && xx < width-1)
normal = normal + faceNormals[xx][yy-1];
normal.Normalize();
float h = heightAt(xx, yy);
vertices.push_back(Vertex{ (float)(xx), h, (float)(yy),
normal.x, normal.y, normal.z, normal.x, normal.y, normal.z,
(x + offsets[i][0]) / (float)height, (y + offsets[i][1]) / (float)width } ); (xx) / (float)height, (yy) / (float)width } );
} }
} }
} }
+1 -2
View File
@@ -30,7 +30,7 @@ Portal::Portal(const std::string &fileName,
Portal::~Portal() Portal::~Portal()
{ {
// Model::unload(model); // Model::unload(model);
// delete music; CrystalPoint::GetSoundSystem().UnloadSound(sound_id);
} }
void Portal::collide() void Portal::collide()
@@ -46,7 +46,6 @@ bool Portal::enter(float deltaTime)
{ {
if (delay > 3 && started) if (delay > 3 && started)
{ {
delete music;
delay = 0; delay = 0;
return true; return true;
} }
+8
View File
@@ -48,3 +48,11 @@ Sound* SoundSystem::GetSound(unsigned int inID)
return nullptr; return nullptr;
return sounds[inID]; return sounds[inID];
} }
void SoundSystem::UnloadSound(unsigned int inID)
{
if (inID > sounds.size())
return;
delete sounds[inID];
//sounds.erase(sounds.begin() + inID);
}
+1
View File
@@ -24,6 +24,7 @@ public:
unsigned int LoadSound(const char* inWavPath, bool inLooping); unsigned int LoadSound(const char* inWavPath, bool inLooping);
Sound* GetSound(unsigned int inID); Sound* GetSound(unsigned int inID);
void UnloadSound(unsigned int inID);
private: private:
ALCdevice* device; ALCdevice* device;
+4 -5
View File
@@ -8,8 +8,7 @@
#include <algorithm> #include <algorithm>
#include "WorldHandler.h" #include "WorldHandler.h"
World::World(const std::string &fileName): World::World(const std::string &fileName)
music_id(-1)
{ {
nextworld = false; nextworld = false;
@@ -183,8 +182,8 @@ World::World(const std::string &fileName):
if (!v["world"]["music"].isNull()) if (!v["world"]["music"].isNull())
{ {
music_id = CrystalPoint::GetSoundSystem().LoadSound(v["world"]["music"].asString().c_str(), true); sound_id = CrystalPoint::GetSoundSystem().LoadSound(v["world"]["music"].asString().c_str(), true);
music = CrystalPoint::GetSoundSystem().GetSound(music_id); music = CrystalPoint::GetSoundSystem().GetSound(sound_id);
} }
if (!v["portal"].isNull()) if (!v["portal"].isNull())
@@ -218,7 +217,7 @@ World::~World()
{ {
delete heightmap; delete heightmap;
music->Stop(); music->Stop();
delete music; CrystalPoint::GetSoundSystem().UnloadSound(sound_id);
delete skybox; delete skybox;
delete portal; delete portal;
} }
+1 -1
View File
@@ -27,7 +27,7 @@ private:
bool nextworld; bool nextworld;
int music_id,maxCrystals,maxEnemies; int sound_id,maxCrystals,maxEnemies;
std::vector<Entity*> entities; std::vector<Entity*> entities;
std::vector<Enemy*> enemies; std::vector<Enemy*> enemies;