I have tried some rotation formulas, but it does not work 100%
So Have A Look at the Code and Tell Me What you think. I will Firstly Supply A Cut Version Just Relating to the Problem and then A Full Version of the entire Source.
Code: Select all
bool up = false;
bool down = false;
bool right = false;
bool left = false;
bool jump = false;
int speed =2;
//Make an event Class
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event)
{
if (event.EventType == EET_KEY_INPUT_EVENT)
{
switch(event.KeyInput.Key)
{
case KEY_KEY_W:
up = event.KeyInput.PressedDown;
break;
case KEY_KEY_S:
down = event.KeyInput.PressedDown;
break;
case KEY_KEY_A:
left = event.KeyInput.PressedDown;
break;
case KEY_KEY_D:
right = event.KeyInput.PressedDown;
break;
case KEY_KEY_F:
jump = event.KeyInput.PressedDown;
}
//return true;
}
return false;
}
};
ICameraSceneNode* camera = // Declare the camera
smgr->addCameraSceneNode();// Declare the pointer smgr( scene Manager) to add a FPS Camera.
camera->setFOV(DEGTORAD *80.f);// Set FOV
driver->setFog(video::SColor(0,138,125,81), true, 250, 1000, 0, true);
IAnimatedMesh* player = smgr->getMesh("media/ninja.b3d");// Decalre Player
IAnimatedMeshSceneNode* player_node = smgr->addAnimatedMeshSceneNode(player);
if (player_node)
{
player_node->setScale(vector3df(13,13,13));
player_node->setAnimationSpeed(f32 (500));
player_node->setFrameLoop(0,1400);
}
while (device->run())// While Device is Running Do..
{
driver->beginScene(true, true, SColor(221,122,212,221));// Start The Scene
smgr->drawAll();// Draw all Scene Manager
guienv->drawAll();// Draw All Gui Environment
if (up)
{
playerpos.X += speed * cos((playerrot.Y) * 3.14/ 180);
playerpos.Z -= speed * sin((playerrot.Y) * 3.14/180);
}
if (down)
{
playerpos.X -= speed * cos((playerrot.Y) * 3.14/180);
playerpos.Z += speed * sin((playerrot.Y) * 3.14/180);
}
if (left)
{
playerrot.Y -= 1;
}
if (right)
{
playerrot.Y += 1;
}
if (jump)
{
bool havejumped = false;
playerpos.Y = playerpos.Y + 3;
//wait(1);
playerpos.Y = playerpos.Y - 3;
//player_node->setFrameLoop(1400, 2000);
//player_node->setFrameLoop(0, 1400);
}
player_node->setPosition(playerpos);
player_node->setRotation(playerrot);
vector3df cameratarg = playerpos;
cameratarg.Z = playerpos.Z + 200;
cameratarg.X = playerpos.X +300;
camera->setTarget(cameratarg);
vector3df camerapos = playerpos;
camerapos.Y = camerapos.Y - 200;
camerapos.Z = camerapos.Z -200;
camerapos.X = camerapos.X -300;
camera->setPosition(camerapos);
driver->endScene();// Driver End Scene
}
engine->drop(); // delete engine
device->drop(); // Drop Device
return 0;// End
}
Now I am not sure exactly but I believe that the camera angle problem is associated with the formulas... I have followed based the camera RPG of Omars Tutorial.
///// Full Version////
Library.h
Code:
Code: Select all
#include <irrlicht.h> // Declare Irrlicht
#include <irrklang.h>
#include <iostream> // Add Iostream Common header not really needed for this tutorial
#include <time.h>
#include <stdio.h>
// Declare Using Namespace See Tutorial 1
using namespace irr;
using namespace core;
using namespace video;
using namespace scene;
using namespace io;
using namespace gui;
using namespace audio;
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}
Main.CPP
Code:
Code: Select all
/////////////////////////////////////
// Author: Dejai //
// Date: 1 Oct 2007 //
// Purpose: Tutorial / Rpg Base //
/////////////////////////////////
#include "library.h"
bool up = false;
bool down = false;
bool right = false;
bool left = false;
bool jump = false;
int speed =2;
//Make an event Class
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event)
{
if (event.EventType == EET_KEY_INPUT_EVENT)
{
switch(event.KeyInput.Key)
{
case KEY_KEY_W:
up = event.KeyInput.PressedDown;
break;
case KEY_KEY_S:
down = event.KeyInput.PressedDown;
break;
case KEY_KEY_A:
left = event.KeyInput.PressedDown;
break;
case KEY_KEY_D:
right = event.KeyInput.PressedDown;
break;
case KEY_KEY_F:
jump = event.KeyInput.PressedDown;
}
//return true;
}
return false;
}
};
int main() // Start Int Main
{
MyEventReceiver receiver;
// Start The Irrlicht Device Set driver, dimensions, resolution, colour depths,
// deside wether to enable fullscreen, shadowing and if to enable event reciver
IrrlichtDevice* device =
createDevice(EDT_OPENGL,dimension2d<s32>(1200,960),16,
true, false , false, &receiver);
//Set The Window Caption to The Glade
device->setWindowCaption(L" The Glade ");
// Initialize the Drivers
IVideoDriver* driver = device->getVideoDriver(); // Initialize the Video Driver
ISceneManager* smgr = device->getSceneManager(); // Initialize the Scene Manager
IGUIEnvironment* guienv = device->getGUIEnvironment();// Initialize the GUI Environment
ISoundEngine* engine = createIrrKlangDevice();// Sound Environment
// play Music stream, looped
engine->play2D("media/music.wav", true);
// Hide the cursor
device->getCursorControl()->setVisible(false);
// Add A Camera With FPS
ICameraSceneNode* camera = // Declar the camera
smgr->addCameraSceneNode();// Declare the pointer smgr( scene Manager) to add a FPS Camera.
camera->setFOV(DEGTORAD *80.f);// Set FOV
driver->setFog(video::SColor(0,138,125,81), true, 250, 1000, 0, true);
// Start The Sky Dome Declare Texture of Skydome, distance and strech
smgr->addSkyDomeSceneNode( driver->getTexture("media/sky.jpg"),16,
16, 1.0f, 2.0f);
////////////// MESH DECLARATION /////////////////////////////
// 1. Load The Base Map
IAnimatedMesh* base = smgr->getMesh("media/base.obj"); // Declare The Floor
IAnimatedMeshSceneNode* base_node = smgr->addAnimatedMeshSceneNode(base);
IAnimatedMesh* house = smgr->getMesh("media/house.3ds");// Declare Hoyse Meshes
IAnimatedMeshSceneNode* house_node = smgr->addAnimatedMeshSceneNode(house);
IAnimatedMesh* wall = smgr->getMesh("media/wall.obj");// Declare Walls
IAnimatedMeshSceneNode* wall_node = smgr->addAnimatedMeshSceneNode(wall);
IAnimatedMesh* dwarf = smgr->getMesh("media/dwarf.x");// Decalre Dwarfs
IAnimatedMeshSceneNode* dwarf_node = smgr->addAnimatedMeshSceneNode(dwarf);
IAnimatedMesh* tree = smgr->getMesh("media/tree.x");// Declare Trees
IAnimatedMeshSceneNode* tree_node = smgr->addAnimatedMeshSceneNode(tree);
IAnimatedMesh* church = smgr->getMesh("media/Ravanica.max");// Declare Church
IAnimatedMeshSceneNode* church_node = smgr->addAnimatedMeshSceneNode(church);
IAnimatedMesh* player = smgr->getMesh("media/ninja.b3d");// Decalre Player
IAnimatedMeshSceneNode* player_node = smgr->addAnimatedMeshSceneNode(player);
if (player_node)
{
player_node->setScale(vector3df(13,13,13));
player_node->setAnimationSpeed(f32 (500));
player_node->setFrameLoop(0,1400);
}
///////// META TRIANGLE SELECTOR ///////////
ITriangleSelector* base_selector = 0;
ITriangleSelector * house_selector = 0;
ITriangleSelector* wall_selector = 0;
ITriangleSelector* tree_selector = 0;
IMetaTriangleSelector * metaSelector = smgr->createMetaTriangleSelector();
/////////////// MESH INITIALIZATION ///////////////////////////////
if (base_node) // 1. Base Map Initialization
{
base_node->setMaterialFlag(EMF_LIGHTING, false); // Don't Have lighting
base_node->setMaterialTexture(0, driver->getTexture("media/paving.jpg"));// Choose a Texture
base_node->setPosition(vector3df(0,-9,0));// Set Position
base_node->setRotation(vector3df(90,180,180));// Set Rotation
base_node->setScale(vector3df(3,4,3));// Set Scale
base_node = smgr->addAnimatedMeshSceneNode(base);
base_node->setMaterialFlag(EMF_LIGHTING, false); // Don't Have lighting
base_node->setMaterialTexture(0, driver->getTexture("media/grass.jpg"));// Choose a Texture
base_node->setPosition(vector3df(0,-10,0));// Set Position
base_node->setRotation(vector3df(90,180,180));// Set Rotation
base_node->setScale(vector3df(10,10,10));// Set Scale
}
if (house_node)// 2. Initialize Houses And Positions
{
house_node->setMaterialFlag(EMF_LIGHTING, false);// Dont Enable Lighting Effects
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));// Material
house_node->setPosition(vector3df(0,-10,500));// Position
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
house_node = smgr->addAnimatedMeshSceneNode(house);
house_node->setMaterialFlag(EMF_LIGHTING, false);
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));
house_node->setPosition(vector3df(800,-10,500));
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
house_node = smgr->addAnimatedMeshSceneNode(house);
house_node->setMaterialFlag(EMF_LIGHTING, false);
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));
house_node->setPosition(vector3df(1600,-10,500));
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
house_node = smgr->addAnimatedMeshSceneNode(house);
house_node->setMaterialFlag(EMF_LIGHTING, false);
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));
house_node->setPosition(vector3df(-800,-10,500));
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
house_node = smgr->addAnimatedMeshSceneNode(house);
house_node->setMaterialFlag(EMF_LIGHTING, false);
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));
house_node->setPosition(vector3df(-1600,-10,500));
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
house_node = smgr->addAnimatedMeshSceneNode(house);
house_node->setMaterialFlag(EMF_LIGHTING, false);
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));
house_node->setPosition(vector3df(-1600,-10,-1000));
house_node->setRotation(vector3df(0,180,0));
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
house_node = smgr->addAnimatedMeshSceneNode(house);
house_node->setMaterialFlag(EMF_LIGHTING, false);
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));
house_node->setPosition(vector3df(-800,-10,-1000));
house_node->setRotation(vector3df(0,180,0));
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
house_node = smgr->addAnimatedMeshSceneNode(house);
house_node->setMaterialFlag(EMF_LIGHTING, false);
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));
house_node->setPosition(vector3df(0,-10,-1000));
house_node->setRotation(vector3df(0,180,0));
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
house_node = smgr->addAnimatedMeshSceneNode(house);
house_node->setMaterialFlag(EMF_LIGHTING, false);
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));
house_node->setPosition(vector3df(800,-10,-1000));
house_node->setRotation(vector3df(0,180,0));
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
house_node = smgr->addAnimatedMeshSceneNode(house);
house_node->setMaterialFlag(EMF_LIGHTING, false);
house_node->setMaterialTexture(0, driver->getTexture("media/house.jpg"));
house_node->setPosition(vector3df(1600,-10,-1000));
house_node->setRotation(vector3df(0,180,0));
house_selector = smgr->createOctTreeTriangleSelector(house->getMesh(0), house_node, 128);
metaSelector->addTriangleSelector(house_selector);
house_selector->drop();
}
if (wall_node) ////// Wall Declaration /////////////
{
wall_node->setMaterialFlag(EMF_LIGHTING, false);
wall_node->setRotation(vector3df(0,270,0));
wall_node->setMaterialTexture(0,driver->getTexture("media/wall.jpg"));
wall_node->setScale(vector3df(20,20,20));
wall_node->setPosition(vector3df(-2500,0,0));
}
if(dwarf_node) //////Dwarf Declaration /////////////
{
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(23,55);
dwarf_node->setRotation(vector3df(0,90,0));
dwarf_node->setPosition(vector3df(0,-9,350));
dwarf_node = smgr->addAnimatedMeshSceneNode(dwarf);
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(23,55);
dwarf_node->setRotation(vector3df(0,270,0));
dwarf_node->setPosition(vector3df(-60,-9,350));
/////// Gate Guards ////////////////
dwarf_node = smgr->addAnimatedMeshSceneNode(dwarf);
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(23,55);
dwarf_node->setRotation(vector3df(0,270,0));
dwarf_node->setPosition(vector3df(2850,-9,800));
dwarf_node = smgr->addAnimatedMeshSceneNode(dwarf);
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(23,55);
dwarf_node->setRotation(vector3df(0,270,0));
dwarf_node->setPosition(vector3df(2850,-9,-800));
dwarf_node = smgr->addAnimatedMeshSceneNode(dwarf);
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(23,55);
dwarf_node->setRotation(vector3df(0,270,0));
dwarf_node->setPosition(vector3df(2850,-9,880));
dwarf_node = smgr->addAnimatedMeshSceneNode(dwarf);
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(23,55);
dwarf_node->setRotation(vector3df(0,270,0));
dwarf_node->setPosition(vector3df(2850,-9,-880));
dwarf_node = smgr->addAnimatedMeshSceneNode(dwarf);
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(0, 0);
dwarf_node->setRotation(vector3df(0,270,0));
dwarf_node->setPosition(vector3df(2850,-9,0));
dwarf_node = smgr->addAnimatedMeshSceneNode(dwarf);
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(23,55);
dwarf_node->setRotation(vector3df(0,270,0));
dwarf_node->setPosition(vector3df(2850,-9,120));
// End Gate Guards/////////////
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(23,55);
dwarf_node->setRotation(vector3df(0,90,0));
dwarf_node->setPosition(vector3df(1700,-9,-900));
dwarf_node = smgr->addAnimatedMeshSceneNode(dwarf);
dwarf_node->setScale(vector3df(1.5,1.5,1.5));
dwarf_node->setFrameLoop(23,55);
dwarf_node->setRotation(vector3df(0,270,0));
dwarf_node->setPosition(vector3df(1630,-9,-900));
///////////////////////////////////////////////////
}
if (tree_node)////// Trees ////////////
{
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(3999,200,1000));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(4300,200,1200));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(4000,200,-1233));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(5300,200,1800));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(4399,200,-1450));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(4999,200,-1600));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(5300,200,-1000));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(6300,200,1000));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(5300,200,-1000));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(6300,200,-1599));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(5399,200,1699));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
tree_node = smgr->addAnimatedMeshSceneNode(tree);
tree_node->setMaterialFlag(EMF_LIGHTING, false);
tree_node->setScale(vector3df(100,100,100));
tree_node->setPosition(vector3df(5399,200,-1700));
tree_selector = smgr->createOctTreeTriangleSelector(tree->getMesh(0), tree_node, 128);
metaSelector->addTriangleSelector(tree_selector);
tree_selector->drop();
}
/////////////////////////////////////////
if (church_node)// Church
{
church_node->setMaterialFlag(EMF_LIGHTING, false);
church_node->setRotation(vector3df(0,270,0));
church_node->setPosition(vector3df(-1750,0,-200));
}
///////////////////////// Triangle Selection /////////////////////////////
// Basically Collisions With Objects.
////////////// Triangle Selector/////////////////
//// Base ////////
// Declare Selector
base_selector = smgr->createOctTreeTriangleSelector(
base->getMesh(0), base_node, 128); // Declares which mesh and node it is assigned to
camera->setTriangleSelector(base_selector);// Sets the camera to the bass selector
base_selector->drop(); // Drop selector
// create collision response animator and attach it to the camera
ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
base_selector, camera, core::vector3df(60,100,60),
core::vector3df(-1,-1,-1), // This Sets Gravity VERY important, -1 keeps you grounded
core::vector3df(0,0,0));
camera->addAnimator(anim);// Canera add animatior
anim->drop();// drop animator
/////// End Of Base/////////
/////////// House//////////////////
// Declare Selector
house_selector = smgr->createOctTreeTriangleSelector(
house->getMesh(0), house_node, 128); // Declares which mesh and node it is assigned to
player_node->setTriangleSelector(house_selector);// Sets the camera to the bass selector
house_selector->drop();
// Drop selector
// create collision response animator and attach it to the camera
ISceneNodeAnimator* anim2 = smgr->createCollisionResponseAnimator(
metaSelector, player_node, core::vector3df(60,100,60),
core::vector3df(0,0,0), // This Sets Gravity VERY important, -1 keeps you grounded
core::vector3df(0,0,0));
metaSelector->drop();
player_node->addAnimator(anim2);// Player add animatior
anim2->drop();// drop animator
camera->setTriangleSelector(house_selector);
ISceneNodeAnimator* anim6 = smgr->createCollisionResponseAnimator(
metaSelector, camera, core::vector3df(60,100,60),
core::vector3df(0,0,0), // This Sets Gravity VERY important, -1 keeps you grounded
core::vector3df(0,0,0));
metaSelector->drop();
camera->addAnimator(anim6);// Canera add animatior
anim6->drop();// drop animator
//////// End of House/////////
///////// Start Of Wall ///////////////////
// Declare Selector
wall_selector = smgr->createOctTreeTriangleSelector(
wall->getMesh(0),wall_node, 128); // Declares which mesh and node it is assigned to
camera->setTriangleSelector(wall_selector);// Sets the camera to the bass selector
wall_selector->drop(); // Drop selector
// create collision response animator and attach it to the camera
ISceneNodeAnimator* anim3 = smgr->createCollisionResponseAnimator(
wall_selector, camera, core::vector3df(60,100,60),
core::vector3df(0,0,0), // This Sets Gravity VERY important, -1 keeps you grounded
core::vector3df(0,0,0));
camera->addAnimator(anim3);// Canera add animatior
anim3->drop();
player_node->setTriangleSelector(wall_selector);
ISceneNodeAnimator* anim7 = smgr->createCollisionResponseAnimator(
wall_selector, player_node, core::vector3df(60,100,60),
core::vector3df(0,0,0), // This Sets Gravity VERY important, -1 keeps you grounded
core::vector3df(0,0,0));
player_node->addAnimator(anim7);// Canera add animatior
anim7->drop();
////////// End Of Wall ///////////////
/////////////Start Of Tree ///////////////
tree_selector = smgr->createOctTreeTriangleSelector(
tree->getMesh(0), tree_node, 128); // Declares which mesh and node it is assigned to
camera->setTriangleSelector(tree_selector);// Sets the camera to the bass selector
tree_selector->drop();
// Drop selector
// create collision response animator and attach it to the camera
ISceneNodeAnimator* anim4 = smgr->createCollisionResponseAnimator(
metaSelector, camera, core::vector3df(60,100,60),
core::vector3df(0,0,0), // This Sets Gravity VERY important, -1 keeps you grounded
core::vector3df(0,0,0));
metaSelector->drop();
camera->addAnimator(anim4);// Canera add animatior
anim4->drop();// drop animatorw
player_node->setTriangleSelector(tree_selector);// Sets the camera to the bass selector
ISceneNodeAnimator* anim8 = smgr->createCollisionResponseAnimator(
metaSelector,player_node, core::vector3df(60,100,60),
core::vector3df(0,0,0), // This Sets Gravity VERY important, -1 keeps you grounded
core::vector3df(0,0,0));
metaSelector->drop();
player_node->addAnimator(anim8);// Canera add animatior
anim8->drop();
///////////End Of Tree
// Event Declaration
vector3df playerpos = player_node->getPosition();
vector3df playerrot = player_node->getRotation();
/////////// Game While Loop /////////////
while (device->run())// While Device is Running Do..
{
driver->beginScene(true, true, SColor(221,122,212,221));// Start The Scene
smgr->drawAll();// Draw all Scene Manager
guienv->drawAll();// Draw All Gui Environment
if (up)
{
playerpos.X += speed * cos((playerrot.Y) * 3.14/ 180);
playerpos.Z -= speed * sin((playerrot.Y) * 3.14/180);
}
if (down)
{
playerpos.X -= speed * cos((playerrot.Y) * 3.14/180);
playerpos.Z += speed * sin((playerrot.Y) * 3.14/180);
}
if (left)
{
playerrot.Y -= 1;
}
if (right)
{
playerrot.Y += 1;
}
if (jump)
{
bool havejumped = false;
playerpos.Y = playerpos.Y + 3;
//wait(1);
playerpos.Y = playerpos.Y - 3;
//player_node->setFrameLoop(1400, 2000);
//player_node->setFrameLoop(0, 1400);
}
player_node->setPosition(playerpos);
player_node->setRotation(playerrot);
vector3df cameratarg = playerpos;
cameratarg.Z = playerpos.Z + 200;
cameratarg.X = playerpos.X +300;
camera->setTarget(cameratarg);
vector3df camerapos = playerpos;
camerapos.Y = camerapos.Y - 200;
camerapos.Z = camerapos.Z -200;
camerapos.X = camerapos.X -300;
camera->setPosition(camerapos);
driver->endScene();// Driver End Scene
}
engine->drop(); // delete engine
device->drop(); // Drop Device
return 0;// End
}