Welcome to the new Ogre Wiki!
If you haven't done so already, be sure to visit the Wiki Portal to read about how the wiki works. Especially the Ogre Wiki Overview page.
If you haven't done so already, be sure to visit the Wiki Portal to read about how the wiki works. Especially the Ogre Wiki Overview page.
This is OgreOde SimpleScene 8, OgreOde Walking Character
How to use it:
- open your Demo_SimpleScenes and add new header file: SimpleScenes_Ninja.h
save it in demos\SimpleScenes\include
#ifndef _SIMPLESCENES_NINJA_H_ #define _SIMPLESCENES_NINJA_H_ class SimpleScenes_Ninja:public SimpleScenes { public: SimpleScenes_Ninja(OgreOde::World *world) : SimpleScenes(world) { Entity* hero_ent = _mgr->createEntity("ninja","ninja.mesh"); SceneNode* hero_node = _mgr->getRootSceneNode()->createChildSceneNode("ninja"); hero_node->attachObject(hero_ent); hero_node->scale(0.01,0.01,0.01); AxisAlignedBox aab = hero_node->getAttachedObject("ninja")->getBoundingBox(); Ogre::Vector3 min = aab.getMinimum()*hero_node->getScale(); Ogre::Vector3 max = aab.getMaximum()*hero_node->getScale(); Ogre::Vector3 center = aab.getCenter()*hero_node->getScale(); Ogre::Vector3 size(fabs(max.x-min.x),fabs(max.y-min.y),fabs(max.z-min.z)); float radius = (size.x>size.z)?size.z/2.0f:size.x/2.0f; OgreOde::Body* dollFeetBody = new OgreOde::Body(_world,"feet"); dollFeetBody->setMass(OgreOde::SphereMass(70*2.5,radius)); OgreOde::SphereGeometry* feetGeom = new OgreOde::SphereGeometry(radius,_world); OgreOde::TransformGeometry* feetTrans = new OgreOde::TransformGeometry(_world,_space); feetTrans->setBody(dollFeetBody); feetTrans->setEncapsulatedGeometry(feetGeom); hero_node->attachObject(dollFeetBody); _feet = dollFeetBody; _bodies.push_back(_feet); _geoms.push_back(_feet->getGeometry(0)); OgreOde::Body* dollTorsoBody = new OgreOde::Body(_world,"torso"); dollTorsoBody->setMass(OgreOde::CapsuleMass(70*2.5,radius,Vector3::UNIT_Y,radius)); dollTorsoBody->setAffectedByGravity(false); OgreOde::TransformGeometry* torsoTrans = new OgreOde::TransformGeometry(_world,_space); OgreOde::CapsuleGeometry* torsoGeom = new OgreOde::CapsuleGeometry(radius,size.y-4*radius,_world); torsoGeom->setPosition(Ogre::Vector3(0,size.y-((size.y-4*radius)/2+2*radius),0)); torsoGeom->setOrientation(Quaternion(Degree(90),Vector3::UNIT_X)); torsoTrans->setBody(dollTorsoBody); torsoTrans->setEncapsulatedGeometry(torsoGeom); hero_node->attachObject(dollTorsoBody); _torso = dollTorsoBody; _bodies.push_back(_torso); _geoms.push_back(_torso->getGeometry(0)); OgreOde::HingeJoint* joint = new OgreOde::HingeJoint(_world); joint->attach(dollTorsoBody,dollFeetBody); joint->setAxis(Ogre::Vector3::UNIT_X); _joints.push_back(joint); } virtual ~SimpleScenes_Ninja(){} virtual void frameEnded(Real time, OIS::Keyboard* input, OIS::Mouse* mouse) { SimpleScenes::frameEnded(time, input, mouse); _ninja_rotate = 0; if (input->isKeyDown(KC_J)) _ninja_rotate += -1; if (input->isKeyDown(KC_L)) _ninja_rotate += 1; _ninja_thrust = 0; if (input->isKeyDown(KC_I)) _ninja_thrust += -1; if (input->isKeyDown(KC_K)) _ninja_thrust += 1; if (_ninja_rotate == 0) { _feet->wake(); _feet->setAngularVelocity(Vector3(_feet->getAngularVelocity().x,0,0)); } else { _feet->wake(); Quaternion q1 = _torso->getOrientation(); Quaternion q2(Degree(-4*_ninja_rotate),Ogre::Vector3::UNIT_Y); _torso->setOrientation(q1*q2); } if (_ninja_thrust == 0) { _feet->wake(); _feet->setLinearVelocity(Vector3(0,_feet->getLinearVelocity().y,0)); _feet->setAngularVelocity(Vector3(0,_feet->getAngularVelocity().y,0)); } else { float speed = 30; _feet->wake(); Quaternion q = _torso->getOrientation(); _feet->setAngularVelocity(q*Ogre::Vector3(speed*_ninja_thrust*cos(1.0),_feet->getAngularVelocity().y,0)); } Quaternion q = _torso->getOrientation(); Vector3 x = q.xAxis(); Vector3 y = q.yAxis(); Vector3 z = q.zAxis(); _torso->wake(); _torso->setOrientation(Quaternion(x,Vector3::UNIT_Y,z)); _torso->setAngularVelocity(Vector3(0,0,0)); OgreOde::Body* body = 0; if (input->isKeyDown(KC_Z)) body = createRandomObject(OgreOde::Geometry::Class_Sphere); else if (input->isKeyDown(KC_X)) body = createRandomObject(OgreOde::Geometry::Class_Box); else if (input->isKeyDown(KC_C)) body = createRandomObject(OgreOde::Geometry::Class_Capsule); else if (input->isKeyDown(KC_T)) body = createRandomObject(OgreOde::Geometry::Class_TriangleMesh); } virtual const String& getName() { static String name = "Ninja Walking Character"; return name; } virtual const String& getKeys() { static String keys = "IJKL - move character Z-sphere X-box C-capsule T-trimesh"; return keys; } protected: OgreOde::Body *_hero; OgreOde::Body *_feet; OgreOde::Body *_torso; int _ninja_rotate,_ninja_thrust; }; #endif
- open SimpleScenesApplication.cpp and add
{CODE(wrap="1", colors="c++")} #include "SimpleScenes_Ninja.h"{CODE} * in the same file find this: else if (myInput->isKeyDown(KC_F7)) { delete _test; _test = new SimpleScenes_Zombie(_world); changed = true; }
- and change to this:
else if (myInput->isKeyDown(KC_F7)) { delete _test; _test = new SimpleScenes_Zombie(_world); changed = true; } else if (myInput->isKeyDown(KC_F8)) { delete _test; _test = new SimpleScenes_Ninja(_world); changed = true; }
- compile&run
- press f8 to run ninja simple scene
This is just code of OgreOde Walking Character rewriten to SimpleScene and last Ogre&OgreOde
Write by Radsun
Thx to rewb0rn
Alias: Ninja_Walking_Character
Contributors to this page: jacmoe
and
OgreWikiBot
.
Page last modified on Saturday 10 of July, 2010 15:58:15 UTC by jacmoe
.
The content on this page is licensed under the terms of the Creative Commons Attribution-ShareAlike License.
As an exception, any source code contributed within the content is released into the Public Domain.
Sidebar
Search box
Online users
67
online users

