Преглед на файлове

Merge pull request #31 from CrystalPointA4/feature/loadingscreen

Feature/loadingscreen
Kenneth van Ewijk преди 9 години
родител
ревизия
316d6c9e14
променени са 25 файла, в които са добавени 200 реда и са изтрити 184 реда
  1. 0 1
      Controller.h
  2. 1 6
      ControllerHandler.cpp
  3. 38 57
      CrystalPoint.cpp
  4. 1 0
      CrystalPoint.h
  5. 2 0
      CrystalPoint.vcxproj
  6. 6 0
      CrystalPoint.vcxproj.filters
  7. 1 27
      Enemy.cpp
  8. 0 4
      Enemy.h
  9. 71 0
      LoadingScreen.cpp
  10. 22 0
      LoadingScreen.h
  11. 3 3
      Main.cpp
  12. 2 12
      Player.cpp
  13. 0 2
      Player.h
  14. 0 1
      Vector.cpp
  15. BIN
      WAVE/ape.wav
  16. BIN
      WAVE/hedge.wav
  17. BIN
      WAVE/letsRock.wav
  18. 10 44
      Weapon.cpp
  19. 2 3
      Weapon.h
  20. 31 17
      World.cpp
  21. 3 0
      World.h
  22. 4 6
      weapons.json
  23. BIN
      worlds/loadingScreen_picture.png
  24. 1 0
      worlds/rock.json
  25. 2 1
      worlds/small.json

+ 0 - 1
Controller.h

@@ -9,7 +9,6 @@ public:
     Vec3f ypr;
     Vec2f joystick;
     bool button, joystickButton, magnetSwitch;
-    bool lastButton, lastJoystickButton, lastMagetSwitch;
     int controllerId;
 
     void setConnected(bool connected);

+ 1 - 6
ControllerHandler.cpp

@@ -120,13 +120,8 @@ void ControllerHandler::commandControllerData(std::vector<std::string> data) {
 
             c->joystick.x = std::stoi(data[2])/2000.0f;
             c->joystick.y = std::stoi(data[3])/2000.0f;
-
-            c->lastButton = c->button;
-            c->lastJoystickButton = c->joystickButton;
-            c->lastMagetSwitch = c->magnetSwitch;
-
             c->joystickButton = !(data[4] == "0");
-            c->button = !(data[8] == "0");
+
             c->magnetSwitch = !(data[9] == "0");
         }
     }

+ 38 - 57
CrystalPoint.cpp

@@ -24,7 +24,7 @@ void CrystalPoint::init()
 	cursor = Cursor::getInstance();
 
 	menu = new Menu();
-	buildMenu();
+	menuIsBuild = false;
 
 	lastFrameTime = 0;
 	state = true;
@@ -64,11 +64,8 @@ void CrystalPoint::update()
 	lastFrameTime = frameTime;
 
 	if (keyboardState.keys[27] && !prevKeyboardState.keys[27])
-        state = !state;
-
-	Controller *rightcontroller = controller.getRightController();
-	Controller *leftcontroller = controller.getLeftController();
-
+		state = !state;
+		
 	if (state)
 	{
 		Player* player = Player::getInstance();
@@ -78,7 +75,7 @@ void CrystalPoint::update()
 		if (keyboardState.special[GLUT_KEY_RIGHT] && !prevKeyboardState.special[GLUT_KEY_RIGHT])
 			worldhandler->NextWorld();
 		if (keyboardState.special[GLUT_KEY_UP] && !prevKeyboardState.special[GLUT_KEY_UP])
-			player->NextRightWeapon();
+			player->NextLeftWeapon();
 		if (keyboardState.special[GLUT_KEY_DOWN] && !prevKeyboardState.special[GLUT_KEY_DOWN])
 			player->PreviousLeftWeapon();
 		if (keyboardState.keys[27])
@@ -106,53 +103,42 @@ void CrystalPoint::update()
 		if (keyboardState.keys['q']) player->setPosition(1, deltaTime*speed, true);
 		if (keyboardState.keys['e']) player->setPosition(-1, deltaTime*speed, true);
 
+		Controller *leftcontroller = controller.getLeftController();
 		if (leftcontroller != nullptr) {
 			Vec2f *leftControllerJoystick = &leftcontroller->joystick;
 
-			if (leftControllerJoystick->y > 0.3 || leftControllerJoystick->y < -0.3) {
-				player->rotation.x += leftControllerJoystick->y/4;
+
+			if (leftcontroller->joystickButton) {
+				controller.rumble(leftcontroller->controllerId, 100, 100);
 			}
 
-			if (leftControllerJoystick->x > 0.3 || leftControllerJoystick->x < -0.3) {
-				player->rotation.y += leftControllerJoystick->x/4;
+
+			if (leftControllerJoystick->y > 0.3) {
+				player->setPosition(270, leftControllerJoystick->y * deltaTime * 2.0f, false);
+			}
+			else if (leftControllerJoystick->y < -0.3) {
+				player->setPosition(90, leftControllerJoystick->y * -1 * deltaTime * 2.0f, false);
+			}
+			if (leftControllerJoystick->x > 0.3) {
+				player->setPosition(180, leftControllerJoystick->x * deltaTime * 2.0f, false);
+			}
+			else if (leftControllerJoystick->x < -0.3) {
+				player->setPosition(0, leftControllerJoystick->x * -1 * deltaTime * 2.0f, false);
 			}
 
 			player->leftWeapon->rotateWeapon(Vec3f(leftcontroller->ypr.y + 140, 0, -leftcontroller->ypr.z));
 
-			if(leftcontroller->button && leftcontroller->joystickButton){
-				state = !state;
-			}else if(!leftcontroller->lastButton && leftcontroller->button){
-                leftcontroller->lastButton = leftcontroller->button;
-                controller.rumble(leftcontroller->controllerId, 100, 200);
-                player->NextLeftWeapon();
-            }else if(!leftcontroller->lastJoystickButton && leftcontroller->joystickButton){
-                leftcontroller->lastJoystickButton = leftcontroller->joystickButton;
-                player->hit = true;
-            }
-
 		}
+		Controller *rightcontroller = controller.getRightController();
 		if(rightcontroller != nullptr){
 			Vec2f *rightControllerJoystick = &rightcontroller->joystick;
-
-			if (rightControllerJoystick->y > 0.3) {
-				player->setPosition(270, rightControllerJoystick->y * deltaTime * 2.0f, false);
-			}
-			else if (rightControllerJoystick->y < -0.3) {
-				player->setPosition(90, rightControllerJoystick->y * -1 * deltaTime * 2.0f, false);
-			}
-			if (rightControllerJoystick->x > 0.3) {
-				player->setPosition(180, rightControllerJoystick->x * deltaTime * 2.0f, false);
-			}
-			else if (rightControllerJoystick->x < -0.3) {
-				player->setPosition(0, rightControllerJoystick->x * -1 * deltaTime * 2.0f, false);
+			if (rightControllerJoystick->y > 0.3 || rightControllerJoystick->y < -0.3) {
+				player->rotation.x += rightcontroller->joystick.y/4;
 			}
 
-            if(!rightcontroller->lastButton && rightcontroller->button){
-                rightcontroller->lastButton = rightcontroller->button;
-                controller.rumble(rightcontroller->controllerId, 100, 200);
-                player->NextRightWeapon();
-            }
-
+			if (rightControllerJoystick->x > 0.3 || rightControllerJoystick->x < -0.3) {
+				player->rotation.y += rightcontroller->joystick.x/4;
+			}
             player->rightWeapon->rotateWeapon(Vec3f(rightcontroller->ypr.y + 140, 0, -rightcontroller->ypr.z));
         }
 
@@ -165,25 +151,19 @@ void CrystalPoint::update()
 
 		if (!worldhandler->isPlayerPositionValid())
 			player->position = oldPosition;
+		/*else if (player->position.y > oldPosition.y + 1.2)
+			player->position = oldPosition;
+		*/
 		worldhandler->update(deltaTime);
 	}	
 	else
 	{
-		menu->update();
-		if (leftcontroller != nullptr) {
-			Vec2f *leftControllerJoystick = &leftcontroller->joystick;
-			if (leftControllerJoystick->y > 0.3 || leftControllerJoystick->y < -0.3) {
-				cursor->update(Vec2f(cursor->mousePosition.x,cursor->mousePosition.y+leftControllerJoystick->y ));
-			}
-			if (leftControllerJoystick->x > 0.3 || leftControllerJoystick->x < -0.3) {
-				cursor->update(Vec2f(cursor->mousePosition.x+leftControllerJoystick->x ,cursor->mousePosition.y));
-			}
-			if(leftcontroller->button){
-				cursor->state = 137;
-			}else if(cursor->state == 137){
-				cursor->state = GLUT_UP;
-			}
+		if (!menuIsBuild)
+		{
+			buildMenu();
+			menuIsBuild = true;
 		}
+		menu->update();
 		cursor->update(cursor->mousePosition + mouseOffset);
 	}
 
@@ -197,7 +177,7 @@ void CrystalPoint::update()
 
 void CrystalPoint::buildMenu()
 {
-	Button* start = new Button("Resume", Vec2f(1920 / 2 - 50, 1080 / 2 - 30), 100, 50);
+	Button* start = new Button("Resume", Vec2f(width / 2 - 50, height / 2 - 30), 100, 50);
 	auto toWorld = [](Button* b)
 	{
 		state = true;
@@ -206,13 +186,14 @@ void CrystalPoint::buildMenu()
 	menu->AddMenuElement(start);
 
 
-	Button* test = new Button("Exit", Vec2f(1920 / 2 - 50, 1080 / 2 + 30), 100, 50);
+	Button* test = new Button("Exit", Vec2f(width / 2 - 50, height / 2 + 30), 100, 50);
 	test->addAction([](Button* b)
 	{
 		exit(0);
 	});
 	menu->AddMenuElement(test);
-	Text* t = new Text("Pause", Vec2f(1920 / 2 - Util::glutTextWidth("Pause") / 2, 1080 / 2 - 75));
+
+	Text* t = new Text("Pause", Vec2f(width / 2 - Util::glutTextWidth("Pause") / 2, height / 2 - 75));
 	t->setColor(Vec3f(255, 255, 0));
 	menu->AddMenuElement(t);
 }

+ 1 - 0
CrystalPoint.h

@@ -43,6 +43,7 @@ public:
 
 	static SoundSystem& GetSoundSystem() { return sound_system; }
 	
+	bool menuIsBuild;
 
 private:
 	static SoundSystem sound_system;

+ 2 - 0
CrystalPoint.vcxproj

@@ -170,6 +170,7 @@
     <ClCompile Include="lib\serial\src\impl\list_ports\list_ports_win.cc" />
     <ClCompile Include="lib\serial\src\impl\win.cc" />
     <ClCompile Include="lib\serial\src\serial.cc" />
+    <ClCompile Include="LoadingScreen.cpp" />
     <ClCompile Include="Main.cpp" />
     <ClCompile Include="Menu.cpp" />
     <ClCompile Include="MenuElement.cpp" />
@@ -203,6 +204,7 @@
     <ClInclude Include="lib\serial\include\impl\win.h" />
     <ClInclude Include="lib\serial\include\serial.h" />
     <ClInclude Include="lib\serial\include\v8stdint.h" />
+    <ClInclude Include="LoadingScreen.h" />
     <ClInclude Include="Main.h" />
     <ClInclude Include="Menu.h" />
     <ClInclude Include="MenuElement.h" />

+ 6 - 0
CrystalPoint.vcxproj.filters

@@ -123,6 +123,9 @@
     <ClCompile Include="Util.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="LoadingScreen.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="World.h">
@@ -221,6 +224,9 @@
     <ClInclude Include="Util.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="LoadingScreen.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="worlds\worlds.json">

+ 1 - 27
Enemy.cpp

@@ -2,7 +2,6 @@
 #include <cmath>
 #include "Enemy.h"
 #include "Model.h"
-#include "Player.h"
 #include <iostream>
 
 Enemy::Enemy(const std::string &fileName,
@@ -29,7 +28,7 @@ Enemy::Enemy(const std::string &fileName,
 	hasTarget = false;
 	hit_sound_id = CrystalPoint::GetSoundSystem().LoadSound(fileMusic.c_str(), false);
 	music = CrystalPoint::GetSoundSystem().GetSound(hit_sound_id);
-	attack = false;
+	attack = false;	
 }
 
 
@@ -81,14 +80,6 @@ void Enemy::collide(const Entity * entity)
 	position.z = difference.z + entity->position.z;
 }
 
-void Enemy::hit(int damage){
-	health -= damage;
-}
-
-bool Enemy::isDead(){
-	return health < 0;
-}
-
 void Enemy::update(float delta)
 {
 	music->SetPos(position, Vec3f());
@@ -125,21 +116,4 @@ void Enemy::update(float delta)
 		}
 		rotation.y = atan2f(dx, dz) * 180 / M_PI;		
 	}
-	Player *player = Player::getInstance();
-
-	if(inObject(player->position + player->leftWeapon->collisionPoint)){
-		if(!isHit){
-			isHit = true;
-			hit(player->leftWeapon->damage);
-		}
-		std::cout << "HIT1";
-	}else if(inObject(player->rightWeapon->collisionPoint)){
-		if(!isHit){
-			isHit = true;
-			hit(player->rightWeapon->damage);
-		}
-		std::cout << "HIT2";
-	}else{
-		isHit = false;
-	}
 }

+ 0 - 4
Enemy.h

@@ -21,15 +21,11 @@ public:
 	int xp;
 	bool attack;
 
-	bool isHit;
-
 	void update(float);
 	void draw();
 
 	void inEyeSight(Vec3f &);
 	void collide(const Entity *entity);
-	void hit(int damage);
-	bool isDead(void);
 private:
 	int hit_sound_id;
 };

+ 71 - 0
LoadingScreen.cpp

@@ -0,0 +1,71 @@
+
+#include "stb_image.h"
+#include "LoadingScreen.h"
+
+#include "CrystalPoint.h"
+#include "Util.h"
+#include <ostream>
+
+LoadingScreen::LoadingScreen()
+{
+	points = 0;
+}
+
+
+LoadingScreen::~LoadingScreen()
+{
+}
+
+void LoadingScreen::draw()
+{
+	glMatrixMode(GL_PROJECTION);
+	glLoadIdentity();
+	glOrtho(0, CrystalPoint::width, CrystalPoint::height, 0, -10, 10);
+	glMatrixMode(GL_MODELVIEW);
+	glLoadIdentity();
+	
+	glDisable(GL_LIGHTING);
+	glDisable(GL_DEPTH_TEST);
+	glDisable(GL_COLOR_MATERIAL);
+	glEnable(GL_TEXTURE_2D);
+	
+		
+	glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+	glBindTexture(GL_TEXTURE_2D, textureId);
+	glBegin(GL_QUADS);
+	glTexCoord2f(0, 1);
+	glVertex2f(0, 0);
+	glTexCoord2f(0, 0);
+	glVertex2f(0, CrystalPoint::height);
+	glTexCoord2f(1, 0);
+	glVertex2f(CrystalPoint::width, CrystalPoint::height);
+	glTexCoord2f(1, 1);
+	glVertex2f(CrystalPoint::width, 0);	
+	glEnd();
+	
+	/*glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	
+	std::ostringstream oss;
+
+	oss << loading << points << std::endl;
+
+	Util::glutBitmapString(oss.str(),
+		CrystalPoint::width / 2 - Util::glutTextWidth(oss.str()),
+		CrystalPoint::height / 2 - 7);*/
+	
+	glDisable(GL_TEXTURE_2D);
+	glEnable(GL_LIGHTING);
+	glEnable(GL_DEPTH_TEST);
+	glutSwapBuffers();
+}
+
+void LoadingScreen::rise()
+{
+	points++;
+	draw();
+}
+
+void LoadingScreen::setTexture(const std::string filename)
+{
+	textureId = Util::loadTexture(filename);
+}

+ 22 - 0
LoadingScreen.h

@@ -0,0 +1,22 @@
+#pragma once
+#include <string>
+#include <GL\freeglut.h>
+
+class LoadingScreen
+{
+public:
+	LoadingScreen();
+	~LoadingScreen();
+
+	void draw();
+	void rise();
+	int points;
+
+	GLuint textureId;
+	void setTexture(const std::string fileName);
+
+private:
+	const std::string loading = "Loaded: ";
+
+};
+

+ 3 - 3
Main.cpp

@@ -61,7 +61,6 @@ int main(int argc, char* argv[])
 		if (button == GLUT_LEFT_BUTTON)
 			Cursor::getInstance()->state = state;
 
-
 			//std::cout << "Left button is down" << std::endl;
 	};
 
@@ -80,8 +79,9 @@ void configureOpenGL()
 {
 	//Init window and glut display mode
 	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
-	glutInitWindowSize(1440, 900);
-	//glutInitWindowPosition(glutGet(GLUT_WINDOW_WIDTH) / 2 - 800/2, glutGet(GLUT_WINDOW_HEIGHT) / 2 - 600/2);
+	glutInitWindowSize(1440, 900);	
+	//glutInitWindowPosition((glutGet(GLUT_SCREEN_WIDTH) / 2) - (glutGet(GLUT_WINDOW_WIDTH) / 2), (glutGet(GLUT_SCREEN_HEIGHT) / 2) - (glutGet(GLUT_WINDOW_HEIGHT) / 2));
+
 	glutCreateWindow("Crystal Point");	
 	//glutFullScreen();
 

+ 2 - 12
Player.cpp

@@ -18,7 +18,6 @@ Player::Player()
 	maxXp = 100;
 	level = 1;
 	crystals = 0;
-    hit = false;
 
 	loadWeapons();
 
@@ -151,7 +150,6 @@ void Player::loadWeapons()
 		std::string name = w["name"].asString();
 		std::string fileN = w["file"].asString();
 		float damage = w["damage"].asFloat();
-		float scale = w["scale"].asFloat();
 
 		Weapon::Element e = Weapon::FIRE;
 
@@ -176,8 +174,8 @@ void Player::loadWeapons()
 		Vec2f maxRot = Vec2f(w["maxRotation"][0].asFloat(), w["maxRotation"][1].asFloat());
 		Vec2f minRot = Vec2f(w["minRotation"][0].asFloat(), w["minRotation"][1].asFloat());
 
-		lweapon = new Weapon(name, damage, e, fileN, scale, position, rotation, leftoffset, anchor, maxRot, minRot, collision);
-		rweapon = new Weapon(name, damage, e, fileN, scale, position, rotation, rightoffset, anchor, maxRot, minRot, collision);
+		lweapon = new Weapon(name, damage, e, fileN, 1, position, rotation, leftoffset, anchor, maxRot, minRot, collision);
+		rweapon = new Weapon(name, damage, e, fileN, 1, position, rotation, rightoffset, anchor, maxRot, minRot, collision);
 
 		leftweapons.push_back(lweapon);
 		rightweapons.push_back(rweapon);
@@ -193,8 +191,6 @@ void Player::PreviousRightWeapon()
 		currentrightweapon = (rightweapons.size() > level ? level - 1 : rightweapons.size() - 1);
 
 	rightWeapon = rightweapons[currentrightweapon];
-	rightWeapon->move(position);
-	rightWeapon->rotate(rotation);
 }
 void Player::NextRightWeapon(void)
 {
@@ -204,8 +200,6 @@ void Player::NextRightWeapon(void)
 		currentrightweapon = 0;
 
 	rightWeapon = rightweapons[currentrightweapon];
-	rightWeapon->move(position);
-	rightWeapon->rotate(rotation);
 }
 void Player::PreviousLeftWeapon(void)
 {
@@ -215,8 +209,6 @@ void Player::PreviousLeftWeapon(void)
 		currentleftweapon = (leftweapons.size() > level ? level - 1 : leftweapons.size() - 1);
 
 	leftWeapon = leftweapons[currentleftweapon];
-	leftWeapon->move(position);
-	leftWeapon->rotate(rotation);
 }
 void Player::NextLeftWeapon(void)
 {
@@ -226,6 +218,4 @@ void Player::NextLeftWeapon(void)
 		currentleftweapon = 0;
 
 	leftWeapon = leftweapons[currentleftweapon];
-	leftWeapon->move(position);
-	leftWeapon->rotate(rotation);
 }

+ 0 - 2
Player.h

@@ -40,8 +40,6 @@ public:
 	int level;
 	int crystals;
 
-	bool hit;
-
 	float speed;
 
 	void HpUp(int);

+ 0 - 1
Vector.cpp

@@ -2,7 +2,6 @@
 #include <cmath>
 #include "Vector.h"
 
-
 Vec3f::Vec3f(float x, float y, float z)
 {
 	this->x = x;

BIN
WAVE/ape.wav


BIN
WAVE/hedge.wav


BIN
WAVE/letsRock.wav


+ 10 - 44
Weapon.cpp

@@ -27,8 +27,7 @@ Weapon::Weapon(std::string name, int damage, Element e, std::string modelFilenam
     this->ankerPoint = ankerPoint;
     this->maxRotation = maxRotation;
     this->minRotation = minRotation;
-    this->collisionPoint = collisionPoint;
-
+	this->collision = collision;
 };
 
 Weapon::~Weapon(){
@@ -53,28 +52,11 @@ void Weapon::move(Vec3f location){
     position = location;
 }
 
-Vec3f multiply(float matrix[16], Vec3f vec)
-{
-    Vec3f result;
-
-    for(int i = 0; i < 4; i++)
-    {
-        for(int p = 0; p < 4; p++)
-        {
-            result[i] += matrix[i * p] * vec[p];
-        }
-    }
-
-    return result;
-}
-
-
 void Weapon::draw(){
     if (weaponmodel != nullptr)
     {
         glPushMatrix();
 
-
         //Player position and rotation
         glTranslatef(position.x, position.y, position.z);
         glRotatef(rotation.x, 1, 0, 0);
@@ -84,44 +66,28 @@ void Weapon::draw(){
         //offset from player
         glTranslatef(offsetPlayer.x, offsetPlayer.y, offsetPlayer.z);
 
-        glScalef(scale, scale, scale);
-
         //Rotate weapon itself, from specific anker point
         glTranslatef(ankerPoint.x, ankerPoint.y, ankerPoint.z);
         glRotatef(rotationWeapon.z, 0, 0, 1);
         glRotatef(rotationWeapon.y, 0, 1, 0);
         glRotatef(rotationWeapon.x, 1, 0, 0);
-/*
+        glTranslatef(-ankerPoint.x, -ankerPoint.y, -ankerPoint.z);
+
+        glScalef(scale, scale, scale);
+
+        weaponmodel->draw();
+
+        //Test code for finding anker point
         glColor3ub(255, 255, 0);
+        glTranslatef(ankerPoint.x, ankerPoint.y, ankerPoint.z);
         glBegin(GL_LINES);
         glVertex2f(0, 4);
         glVertex2f(0, -4);
         glVertex2f(4, 0);
         glVertex2f(-4, 0);
-        glEnd();*/
-
-        glTranslatef(-ankerPoint.x, -ankerPoint.y, -ankerPoint.z);
-
-        weaponmodel->draw();
-
-        //Test code for finding anchor point
-        glTranslatef(collisionPoint.x, collisionPoint.y, collisionPoint.z);
-
-        float matrix[16];
-        glGetFloatv(GL_MODELVIEW_MATRIX, matrix);
-
-        Vec3f point = multiply(matrix, Vec3f(1,1,1));
-
+        glEnd();
 
         glPopMatrix();
 
-        glPushMatrix();
-
-
-
-        glPopMatrix();
     }
 }
-
-
-

+ 2 - 3
Weapon.h

@@ -16,7 +16,7 @@ public:
     Weapon(std::string name, int damage, Element element, std::string modelFilename, float scale, Vec3f location, Vec2f rotation,
            Vec3f offsetPlayer, Vec3f ankerPoint,
            Vec2f maxRotation, Vec2f minXRotation,
-		   Vec3f collisionPoint);
+		   Vec3f collision);
     ~Weapon();
 
     void draw();
@@ -32,9 +32,8 @@ public:
 
     float scale;
     Vec3f position, rotation, rotationWeapon;
-    Vec3f offsetPlayer, ankerPoint, collisionPoint;
+    Vec3f offsetPlayer, ankerPoint, collision;
     Vec2f maxRotation, minRotation;
-
 };
 
 

+ 31 - 17
World.cpp

@@ -9,14 +9,16 @@
 #include "WorldHandler.h"
 
 World::World(const std::string &fileName)
-{
+{		
 	nextworld = false;
 
 	//Store player instance
 	player = Player::getInstance();
+	
 
 	//Create the interface
 	interface = new Interface();
+	
 
 	//Open world json file
 	std::ifstream file(fileName);
@@ -25,6 +27,7 @@ World::World(const std::string &fileName)
 
 	json::Value v = json::readJson(file);
 	file.close();
+	
 
 	//Check file
 	if(v["world"].isNull() || v["world"]["heightmap"].isNull() || v["world"]["skybox"].isNull())
@@ -39,6 +42,13 @@ World::World(const std::string &fileName)
 		std::cout << "Invalid world file: enemies - " << fileName << "\n";
 	if (v["crystal"].isNull())
 		std::cout << "Invalid world file: crystals - " << fileName << "\n";
+	
+
+	if (!v["world"]["loadingscreen"].isNull())
+	{
+		ls.setTexture(v["world"]["loadingscreen"].asString());
+		ls.draw();
+	}	
 
 	//Load object templates
 	for (auto objt : v["world"]["object-templates"])
@@ -49,23 +59,28 @@ World::World(const std::string &fileName)
 			cancollide = objt["collision"].asBool();
 
 		objecttemplates.push_back(std::pair<int, std::pair<std::string, bool>>(objt["color"], std::pair<std::string, bool>(objt["file"], cancollide)));
+		
 	}
 
 	//Generate heightmap for this world
 	heightmap = new HeightMap(v["world"]["heightmap"].asString(), this);
+	
 
 	//Load skybox
 	skybox = new Skybox(15000.0f, v["world"]["skybox"].asString());
 	skybox->init();
+	
 
 	//Map different texture to heightmap if available
 	if(!v["world"]["texture"].isNull())
 		heightmap->SetTexture(v["world"]["texture"].asString());
+	
 
 	//Set player starting position
 	player->position.x = v["player"]["startposition"][0].asFloat();
 	player->position.z = v["player"]["startposition"][2].asFloat();
 	player->position.y = heightmap->GetHeight(player->position.x, player->position.z);
+	
 
 	//Load and place objects into world
 	for (auto object : v["objects"])
@@ -98,6 +113,7 @@ World::World(const std::string &fileName)
 		position.y = getHeight(position.x, position.z);
 
 		entities.push_back(new LevelObject(object["file"].asString(), position, rotation, scale, hasCollision));
+		
 	}
 
 	maxEnemies = 0;
@@ -140,6 +156,7 @@ World::World(const std::string &fileName)
 
 		maxEnemies++;
 		enemies.push_back(new Enemy(e["file"].asString(), e["music"].asString(), e["damage"].asFloat(), e["health"].asFloat(), position, rotation, scale));
+		
 	}
 	maxCrystals = 0;
 	if (!v["crystal"].isNull())
@@ -183,6 +200,7 @@ World::World(const std::string &fileName)
 				Crystal *c = new Crystal(filled, empty, position, rotation, scale);
 								
 				entities.push_back(c);
+				
 			}
 			interface->maxCrystals = maxCrystals;
 		}
@@ -192,6 +210,7 @@ World::World(const std::string &fileName)
 	{
 		sound_id = CrystalPoint::GetSoundSystem().LoadSound(v["world"]["music"].asString().c_str(), true);
 		music = CrystalPoint::GetSoundSystem().GetSound(sound_id);
+		
 	}
 
 	if (!v["portal"].isNull())
@@ -217,6 +236,7 @@ World::World(const std::string &fileName)
 		portal = new Portal(v["portal"]["file"], pos, rot, scale);
 		entities.push_back(portal);
 		portal->maxCrystals = maxCrystals;
+		
 	}
 }
 
@@ -249,7 +269,6 @@ float World::getHeight(float x, float y)
 void World::draw()
 {
 
-	player->setCamera();
 
 	float lightPosition[4] = { 0, 2, 1, 0 };
 	glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
@@ -261,6 +280,7 @@ void World::draw()
 
 	skybox->draw();
 
+	player->setCamera();
 	player->draw();
 
 	heightmap->Draw();
@@ -299,14 +319,11 @@ void World::update(float elapsedTime)
 
 		//Al deze code zou in enemy moeten staan
 		enemy->inEyeSight(player->position);
-
+		
 
 		enemy->update(elapsedTime);
 		if (enemy->hasTarget)
 		{
-            if(player->hit)
-                enemy->hit(player->leftWeapon->damage);
-
 			for (auto e : entities)
 			{
 				if (e->canCollide && e->inObject(enemy->position))
@@ -315,24 +332,24 @@ void World::update(float elapsedTime)
 					break;
 				}
 			}
-
-			if (enemy->attack)
-			{
-                player->HpDown(enemy->damage / 4);
-			}
 		}
-		enemy->position.y = getHeight(enemy->position.x, enemy->position.z) + 2.0f;
-		if(enemy->isDead()){
+
+		if (enemy->attack)
+		{			
 			remove = true;
+			continue;
 		}
+		enemy->position.y = getHeight(enemy->position.x, enemy->position.z) + 2.0f;
+		
 		if(!remove)
 			count++;
 	}
 
 	if (remove)
 	{
+		player->XpUp(enemies[count]->xp);
 		delete enemies[count];
-		player->XpUp(enemies[count]->xp*2);
+		
 		enemies.erase(enemies.begin() + count);
 		player->HpUp(10);		
 	}
@@ -344,8 +361,6 @@ void World::update(float elapsedTime)
 		if (portal->enter(elapsedTime))
 			nextworld = true;
 	}
-
-    player->hit = false;
 		
 }
 
@@ -366,4 +381,3 @@ bool World::isPlayerPositionValid()
 	}
 	return true;
 }
-

+ 3 - 0
World.h

@@ -10,6 +10,7 @@
 #include "Skybox.h"
 #include "CrystalPoint.h"
 #include "Portal.h"
+#include "LoadingScreen.h"
 
 class Entity;
 
@@ -32,6 +33,8 @@ private:
 	std::vector<Entity*> entities;
 	std::vector<Enemy*> enemies;
 	//std::vector<Crystal*> crystals;
+
+	LoadingScreen ls;
 public:
 	World(const std::string &fileName);
 	~World();

+ 4 - 6
weapons.json

@@ -10,13 +10,12 @@
       "collision": [ 0, 0, 0 ],
       "maxRotation": [ 170, 70 ],
       "minRotation": [ 20, -80 ],
-      "scale": 0.3,
 
       "left": {
-        "offset": [ 1.5, -2.6, 0 ]
+        "offset": [ 4.5, -8, -1 ]
       },
       "right": {
-        "offset": [ -0.1, -2.6, 0 ]
+        "offset": [ 0.5, -8, -1 ]
       }
     },
     {
@@ -29,13 +28,12 @@
       "collision": [ 0, 0, 0 ],
       "maxRotation": [ 170, 70 ],
       "minRotation": [ 20, -80 ],
-      "scale": 0.3,
 
       "left": {
-        "offset": [ 1.5, -2.6, 0 ]
+        "offset": [ 4.5, -8, -1 ]
       },
       "right": {
-        "offset": [ -0.1, -2.6, 0 ]
+        "offset": [ 0.5, -8, -1 ]
       }
     }
   ]

BIN
worlds/loadingScreen_picture.png


+ 1 - 0
worlds/rock.json

@@ -2,6 +2,7 @@
   "world": {
     "heightmap": "worlds/rockHeightmap.png",
     "texture": "worlds/rockStone.png",
+    "loadingscreen": "worlds/loadingScreen_picture.png",
 	"skybox": "skyboxes/water/",
 	"music": "WAVE/world1.wav",
     "object-templates": [

+ 2 - 1
worlds/small.json

@@ -1,6 +1,7 @@
 {
   "world": {
     "heightmap": "worlds/small.png",
+    "loadingscreen": "worlds/loadingScreen_picture.png",
     "skybox": "skyboxes/water/",
     "object-templates": [
       {
@@ -12,7 +13,7 @@
 	"music": "WAVE/world1.wav"
   },
   "player": {
-    "startposition": [ -10, -10, -10 ]
+    "startposition": [ 20, 0, 20 ]
   },
   "objects": [ ],
   "portal": {