diff --git a/Controller.h b/Controller.h index 29b693e..6d85ad8 100644 --- a/Controller.h +++ b/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); diff --git a/ControllerHandler.cpp b/ControllerHandler.cpp index 900585e..5e12a15 100644 --- a/ControllerHandler.cpp +++ b/ControllerHandler.cpp @@ -120,13 +120,8 @@ void ControllerHandler::commandControllerData(std::vector 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"); } } diff --git a/CrystalPoint.cpp b/CrystalPoint.cpp index 17f2cf7..65583c0 100644 --- a/CrystalPoint.cpp +++ b/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); } diff --git a/CrystalPoint.h b/CrystalPoint.h index 3ab6e53..2c739dc 100644 --- a/CrystalPoint.h +++ b/CrystalPoint.h @@ -43,6 +43,7 @@ public: static SoundSystem& GetSoundSystem() { return sound_system; } + bool menuIsBuild; private: static SoundSystem sound_system; diff --git a/CrystalPoint.vcxproj b/CrystalPoint.vcxproj index 7868161..db9c4b3 100644 --- a/CrystalPoint.vcxproj +++ b/CrystalPoint.vcxproj @@ -170,6 +170,7 @@ + @@ -203,6 +204,7 @@ + diff --git a/CrystalPoint.vcxproj.filters b/CrystalPoint.vcxproj.filters index cc3baac..8775746 100644 --- a/CrystalPoint.vcxproj.filters +++ b/CrystalPoint.vcxproj.filters @@ -123,6 +123,9 @@ Source Files + + Source Files + @@ -221,6 +224,9 @@ Header Files + + Header Files + diff --git a/Enemy.cpp b/Enemy.cpp index 05932ce..3f13f6f 100644 --- a/Enemy.cpp +++ b/Enemy.cpp @@ -2,7 +2,6 @@ #include #include "Enemy.h" #include "Model.h" -#include "Player.h" #include 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; - } } \ No newline at end of file diff --git a/Enemy.h b/Enemy.h index 0be19e1..eb503b4 100644 --- a/Enemy.h +++ b/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; }; diff --git a/LoadingScreen.cpp b/LoadingScreen.cpp new file mode 100644 index 0000000..5a6521c --- /dev/null +++ b/LoadingScreen.cpp @@ -0,0 +1,71 @@ + +#include "stb_image.h" +#include "LoadingScreen.h" + +#include "CrystalPoint.h" +#include "Util.h" +#include + +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); +} \ No newline at end of file diff --git a/LoadingScreen.h b/LoadingScreen.h new file mode 100644 index 0000000..f24d8c8 --- /dev/null +++ b/LoadingScreen.h @@ -0,0 +1,22 @@ +#pragma once +#include +#include + +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: "; + +}; + diff --git a/Main.cpp b/Main.cpp index e9abf25..086dc14 100644 --- a/Main.cpp +++ b/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(); diff --git a/Player.cpp b/Player.cpp index 2513c54..84fe8e4 100644 --- a/Player.cpp +++ b/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); } \ No newline at end of file diff --git a/Player.h b/Player.h index 17bbe49..b843153 100644 --- a/Player.h +++ b/Player.h @@ -40,8 +40,6 @@ public: int level; int crystals; - bool hit; - float speed; void HpUp(int); diff --git a/Vector.cpp b/Vector.cpp index c7ea763..35a6d41 100644 --- a/Vector.cpp +++ b/Vector.cpp @@ -2,7 +2,6 @@ #include #include "Vector.h" - Vec3f::Vec3f(float x, float y, float z) { this->x = x; diff --git a/WAVE/ape.wav b/WAVE/ape.wav deleted file mode 100644 index 29aecf6..0000000 Binary files a/WAVE/ape.wav and /dev/null differ diff --git a/WAVE/hedge.wav b/WAVE/hedge.wav deleted file mode 100644 index c92201d..0000000 Binary files a/WAVE/hedge.wav and /dev/null differ diff --git a/WAVE/letsRock.wav b/WAVE/letsRock.wav deleted file mode 100644 index 976eb2e..0000000 Binary files a/WAVE/letsRock.wav and /dev/null differ diff --git a/Weapon.cpp b/Weapon.cpp index 5c78e92..878433b 100644 --- a/Weapon.cpp +++ b/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(); } } - - - diff --git a/Weapon.h b/Weapon.h index 059aefd..187b5b0 100644 --- a/Weapon.h +++ b/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; - }; diff --git a/World.cpp b/World.cpp index 42d4179..ac70895 100644 --- a/World.cpp +++ b/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>(objt["color"], std::pair(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); - } + if (enemy->attack) + { + remove = true; + continue; } enemy->position.y = getHeight(enemy->position.x, enemy->position.z) + 2.0f; - if(enemy->isDead()){ - remove = true; - } + 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; } - diff --git a/World.h b/World.h index 9dbebcf..9ec6893 100644 --- a/World.h +++ b/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 entities; std::vector enemies; //std::vector crystals; + + LoadingScreen ls; public: World(const std::string &fileName); ~World(); diff --git a/weapons.json b/weapons.json index 264dd33..77177a9 100644 --- a/weapons.json +++ b/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 ] } } ] diff --git a/worlds/loadingScreen_picture.png b/worlds/loadingScreen_picture.png new file mode 100644 index 0000000..1088762 Binary files /dev/null and b/worlds/loadingScreen_picture.png differ diff --git a/worlds/rock.json b/worlds/rock.json index cf3f2e8..4a1e8f7 100644 --- a/worlds/rock.json +++ b/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": [ diff --git a/worlds/small.json b/worlds/small.json index 62d5ddf..dfc8bbb 100644 --- a/worlds/small.json +++ b/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": {