当前位置: 首页>>代码示例>>C++>>正文


C++ Ship::GetPosition方法代码示例

本文整理汇总了C++中Ship::GetPosition方法的典型用法代码示例。如果您正苦于以下问题:C++ Ship::GetPosition方法的具体用法?C++ Ship::GetPosition怎么用?C++ Ship::GetPosition使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Ship的用法示例。


在下文中一共展示了Ship::GetPosition方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Update

void Chaser::Update()
{
    bool before = IsOnScreen();

    if ( _timer )
        _timer--;
    if ( _timer <= 0 ) {
        _timer = TIME * ( _move + 1 );
        _move = !_move;
        if ( _move ) {
            Ship* p = GetNearestPlayer();
            _dir = p->GetPosition() - GetPosition();
            _dir.Normalise();
            _dir *= SPEED;
        }
    }
    if ( _move ) {
        Move( _dir );
        if ( !before && IsOnScreen() ) {
            _move = false;
        }
    }
    else {
        Rotate( M_PT_ONE );
    }
}
开发者ID:grandseiken,项目名称:iispace,代码行数:26,代码来源:enemy.cpp

示例2: l_ship_get_position

/*
 * Method: GetPosition
 *
 * Get the ships position
 *
 * > ship:GetPosition()
 *
 * Availability:
 *
 *  April 2016
 *
 * Status:
 *
 *  experimental
 */
static int l_ship_get_position(lua_State *l)
{
	Ship *s = LuaObject<Ship>::CheckFromLua(1);
	vector3d v = s->GetPosition();
	lua_newtable(l);
	pi_lua_settable(l, "x", v.x);
	pi_lua_settable(l, "y", v.y);
	pi_lua_settable(l, "z", v.z);
	return 1;
}
开发者ID:walterar,项目名称:pioneer-sp,代码行数:25,代码来源:LuaShip.cpp

示例3: OnCollision

bool SpaceStation::OnCollision(Object *b, Uint32 flags, double relVel)
{
	if ((flags & 0x10) && (b->IsType(Object::SHIP))) {
		Ship *s = static_cast<Ship*>(b);

		int port = -1;
		for (int i=0; i<MAX_DOCKING_PORTS; i++) {
			if (m_shipDocking[i].ship == s) { port = i; break; }
		}
		if (port == -1) return false;					// no permission
		if (!m_type->dockOneAtATimePlease) {
			if (port != int(flags & 0xf)) return false;		// wrong port
		}
		if (m_shipDocking[port].stage != 1) return false;	// already docking?

		SpaceStationType::positionOrient_t dport;
		// why stage 2? Because stage 1 is permission to dock
		// granted, stage 2 is start of docking animation.
		PiVerify(m_type->GetDockAnimPositionOrient(port, 2, 0.0, vector3d(0.0), dport, s));

		// must be oriented sensibly and have wheels down
		if (IsGroundStation()) {
			vector3d dockingNormal = GetOrient()*dport.yaxis;
			const double dot = s->GetOrient().VectorY().Dot(dockingNormal);
			if ((dot < 0.99) || (s->GetWheelState() < 1.0)) return false;	// <0.99 harsh?
			if (s->GetVelocity().Length() > MAX_LANDING_SPEED) return false;
		}

		// if there is more docking port anim to do, don't set docked yet
		if (m_type->numDockingStages >= 2) {
			shipDocking_t &sd = m_shipDocking[port];
			sd.ship = s;
			sd.stage = 2;
			sd.stagePos = 0;
			sd.fromPos = (s->GetPosition() - GetPosition()) * GetOrient();	// station space
			sd.fromRot = Quaterniond::FromMatrix3x3(GetOrient().Transpose() * s->GetOrient());
			if (m_type->dockOneAtATimePlease) m_dockingLock = true;

			s->SetFlightState(Ship::DOCKING);
			s->SetVelocity(vector3d(0.0));
			s->SetAngVelocity(vector3d(0.0));
			s->ClearThrusterState();
		} else {
			s->SetDockedWith(this, port);				// bounces back to SS::SetDocked()
			LuaEvent::Queue("onShipDocked", s, this);
		}
		return false;
	} else {
		return true;
	}
}
开发者ID:abramhindle,项目名称:pioneer,代码行数:51,代码来源:SpaceStation.cpp

示例4: OnCollision

bool SpaceStation::OnCollision(Object *b, Uint32 flags, double relVel)
{
	if ((flags & 0x10) && (b->IsType(Object::SHIP))) {
		Ship *s = static_cast<Ship*>(b);
		matrix4x4d rot;
		GetRotMatrix(rot);

		bool canDock = true;
		int port = -1;
		for (int i=0; i<MAX_DOCKING_PORTS; i++) {
			if (m_shipDocking[i].ship == s) { port = i; break; }
		}
		if (m_type->dockOneAtATimePlease) {
			for (int i=0; i<m_type->numDockingPorts; i++) {
				if (m_shipDocking[i].ship && m_shipDocking[i].stage != 1 &&
				    (m_shipDocking[i].stage != m_type->numDockingStages+1)) {
					canDock = false;
					break;
				}
			}
		} else {
			// for non-dockOneAtATimePlease, the ship is expected
			// to hit the right docking trigger surface for that port
			if (m_shipDocking[flags&0xf].ship != s) canDock = false;
		}
		if (port == -1) canDock = false;

		// hitting docking area of a station
		if (canDock) {
			SpaceStationType::positionOrient_t dport;
			// why stage 2? Because stage 1 is permission to dock
			// granted, stage 2 is start of docking animation.
			PiVerify(m_type->GetDockAnimPositionOrient(port, 2, 0.0f, vector3d(0.0), dport, s));

			double speed = s->GetVelocity().Length();

			// must be oriented sensibly and have wheels down
			if (IsGroundStation()) {
				matrix4x4d shiprot;
				s->GetRotMatrix(shiprot);
				matrix4x4d invShipRot = shiprot.InverseOf();

				vector3d dockingNormal = rot*dport.yaxis;

				// check player is sortof sensibly oriented for landing
				const double dot = vector3d(invShipRot[1], invShipRot[5], invShipRot[9]).Dot(dockingNormal);
				if ((dot < 0.99) || (s->GetWheelState() < 1.0)) return false;
			}

			if ((speed < MAX_LANDING_SPEED) &&
			    (!s->GetDockedWith()) &&
			    (m_shipDocking[port].stage == 1)) {
				// if there is more docking port anim to do,
				// don't set docked yet
				if (m_type->numDockingStages >= 2) {
					shipDocking_t &sd = m_shipDocking[port];
					sd.ship = s;
					sd.stage = 2;
					sd.stagePos = 0;
					sd.fromPos = rot.InverseOf() * (s->GetPosition() - GetPosition());
					matrix4x4d temp;
					s->GetRotMatrix(temp);
					sd.fromRot = Quaterniond::FromMatrix4x4(temp);
					s->Disable();
					s->ClearThrusterState();
					s->SetFlightState(Ship::DOCKING);
				} else {
					s->SetDockedWith(this, port);
					LuaEvent::Queue("onShipDocked", s, this);
				}
			}
		}
		return false;
	} else {
		return true;
	}
}
开发者ID:Nikoraito,项目名称:pioneer,代码行数:77,代码来源:SpaceStation.cpp

示例5: ProcessControls

void PlayerController::ProcessControls()
{
	if(Game->GetCurrentMode() == GM_PLAY)
	{
		Ship *ship = (Ship *)SM->GetSceneByName("Main")->GetEntityByName("Player")->GetMeshByName("Player Ship");
		Plane *lengine = (Plane *)SM->GetSceneByName("Main")->GetEntityByName("Player")->GetMeshByName("LEngine");
		Plane *rengine = (Plane *)SM->GetSceneByName("Main")->GetEntityByName("Player")->GetMeshByName("REngine");
		float magnitude = sqrtf(pow(GetMouseX()-ship->GetPosition().x,2)+pow(GetMouseY()-ship->GetPosition().y,2));
		glm::vec3 dir = glm::vec3((GetMouseX()-ship->GetPosition().x),(GetMouseY()-ship->GetPosition().y),0)/magnitude;
		float rotSpeed=10.0f;
		float maxspeed = 12.0f;
		float acceleration = 0.5f;
		glm::vec3 vel = ship->GetThrottle();
		float accelerating = lengine->GetScale().x;
	
		if(keys[SDLK_RIGHT]) // If the right arrow key is pressed
		{
			ship->Rotate(glm::vec3(0.0f,0.0f,+rotSpeed));			// Rotate the ship clockwise
		}
	
		if(keys[SDLK_LEFT]) // If the right arrow key is pressed
		{
			ship->Rotate(glm::vec3(0.0f,0.0f,-rotSpeed));									// Rotate the ship clockwise
		}

		if(keys['w'])
		{
			if(magnitude > -maxspeed)	// If the throttle is less than max
			{
				vel += 0.5f*dir*acceleration;
			}
			else
			{
				vel -= maxspeed;
			}

			if(accelerating < 1.0f)
				accelerating += .05f;
			else
				accelerating = 1.0f;
		}
		else
		{
			if(accelerating > 0)
				accelerating -= .05f;
			else
				accelerating = 0.0f;
		}

		if(vel.x > 0 && vel.x < 0.1f)	// If the throttle is close to zero
		{
			vel.x=0;											// Go ahead and set it to zero (no need to waste fuel)
		}
		if(vel.y > 0 && vel.y < 0.1f)	// If the throttle is close to zero
		{
			vel.y=0;											// Go ahead and set it to zero (no need to waste fuel)
		}
		
		if(vel.x < 0 && vel.x > -0.1f)	// If the throttle is close to zero
		{
			vel.x=0;											// Go ahead and set it to zero (no need to waste fuel)
		}
		if(vel.y < 0 && vel.y > -0.1f)	// If the throttle is close to zero
		{
			vel.y=0;											// Go ahead and set it to zero (no need to waste fuel)
		}
		
		glm::vec3 pos = ship->GetPosition();
		
		if(pos.x > WM->GetWindowWidth()+16.0f)
		{
			pos.x = -16.0f;
			ship->SetPosition(pos);
		}
		else if(pos.x < -16.0f)
		{
			pos.x = WM->GetWindowWidth()+16.0f;
			ship->SetPosition(pos);
		}

		if(pos.y > WM->GetWindowHeight()+16.0f)
		{
			pos.y = -16.0f;
			ship->SetPosition(pos);
		}
		else if(pos.y < -16.0f)
		{
			pos.y = WM->GetWindowHeight()+16.0f;
			ship->SetPosition(pos);
		}

		ship->SetThrottle(vel);
		ship->Translate(vel);
		pos = ship->GetPosition();

		glm::vec3 rot = glm::vec3(0,0,-(atan2(mouse_x-pos.x,mouse_y-pos.y)+3.14159)*180/3.14159);
		ship->SetRotation(rot);

		if(!lengine || !rengine)
			return;
//.........这里部分代码省略.........
开发者ID:Rocks25,项目名称:Voa,代码行数:101,代码来源:PlayerController.cpp

示例6: l_ship_get_position

/*
 * Method: GetPosition
 *
 * Get the ships velocity
 *
 * > ship:GetPosition()
 *
 * Availability:
 *
 *  April 2016
 *
 * Status:
 *
 *  experimental
 */
static int l_ship_get_position(lua_State *l)
{
    Ship *s = LuaObject<Ship>::CheckFromLua(1);
    LuaVector::PushToLua(l, s->GetPosition());
    return 1;
}
开发者ID:demolitions,项目名称:pioneer,代码行数:21,代码来源:LuaShip.cpp


注:本文中的Ship::GetPosition方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。