void PlayState::CreationWolf(){ //Poner wolves int posH = 4; int H = -20; int V = 0; for (int i = 0; i < 19; ++i){ Entity *entity = NULL; std::stringstream uniqueName; uniqueName <<"wolf" << _numEntities; OBEntity *obentity = new OBEntity(uniqueName.str()); entity = _sceneMgr->createEntity(uniqueName.str(), "Lobo.mesh"); SceneNode *node = _sceneMgr->getRootSceneNode()-> createChildSceneNode(entity->getName()); node->attachObject(entity); node->yaw(Ogre::Degree(180)); obentity->setSceneNode(node); OgreBulletCollisions::StaticMeshToShapeConverter *trimeshConverter = NULL; OgreBulletCollisions::CollisionShape *bodyShape = NULL; OgreBulletDynamics::RigidBody *rigidBody = NULL; trimeshConverter = new OgreBulletCollisions::StaticMeshToShapeConverter(entity); bodyShape = trimeshConverter->createConvex(); delete trimeshConverter; obentity->setCollisionShape(bodyShape); rigidBody = new OgreBulletDynamics::RigidBody(uniqueName.str(), _world); rigidBody->setShape(node, bodyShape, 0.0 /* Restitucion */, 0.6 /* Friccion */, 150.0 /* Masa */, Ogre::Vector3(-70 + V, 0, H + posH), // 0,0,35 node->_getDerivedOrientation()/* Orientacion */); rigidBody->setLinearVelocity(Ogre::Vector3::ZERO); obentity->setRigidBody(rigidBody); _obEntities.push_back(obentity); _numEntities ++; posH = posH + 4; if(i ==9){ H = -20; posH = 6; V = -10; } } }
void PhysicsManager::addLevelGeometry( Ogre::Entity* levelEntity, const std::vector<OgreNewt::CollisionPtr> &collisions) { RlAssert1(levelEntity); RlAssert1(levelEntity->getParentSceneNode()); SceneNode* node = levelEntity->getParentSceneNode(); //Level entity has to be attached to a scene node. // try one compound collision for the entity if there are several collisions OgreNewt::CollisionPtr collision; switch( collisions.size() ) { case 0: break; case 1: collision = collisions[0]; break; default: collision = OgreNewt::CollisionPtr(new OgreNewt::CollisionPrimitives::CompoundCollision(mWorld, collisions, 0)); break; } if( collision ) { OgreNewt::Body* body = new OgreNewt::Body(mWorld, collision ); body->attachNode(node); body->setPositionOrientation(node->_getDerivedPosition(), node->_getDerivedOrientation()); body->setMaterialGroupID(getMaterialID("level")); mLevelBodiesQuadTree.add(body); //mLevelBodies.push_back(body); } // adjust worldAABB Vector3 minV(mWorldAABB.getMinimum()); Vector3 maxV(mWorldAABB.getMaximum()); AxisAlignedBox entityAABB = levelEntity->getWorldBoundingBox(true); minV.makeFloor(entityAABB.getMinimum()); maxV.makeCeil(entityAABB.getMaximum()); mWorldAABB.setMinimum(minV - Vector3(50, 50, 50)); mWorldAABB.setMaximum(maxV + Vector3(50, 50, 50)); mWorld->setWorldSize(mWorldAABB); }
void ControllerInput::Tick(double Tick, double Span) { if (!IsInitialized) return; /********************* READ INPUT *********************/ /* This will raise the event handlers */ /******************************************************/ if (!oisKeyboard || !oisMouse) return; oisKeyboard->capture(); oisMouse->capture(); /********************* EXIT CASES *********************/ /* Don't go on if any of these match */ /******************************************************/ if (OgreClient::Singleton->Data->IsWaiting || !OgreClient::Singleton->RenderWindow || !OgreClient::Singleton->RenderWindow->isVisible() || !OgreClient::Singleton->RenderWindow->isActive() || !OgreClient::Singleton->HasFocus || Avatar == nullptr || Avatar->SceneNode == nullptr) return; /*************** SELF TARGET MODIFIER *****************/ /* Process keydown of some specific keys */ /******************************************************/ // update flag whether selftarget modifier key is down OgreClient::Singleton->Data->SelfTarget = IsSelfTargetDown; /****************** CAMERA PITCH/YAW ******************/ /* Apply frame-based smooth camera pitch/yaw */ /******************************************************/ SceneNode* cameraNode = OgreClient::Singleton->CameraNode; Camera* camera = OgreClient::Singleton->Camera; if (cameraNode && camera) { // get cameranode orientation Quaternion orientation = cameraNode->_getDerivedOrientation(); // save/update current pitch and yaw values cameraPitchCurrent = orientation.getPitch().valueRadians(); cameraYawCurrent = orientation.getYaw().valueRadians(); // calculate new pitch and yaw values for this step/frame float destPitch = cameraPitchCurrent + cameraPitchStep; float destYaw = cameraYawCurrent + cameraYawStep; // 1. PITCH if (cameraPitchDelta != 0.0f) { // apply pitchstep on camera cameraNode->pitch(Radian(-cameraPitchStep)); // verify pitchover Quaternion orientation = cameraNode->_getDerivedOrientation(); float pitchOver = orientation.getPitch().valueRadians(); // don't allow overpitching, so pitch back possibly if (pitchOver >= Math::HALF_PI || pitchOver <= -Math::HALF_PI) { cameraNode->pitch(Radian(cameraPitchStep)); cameraPitchDelta = 0.0f; cameraPitchStep = 0.0f; } else if (cameraPitchDelta > 0.0f) { cameraPitchDelta -= cameraPitchStep; cameraPitchDelta = ::System::Math::Max(cameraPitchDelta, 0.0f); } else if (cameraPitchDelta < 0.0f) { cameraPitchDelta -= cameraPitchStep; cameraPitchDelta = ::System::Math::Min(cameraPitchDelta, 0.0f); } } // 2. YAW if (cameraYawDelta != 0.0f) { // apply yawstep on camera cameraNode->yaw(Radian(-cameraYawStep), Node::TransformSpace::TS_WORLD); if (cameraYawDelta > 0.0f) { cameraYawDelta -= cameraYawStep; cameraYawDelta = ::System::Math::Max(cameraYawDelta, 0.0f); } else if (cameraYawDelta < 0.0f) { cameraYawDelta -= cameraYawStep; cameraYawDelta = ::System::Math::Min(cameraYawDelta, 0.0f); } } // 3. ZOOM if (cameraZDelta != 0.0f) { float destZ = camera->getPosition().z - cameraZStep; // if (destZ > 0.0f) { // mark as 3. person camera mode IsCameraFirstPerson = false; // hide 1. person overlays ControllerUI::PlayerOverlays::HideOverlays(); // apply the move camera->moveRelative(::Ogre::Vector3(0.0f, 0.0f, -cameraZStep)); camera->_notifyMoved(); if (cameraZDelta > 0.0f) { cameraZDelta -= cameraZStep; cameraZDelta = ::System::Math::Max(cameraZDelta, 0.0f); } else if (cameraZDelta < 0.0f) { cameraZDelta -= cameraZStep; cameraZDelta = ::System::Math::Min(cameraZDelta, 0.0f); } } else { // mark as 1. person camera mode IsCameraFirstPerson = true; // show 1. person overlays ControllerUI::PlayerOverlays::ShowOverlays(); // apply the move to the 0.0f camera->moveRelative(::Ogre::Vector3(0.0f, 0.0f, -cameraZStep - destZ)); camera->_notifyMoved(); cameraZDelta = 0.0f; } } } /********************* AVATAR YAW *********************/ /* Apply frame-based smooth avatar yaw */ /******************************************************/ // YAW if (avatarYawDelta != 0.0f) { // apply yawstep on avatar OgreClient::Singleton->TryYaw(avatarYawStep); if (avatarYawDelta > 0.0f) { avatarYawDelta -= avatarYawStep; avatarYawDelta = ::System::Math::Max(avatarYawDelta, 0.0f); } else if (avatarYawDelta < 0.0f) { avatarYawDelta -= avatarYawStep; avatarYawDelta = ::System::Math::Min(avatarYawDelta, 0.0f); } } /********************* MOVEMENT INPUT *****************/ /* left, right, up, down keys or both mouse buttons */ /******************************************************/ bool isMoveByMouseOrKeysNotUsedByUI = (IsMovementInput && (IsBothMouseDown || !ControllerUI::ProcessingInput)); if (isAutoMove || isMoveByMouseOrKeysNotUsedByUI) { // get movespeed based on walk-modifier key MovementSpeed speed = (IsWalkKeyDown) ? MovementSpeed::Walk : MovementSpeed::Run; // get movement direction vector V2 direction = GetMoveVector(); // get the height of the avatar in ROO format float playerheight = 0.9f * 16.0f * Avatar->SceneNode->_getWorldAABB().getSize().y; // try to do the move (might get blocked) OgreClient::Singleton->TryMove(direction, (unsigned char)speed, playerheight); } /************** KEYBOARD ONLY FROM HERE ON ************/ /* exit if UI is reading it */ /******************************************************/ if (ControllerUI::ProcessingInput) return; /******************** ROTATION KEYS *******************/ /* rotate left/right by keyboard */ /******************************************************/ // Update Angle in dataobject and possibly send a update packet if (IsRotateKeyDown) { // scaled base delta float diff = KEYROTATESPEED * (float)OgreClient::Singleton->Config->KeyRotateSpeed * (float)OgreClient::Singleton->GameTick->Span; // half rotation speed on walk if (IsWalkKeyDown) diff *= 0.5f; // left if (OISKeyboard->isKeyDown(ActiveKeyBinding->RotateLeft)) { // try to yaw and yaw camera back internally if suceeded if (OgreClient::Singleton->TryYaw(-diff) && IsLeftMouseDown && !isMouseWentDownOnUI) cameraNode->yaw(Radian(-diff), Node::TransformSpace::TS_WORLD); } // right if (OISKeyboard->isKeyDown(ActiveKeyBinding->RotateRight)) { // try to yaw and yaw camera back internally if suceeded if (OgreClient::Singleton->TryYaw(diff) && IsLeftMouseDown && !isMouseWentDownOnUI) cameraNode->yaw(Radian(diff), Node::TransformSpace::TS_WORLD); } } /**************** ACTION BUTTON KEYS ******************/ /* these will trigger the defined actions */ /******************************************************/ ActionButtonList^ actionButtons = OgreClient::Singleton->Data->ActionButtons; if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton01)) actionButtons[0]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton02)) actionButtons[1]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton03)) actionButtons[2]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton04)) actionButtons[3]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton05)) actionButtons[4]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton06)) actionButtons[5]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton07)) actionButtons[6]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton08)) actionButtons[7]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton09)) actionButtons[8]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton10)) actionButtons[9]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton11)) actionButtons[10]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton12)) actionButtons[11]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton13)) actionButtons[12]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton14)) actionButtons[13]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton15)) actionButtons[14]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton16)) actionButtons[15]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton17)) actionButtons[16]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton18)) actionButtons[17]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton19)) actionButtons[18]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton20)) actionButtons[19]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton21)) actionButtons[20]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton22)) actionButtons[21]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton23)) actionButtons[22]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton24)) actionButtons[23]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton25)) actionButtons[24]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton26)) actionButtons[25]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton27)) actionButtons[26]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton28)) actionButtons[27]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton29)) actionButtons[28]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton30)) actionButtons[29]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton31)) actionButtons[30]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton32)) actionButtons[31]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton33)) actionButtons[32]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton34)) actionButtons[33]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton35)) actionButtons[34]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton36)) actionButtons[35]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton37)) actionButtons[36]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton38)) actionButtons[37]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton39)) actionButtons[38]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton40)) actionButtons[39]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton41)) actionButtons[40]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton42)) actionButtons[41]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton43)) actionButtons[42]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton44)) actionButtons[43]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton45)) actionButtons[44]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton46)) actionButtons[45]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton47)) actionButtons[46]->Activate(); if (oisKeyboard->isKeyDown(ActiveKeyBinding->ActionButton48)) actionButtons[47]->Activate(); };