Merge pull request #31 from CrystalPointA4/feature/loadingscreen
Feature/loadingscreen
This commit is contained in:
@@ -9,7 +9,6 @@ public:
|
||||
Vec3f ypr;
|
||||
Vec2f joystick;
|
||||
bool button, joystickButton, magnetSwitch;
|
||||
bool lastButton, lastJoystickButton, lastMagetSwitch;
|
||||
int controllerId;
|
||||
|
||||
void setConnected(bool connected);
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ public:
|
||||
|
||||
static SoundSystem& GetSoundSystem() { return sound_system; }
|
||||
|
||||
bool menuIsBuild;
|
||||
|
||||
private:
|
||||
static SoundSystem sound_system;
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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: ";
|
||||
|
||||
};
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
@@ -40,8 +40,6 @@ public:
|
||||
int level;
|
||||
int crystals;
|
||||
|
||||
bool hit;
|
||||
|
||||
float speed;
|
||||
|
||||
void HpUp(int);
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
#include <cmath>
|
||||
#include "Vector.h"
|
||||
|
||||
|
||||
Vec3f::Vec3f(float x, float y, float z)
|
||||
{
|
||||
this->x = x;
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
+10
-44
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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 ]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 752 KiB |
@@ -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
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user