/* newObject Given the object's layer, position, starting velocity and type, create it , but do not put it in the object container. Returns a pointer to the object. NOTE: This is a private function. When other objects want to create objects, they should use the public function obj_spawnObj() */ Object * newObject(int layer, Point pos, Velocity vel, int type) { extern SpriteSet sprite_set; extern struct obj_att_define *obj_defs[]; Object *obj; MALLOC(obj, sizeof(Object)); /* Set the position and velocity */ obj->pos = pos; obj->layer = layer; obj->vel = vel; /* Its fine coordinate values are 0 to start */ obj->fine_x = 0.0; obj->fine_y = 0.0; /* Set bounds to NULL just in case the object does not create any. */ obj->bounds = NULL; /* Initialize the signal queue */ sig_initQ(&obj->signals); /* The object is not to be killed yet: */ obj->dead = 0; /* Objects go in linked lists */ obj->next = NULL; /* Do type-specific initialization */ obj->type = type; /* obj_data.c contains an array of pointers to object definition structures which each object-type .c file contains */ obj->mass = obj_defs[type]->mass; obj->elasticity = obj_defs[type]->elasticity; obj->friction = obj_defs[type]->friction; obj->solid = obj_defs[type]->solid; obj->w = obj_defs[type]->w; obj->h = obj_defs[type]->h; obj_setSprite(obj_defs[type]->sprite, obj); obj_setAnim(obj_defs[type]->animation, obj); obj->bounds = obj_defs[type]->bounds(); obj->atts = obj_defs[type]->init_atts(); obj->go = obj_defs[type]->go; obj->free_atts = obj_defs[type]->free_atts; /* Special: If this is the player, save a pointer to it */ if (obj->type == PLAYER_TYPE) setPlayerPtr(obj); return obj; }
/*---------------------------------------------------------------------------------*/ void CameraHandler::initCameraHandler(Ogre::Camera* cam, OGRE3DRenderSystem* renderSystem,Ogre::SceneManager* mmvpSceneMgr , Player* p) { mvpCam = cam; mvpSceneMgr = mmvpSceneMgr; //Gett settings from the settings class. mvpRotate = &Settings::getSingletonPtr()->mCamRotate; mvpZoom = &Settings::getSingletonPtr()->mCamZoom; mvpCamVelocityY = &Settings::getSingletonPtr()->mCamVelocityY; mvpCamVelocityXZ = &Settings::getSingletonPtr()->mCamVelocityXZ; mvpCamHeightMaxY = &Settings::getSingletonPtr()->mCamHeightMaxY; mvpCamHeightMinY = &Settings::getSingletonPtr()->mCamHeightMinY; mvpCamDistanceMax = &Settings::getSingletonPtr()->mCamDistanceMax; mvpCamDistanceMin = &Settings::getSingletonPtr()->mCamDistanceMin; mvpCamCharYAdjust = &Settings::getSingletonPtr()->mCamCharYAdjust; mvpCamGunTrackerOffsetX = &Settings::getSingletonPtr()->mCamGunTrackerOffsetX; mvpCamGunTrackerOffsetY = &Settings::getSingletonPtr()->mCamGunTrackerOffsetY; mvpCamGunTrackerOffsetZ = &Settings::getSingletonPtr()->mCamGunTrackerOffsetZ; mvScreenWidth = GameFramework::getSingletonPtr()->mpRenderWnd->getWidth(); mvScreenHeight = GameFramework::getSingletonPtr()->mpRenderWnd->getHeight(); //All the nodes that is going to be used mvpCamNoCollisionNode = mvpSceneMgr->getSceneNode("CamNoCollisionNode"); mvpCamCollisionNode = mvpSceneMgr->getSceneNode("CamCollisionNode"); mvpCamHelperNode = mvpSceneMgr->getSceneNode("CamHelperNode"); mvpCamOrginNode = mvpSceneMgr->getSceneNode("CamOrginNode"); mvpCharNode = mvpSceneMgr->getSceneNode("CharNode"); mvpCamFirstPersonNode = mvpSceneMgr->getSceneNode("CamFirstPersonNode"); mvpFirstPersonGunTrackerNode = mvpSceneMgr->getSceneNode("FirstPersonGunTrackerNode"); mvpCamGunMoveNode = mvpSceneMgr->getSceneNode("CamMoveNode"); mvpCamGunMoveHelperNode = mvpSceneMgr->getSceneNode("CamMoveHelperNode"); mvpCamGunCenterNode = mvpSceneMgr->getSceneNode("CamCenterNode"); mvpCamGunCenterHelperNode = mvpSceneMgr->getSceneNode("CamCenterHelperNode"); mvpCursorMovableGunTrackerNode = mvpSceneMgr->getSceneNode("GunTrackNode"); setPlayerPtr(p); mvCamMode = NULL; setCamMode(Game::Cam_ThirdPerson); mvPitchTrackerThirdPerson = 0; mvPitchTrackerSemiThirdPerson = 0; mvPitchTrackerFirstPerson = 0; //Create sphere for collision //Properties NxOgre::RigidBodyDescription descriptionSphere; descriptionSphere.mBodyFlags |= NxOgre::Enums::BodyFlags_DisableGravity; descriptionSphere.mBodyFlags |= NxOgre::Enums::BodyFlags_FreezeRotation; descriptionSphere.mMass = *Settings::getSingletonPtr()->mCamMass; descriptionSphere.mDensity = 0; descriptionSphere.mLinearDamping = *Settings::getSingletonPtr()->mCamLinearDamping; descriptionSphere.mAngularDamping = *Settings::getSingletonPtr()->mCamAngularDamping; /*Create it. cube1m mesh wont show anyway. NxOgre::Vec3(0,2,3) indicates the camera position*/ //@todo spawn at player mvpCamSphere = renderSystem->createBody(new NxOgre::Sphere(*Settings::getSingletonPtr()->mCamRadius), NxOgre::Vec3(Settings::getSingletonPtr()->mCamStartPosX,Settings::getSingletonPtr()->mCamStartPosY,Settings::getSingletonPtr()->mCamStartPosZ)+NxOgre::Vec3(Ogre::Vector3 (*Settings::getSingletonPtr()->mPlayerSpawnPointX,*Settings::getSingletonPtr()->mPlayerSpawnPointY,*Settings::getSingletonPtr()->mPlayerSpawnPointZ)), "cube.1m.mesh", descriptionSphere); mvpCamSphere->getEntity()->setVisible(false); //Set Collision Flag to group 2 NxShape* const* s2 = mvpCamSphere->getNxActor()->getShapes(); (*s2)->setGroup(2); }