Beispiel #1
0
/* 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);
}