Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Player.h"
- #include "TextRenderer.h"
- #include <OgreMath.h>
- #include <OgreFontManager.h>
- #include <OgreManualObject.h>
- #include <OgreSimpleRenderable.h>
- Player::Player(SceneManager* mSceneMgr, RenderWindow* window, OIS::Keyboard* keyboard, OIS::JoyStick* joystick)
- {
- this->mSceneMgr = mSceneMgr;
- mWorld = new OgreBulletDynamics::DynamicsWorld(
- mSceneMgr,
- AxisAlignedBox(Vector3(-1000, -1000, -1000), Vector3(1000, 1000, 1000)),
- Vector3(0, -9.81, 0),
- true,
- true,
- 100000
- );
- mDebugDrawer = new OgreBulletCollisions::DebugDrawer();
- mDebugDrawer->setDrawWireframe(true);
- mWorld->setDebugDrawer(mDebugDrawer);
- mWorld->setShowDebugShapes(true);
- SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode("debugDrawer", Ogre::Vector3::ZERO);
- node->attachObject(static_cast <SimpleRenderable *> (mDebugDrawer));
- OgreBulletCollisions::BoxCollisionShape shape();
- TextRenderer::getSingleton().addTextBox("nigger", "nigger", 10, 10, 100, 20, Ogre::ColourValue::White);
- Ogre::FontManager::getSingleton().getByName("StarWars")->load();
- // Create the camera
- mCamera = mSceneMgr->createCamera("PlayerCam");
- mCameraPivot = (SceneNode*)mSceneMgr->getRootSceneNode()->createChildSceneNode();
- mCameraNodeParentYaw = mCameraPivot->createChildSceneNode();
- mCameraNodeParentPitch = mCameraNodeParentYaw->createChildSceneNode();
- mCameraNode = mCameraNodeParentPitch->createChildSceneNode();
- mSceneHead = mCameraPivot->createChildSceneNode();
- mSceneHead->scale(0.1, 0.1, 0.1);
- // Position it at 80 in Z direction
- mCameraPivot->setPosition(Ogre::Vector3(0,0,0));
- mCameraNode->setPosition(Ogre::Vector3(0,20,100));
- // Look back along -Z
- mCamera->lookAt(Vector3::ZERO);
- mCamera->setNearClipDistance(5);
- mCameraNode->attachObject(mCamera);
- Ogre::Entity* ogreHead = mSceneMgr->createEntity("Head", "ogrehead.mesh");
- Ogre::Entity* ogreHead2 = mSceneMgr->createEntity("Head2", "ogrehead.mesh");
- Ogre::SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
- headNode->scale(0.4, 0.4, 0.4);
- headNode->attachObject(ogreHead);
- mSceneHead->attachObject(ogreHead2);
- Vector3 size = ogreHead2->getBoundingBox().getSize() * 0.4;
- OgreBulletCollisions::BoxCollisionShape *sceneBoxShape = new OgreBulletCollisions::BoxCollisionShape(size);
- // and the Bullet rigid body
- mDefaultBody = new OgreBulletDynamics::RigidBody(
- "defaultBoxRigfghfghid",
- mWorld);
- mDefaultBody->setShape(mCameraPivot,
- sceneBoxShape,
- 0, // dynamic body restitution
- 1, // dynamic body friction
- 1.0f, // dynamic bodymass
- mSceneHead->getPosition(), // starting position of the box
- mCameraPivot->getOrientation());// orientation of the box
- mNumEntitiesInstanced++;
- mDefaultBody->setLinearVelocity(
- Vector3(10, 0, 10) ); // shooting
- Plane plane;
- plane.normal = Ogre::Vector3::UNIT_Y;
- plane.d = 0;
- MeshManager::getSingleton().createPlane("floor", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 450.0f, 450.0f, 10, 10, true, 1, 50.0f, 50.0f, Ogre::Vector3::UNIT_Z);
- Ogre::Entity* planeEnt = mSceneMgr->createEntity("plane", "floor");
- planeEnt->setMaterialName("Examples/BumpyMetal");
- planeEnt->setCastShadows(false);
- SceneNode* grassNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
- grassNode->attachObject(planeEnt);
- grassNode->translate(0, -5, 0);
- // Create one viewport, entire window
- Ogre::Viewport* vp = window->addViewport(mCamera);
- vp->setBackgroundColour(Ogre::ColourValue(0,0,0));
- // Alter the camera aspect ratio to match the viewport
- mCamera->setAspectRatio(
- Ogre::Real(vp->getActualWidth()) / Ogre::Real(vp->getActualHeight()));
- mKeyboard = keyboard;
- mJoystick = joystick;
- ManualObject* cube = new ManualObject("nigger");
- cube->begin("Examples/GrassFloor");
- cube->position(0.5,-0.5,1.0);cube->normal(0.408248,-0.816497,0.408248);cube->textureCoord(1,0);
- cube->position(-0.5,-0.5,0.0);cube->normal(-0.408248,-0.816497,-0.408248);cube->textureCoord(0,1);
- cube->position(0.5,-0.5,0.0);cube->normal(0.666667,-0.333333,-0.666667);cube->textureCoord(1,1);
- cube->position(-0.5,-0.5,1.0);cube->normal(-0.666667,-0.333333,0.666667);cube->textureCoord(0,0);
- cube->position(0.5,0.5,1.0);cube->normal(0.666667,0.333333,0.666667);cube->textureCoord(1,0);
- cube->position(-0.5,-0.5,1.0);cube->normal(-0.666667,-0.333333,0.666667);cube->textureCoord(0,1);
- cube->position(0.5,-0.5,1.0);cube->normal(0.408248,-0.816497,0.408248);cube->textureCoord(1,1);
- cube->position(-0.5,0.5,1.0);cube->normal(-0.408248,0.816497,0.408248);cube->textureCoord(0,0);
- cube->position(-0.5,0.5,0.0);cube->normal(-0.666667,0.333333,-0.666667);cube->textureCoord(0,1);
- cube->position(-0.5,-0.5,0.0);cube->normal(-0.408248,-0.816497,-0.408248);cube->textureCoord(1,1);
- cube->position(-0.5,-0.5,1.0);cube->normal(-0.666667,-0.333333,0.666667);cube->textureCoord(1,0);
- cube->position(0.5,-0.5,0.0);cube->normal(0.666667,-0.333333,-0.666667);cube->textureCoord(0,1);
- cube->position(0.5,0.5,0.0);cube->normal(0.408248,0.816497,-0.408248);cube->textureCoord(1,1);
- cube->position(0.5,-0.5,1.0);cube->normal(0.408248,-0.816497,0.408248);cube->textureCoord(0,0);
- cube->position(0.5,-0.5,0.0);cube->normal(0.666667,-0.333333,-0.666667);cube->textureCoord(1,0);
- cube->position(-0.5,-0.5,0.0);cube->normal(-0.408248,-0.816497,-0.408248);cube->textureCoord(0,0);
- cube->position(-0.5,0.5,1.0);cube->normal(-0.408248,0.816497,0.408248);cube->textureCoord(1,0);
- cube->position(0.5,0.5,0.0);cube->normal(0.408248,0.816497,-0.408248);cube->textureCoord(0,1);
- cube->position(-0.5,0.5,0.0);cube->normal(-0.666667,0.333333,-0.666667);cube->textureCoord(1,1);
- cube->position(0.5,0.5,1.0);cube->normal(0.666667,0.333333,0.666667);cube->textureCoord(0,0);
- cube->triangle(0,1,2); cube->triangle(3,1,0);
- cube->triangle(4,5,6); cube->triangle(4,7,5);
- cube->triangle(8,9,10); cube->triangle(10,7,8);
- cube->triangle(4,11,12); cube->triangle(4,13,11);
- cube->triangle(14,8,12); cube->triangle(14,15,8);
- cube->triangle(16,17,18); cube->triangle(16,19,17);
- cube->end();
- SceneNode* mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
- mNode->setPosition(0,0.5,0);
- mNode->scale(40, 30, 40);
- mNode->attachObject(cube);
- mRaySceneQuery = mSceneMgr->createRayQuery(Ray());
- OgreBulletCollisions::CollisionShape *Shape;
- Shape = new OgreBulletCollisions::StaticPlaneCollisionShape(Ogre::Vector3(0,1,0), 0); // (normal vector, distance)
- OgreBulletDynamics::RigidBody *defaultPlaneBody = new OgreBulletDynamics::RigidBody(
- "BasePlane",
- mWorld);
- defaultPlaneBody->setStaticShape(Shape, 0, 1); // (shape, restitution, friction)
- // push the created objects to the deques
- mShapes.push_back(Shape);
- mBodies.push_back(defaultPlaneBody);
- }
- bool Player::isCollisioning()
- {
- Ogre::Ray ray(mSceneHead->getPosition(), Vector3(1));
- mRaySceneQuery->setRay(ray);
- Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute();
- Ogre::RaySceneQueryResult::iterator itr;
- for (itr = result.begin(); itr != result.end(); itr++) {
- if (itr->movable->getName().compare(mCameraPivot->getName())!=0 && itr->distance<30/2) {
- return true;
- }
- }
- return false;
- }
- bool Player::isOnGround()
- {
- return true;
- /*Ogre::Ray ray(mCameraPivot->getPosition(), Vector3::NEGATIVE_UNIT_Y);
- mRaySceneQuery->setRay(ray);
- Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute();
- Ogre::RaySceneQueryResult::iterator itr;
- for (itr = result.begin(); itr != result.end(); itr++) {
- if (itr->movable->getName().compare("Head2")!=0 && itr->distance <= 0) {
- return true;
- }
- }
- return false;*/
- }
- bool Player::isJumping()
- {
- return false;
- }
- void Player::updateWorld(const FrameEvent& evt)
- {
- mWorld->stepSimulation(evt.timeSinceLastFrame);
- }
- bool Player::update(const FrameEvent& evt)
- {
- //Need to capture/update each device
- mKeyboard->capture();
- // mMouse->capture();
- if(mKeyboard->isKeyDown(OIS::KC_ESCAPE))
- {
- return false;
- }
- Real speed;
- speed = PLAYER_MOVEMENT_SPEED;
- if(mKeyboard->isKeyDown(OIS::KC_SPACE) && mDefaultBody->getLinearVelocity().y == 0)
- {
- mDefaultBody->setLinearVelocity(
- Vector3(
- -50 * Math::Sin(Radian(mCameraNodeParentYaw->getOrientation().getYaw())),
- 50,
- -50 * Math::Cos(Radian(mCameraNodeParentYaw->getOrientation().getYaw()))));
- mDefaultBody->enableActiveState();
- if (mKeyboard->isKeyDown(OIS::KC_E))
- {
- /*mCurrentJump = new JumpKinetic(
- Vector3(
- -50 * Math::Sin(Radian(mCameraNodeParentYaw->getOrientation().getYaw())),
- 50,
- -50 * Math::Cos(Radian(mCameraNodeParentYaw->getOrientation().getYaw()))));*/
- }
- else
- {
- /*mCurrentJump = new JumpKinetic(Vector3(0, 50, 0));*/
- }
- }
- if(mKeyboard->isKeyDown(OIS::KC_B) && mTimeUntilNextToggle <=0)
- {
- Vector3 size = Vector3::ZERO; // size of the box
- // starting position of the box
- Vector3 position = (mCamera->getDerivedPosition() + mCamera->getDerivedDirection().normalisedCopy() * 10);
- // create an ordinary, Ogre mesh with texture
- Entity *entity = mSceneMgr->createEntity(
- "Box" + StringConverter::toString(mNumEntitiesInstanced),
- "ogrehead.mesh");
- entity->setCastShadows(true);
- // we need the bounding box of the box to be able to set the size of the Bullet-box
- AxisAlignedBox boundingB = entity->getBoundingBox();
- size = boundingB.getSize(); size /= 2.0f; // only the half needed
- size *= 0.96f; // Bullet margin is a bit bigger so we need a smaller size
- // (Bullet 2.76 Physics SDK Manual page 18)
- SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode();
- node->attachObject(entity);
- node->scale(0.4f, 0.4f, 0.4f); // the cube is too big for us
- size *= 0.4f; // don't forget to scale down the Bullet-box too
- // after that create the Bullet shape with the calculated size
- OgreBulletCollisions::BoxCollisionShape *sceneBoxShape = new OgreBulletCollisions::BoxCollisionShape(size);
- // and the Bullet rigid body
- OgreBulletDynamics::RigidBody* defaultBody = new OgreBulletDynamics::RigidBody(
- "defaultBoxRigid" + StringConverter::toString(mNumEntitiesInstanced),
- mWorld);
- defaultBody->setShape( node,
- sceneBoxShape,
- 0, // dynamic body restitution
- 1.0f, // dynamic body friction
- 1.0f, // dynamic bodymass
- position, // starting position of the box
- Quaternion(0,0,0,1));// orientation of the box
- mNumEntitiesInstanced++;
- defaultBody->setLinearVelocity(
- Vector3(10, 0, 10) ); // shooting speed
- // push the created objects to the deques
- mShapes.push_back(sceneBoxShape);
- mBodies.push_back(defaultBody);
- mTimeUntilNextToggle = 0.5;
- }
- mTimeUntilNextToggle -= evt.timeSinceLastFrame; // Pacha 4468-1268-6236
- if (mKeyboard->isKeyDown(OIS::KC_A))
- {
- mCameraNodeParentYaw->rotate(Quaternion(Degree(100*evt.timeSinceLastFrame), Vector3(0,1,0)), Node::TS_LOCAL);
- }
- if (mKeyboard->isKeyDown(OIS::KC_D))
- {
- mCameraNodeParentYaw->rotate(Quaternion(Degree(100*evt.timeSinceLastFrame), Vector3(0,-1,0)), Node::TS_LOCAL);
- }
- if (mKeyboard->isKeyDown(OIS::KC_W))
- {
- mCameraNodeParentPitch->rotate(Quaternion(Degree(100*evt.timeSinceLastFrame), Vector3(1,0,0)), Node::TS_LOCAL);
- }
- if (mKeyboard->isKeyDown(OIS::KC_S))
- {
- mCameraNodeParentPitch->rotate(Quaternion(Degree(100*evt.timeSinceLastFrame), Vector3(-1,0,0)), Node::TS_LOCAL);
- }
- Quaternion quat = mCameraNodeParentPitch->getOrientation();
- if (quat.getPitch() < CAMERA_PITCH_MAX)
- {
- mCameraNodeParentPitch->rotate(Quaternion(Degree(100*evt.timeSinceLastFrame), Vector3(1,0,0)), Node::TS_LOCAL);
- }
- else if(quat.getPitch() > CAMERA_PITCH_MIN)
- {
- mCameraNodeParentPitch->rotate(Quaternion(Degree(100*evt.timeSinceLastFrame), Vector3(-1,0,0)), Node::TS_LOCAL);
- }
- //mCamera->lookAt(mCameraPivot->_getDerivedPosition());
- Vector3 vector = Vector3::ZERO;
- if (mKeyboard->isKeyDown(OIS::KC_UP))
- {
- vector.z -= speed*evt.timeSinceLastFrame;
- }
- if (mKeyboard->isKeyDown(OIS::KC_DOWN))
- {
- vector.z += speed*evt.timeSinceLastFrame;
- }
- if (mKeyboard->isKeyDown(OIS::KC_RIGHT))
- {
- vector.x += speed*evt.timeSinceLastFrame;
- }
- if (mKeyboard->isKeyDown(OIS::KC_LEFT))
- {
- vector.x -= speed*evt.timeSinceLastFrame;
- }
- mCameraPivot->translate(mCameraNodeParentYaw->getOrientation() * vector, Node::TS_LOCAL);
- TextRenderer::getSingleton().printf("nigger", "Y: %f, y: %f", quat.getPitch().valueAngleUnits(), mDefaultBody->getLinearVelocity().y);
- // mCamera->lookAt(0, 0, 0);
- if (!isOnGround())
- {
- mCameraPivot->translate(0, -0.01, 0, Node::TS_LOCAL);
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement