コード例 #1
0
ファイル: pWheel2.cpp プロジェクト: gbaumgart/vt
float pWheel2::getRpm() const
{

	float a = NxMath::abs(mWheelShape->getAxleSpeed())/NxTwoPi * 60.0f;
	if (getVehicle())
	{

		float b = NxMath::abs(mWheelShape->getAxleSpeed())/NxTwoPi * getVehicle()->_lastDT;
		return  b;
	}
	
	return NxMath::abs(mWheelShape->getAxleSpeed())/NxTwoPi * 60.0f;
}
コード例 #2
0
void State_LeaveCurbside::Execute( CARCportEngine* pEngine )
{
	if(m_bOutPath)
	{	
		return getVehicle()->ChangeStateMoveToDest(pEngine);
	}
	//finding leave position 
	LandsidePosition exitPos;
	if(m_pCurb->getParkingSpot().FindLeavePosition(getVehicle(), m_spot, exitPos) )
	{
		LandsideLaneInSim* plane = exitPos.pRes->toLane();
		DistanceUnit distF = exitPos.distInRes - getVehicle()->GetHalfLength();
		DistanceUnit distT = exitPos.distInRes + getVehicle()->GetHalfLength();

		if(plane->isSpaceEmpty(getVehicle(), distF,distT))
		{
			double dSpeed = getVehicle()->getSpeed(plane, exitPos.distInRes);
			MobileState lastState = m_pOwner->getLastState();
			lastState.pos = exitPos.pos;
			lastState.pRes = plane;
			lastState.distInRes = exitPos.distInRes-1;
			lastState.dSpeed = dSpeed*0.5;
			m_pOwner->MoveToPos(lastState);	

			lastState.distInRes = exitPos.distInRes;
			m_pOwner->MoveToPos(lastState);

			m_bOutPath = true;
			return getVehicle()->Continue();
		}							
	}	
	return getVehicle()->StepTime(pEngine);
}
コード例 #3
0
void State_TryParkingCurbside::Entry( CARCportEngine* pEngine )
{
	CurbsideStrategyStateInSim* pStragy = getVehicle()->getCurbStragy();
	if(!pStragy)
	{
		pStragy = getVehicle()->BeginCurbStrategy(m_pCurb->getName(),pEngine);
	}
	ElapsedTime maxWaitSpotTime(12*3600L);
	if(pStragy)
	{
		maxWaitSpotTime = pStragy->getMaxWaitSpotTime();
	}

	m_waitTimer.StartTimer(this, curTime()+ maxWaitSpotTime );
	Execute(pEngine);
}
コード例 #4
0
void State_DropPaxAtCurbside::Execute( CARCportEngine* pEngine )
{
	if(!m_pOwner->HavePaxGetOff(m_pCurb))
	{
		getVehicle()->SuccessProcessAtLayoutObject(m_pCurb,m_spot,pEngine);
	}
}
コード例 #5
0
ファイル: cityview.cpp プロジェクト: aglenday/OpenApoc
void CityView::Render()
{
	TileView::Render();
	if (fw.state->showVehiclePath)
	{
		for (auto obj : this->map.activeObjects)
		{
			auto vTile = std::dynamic_pointer_cast<VehicleTileObject>(obj);
			if (!vTile)
				continue;
			auto &v = vTile->getVehicle();
			auto &path = v.missions.front()->getCurrentPlannedPath();
			Vec3<float> prevPos = vTile->getPosition();
			for (auto *tile : path)
			{
				Vec3<float> pos = tile->position;
				Vec2<float> screenPosA = this->tileToScreenCoords(prevPos);
				screenPosA.x += this->offsetX;
				screenPosA.y += this->offsetX;
				Vec2<float> screenPosB = this->tileToScreenCoords(pos);
				screenPosB.x += this->offsetX;
				screenPosB.y += this->offsetX;

				fw.renderer->drawLine(screenPosA, screenPosB, Colour{255, 0, 0, 128});

				prevPos = pos;
			}
		}
	}
	activeTab->Render();
	fw.gamecore->MouseCursor->Render();
}
コード例 #6
0
void State_LeaveCurbside::Exit(CARCportEngine* pEngine)
{
	if(m_spot)
	{
		m_spot->OnVehicleExit(getVehicle(), curTime());
	}
	
	m_pCurb->NotifyObservers();//notify waiting vehicles
}
コード例 #7
0
void ArrivalPaxLandsideBehavior::ProcessPutCarryonToVehicle( const ElapsedTime& eEventTime )
{
	ElapsedTime serviceT = ElapsedTime(0L);
	LandsideResourceInSim* pRes = getResource();
	LandsideVehicleInSim* pV = getVehicle();
	if(pRes && pV)
	{
		serviceT = pRes->getLayoutObject()->GetServiceTime(pV->getName());
	}
	ElapsedTime nextT = eEventTime+serviceT;
	WriteLogEntry(nextT);

	////go to the parking 
	//ARCVector3 bagPos = m_pVehicle->getLastState().pos;
	//setDestination(bagPos);
	//ElapsedTime dNextTime = eEventTime;
	//dNextTime += moveTime();
	////setLocation(bagPos);		
	//WriteLogEntry(dNextTime);

	////write bag log
	//Passenger* pPassenger = (Passenger*)m_pPerson;
	//int nCount = pPassenger->m_pVisitorList.size();
	//for( int i=nCount-1; i>=0; i-- )
	//{
	//	PaxVisitor* pVis = pPassenger->m_pVisitorList[i];
	//	if (pVis == NULL)
	//		continue;
	//	VisitorLandsideBehavior* pCarryonBehavior = (VisitorLandsideBehavior*)pVis->getLandsideBehavior();
	//	ASSERT(pCarryonBehavior);
	//	//non passenger move to ground
	//	if(pCarryonBehavior)
	//	{
	//		pCarryonBehavior->setDestination(bagPos);

	//		ElapsedTime eMoveTime = moveTime();
	//		ElapsedTime eCurTime = dNextTime + eMoveTime;

	//		pCarryonBehavior->setLocation( bagPos);
	//		pCarryonBehavior->WriteLogEntry(eCurTime, i);
	//	}

	//	//detach to passenger
	//	pPassenger->m_pVisitorList[i] = NULL;		
	//}

	setState(GetOnVehicle);
	GenerateEvent(nextT);
}
コード例 #8
0
void State_TryParkingCurbside::Execute( CARCportEngine * pEngine )
{
	LandsideLaneNodeList path;
	if(IParkingSpotInSim* spot =  m_pCurb->getParkingSpot().FindParkingPos(getVehicle(),path) )
	{
		spot->SetPreOccupy(m_pOwner);
		State_ParkingToCurbside* pNextState = new State_ParkingToCurbside(getVehicle(),spot,m_pCurb);
		pNextState->SetPath(path);
		getVehicle()->ChangeVehicleState(pNextState);
		m_waitTimer.SetEnd(true);
		return;
	}

	if( m_waitTimer.isEnded() )		//fail parking to curb
	{
		getVehicle()->FailedParkInCurb(m_pCurb,pEngine);
		return;
	}
	else
	{
		m_pCurb->AddObserver(getVehicle());
		///m_pOwner->ListenTo(m_pCurb);
	}
}
コード例 #9
0
ファイル: Person.cpp プロジェクト: michele-segata/plexe-sumo
bool
Person::handleVariable(const std::string& objID, const int variable, VariableWrapper* wrapper) {
    switch (variable) {
        case TRACI_ID_LIST:
            return wrapper->wrapStringList(objID, variable, getIDList());
        case ID_COUNT:
            return wrapper->wrapInt(objID, variable, getIDCount());
        case VAR_POSITION:
            return wrapper->wrapPosition(objID, variable, getPosition(objID));
        case VAR_POSITION3D:
            return wrapper->wrapPosition(objID, variable, getPosition(objID, true));
        case VAR_ANGLE:
            return wrapper->wrapDouble(objID, variable, getAngle(objID));
        case VAR_SLOPE:
            return wrapper->wrapDouble(objID, variable, getSlope(objID));
        case VAR_SPEED:
            return wrapper->wrapDouble(objID, variable, getSpeed(objID));
        case VAR_ROAD_ID:
            return wrapper->wrapString(objID, variable, getRoadID(objID));
        case VAR_LANEPOSITION:
            return wrapper->wrapDouble(objID, variable, getLanePosition(objID));
        case VAR_COLOR:
            return wrapper->wrapColor(objID, variable, getColor(objID));
        case VAR_WAITING_TIME:
            return wrapper->wrapDouble(objID, variable, getWaitingTime(objID));
        case VAR_TYPE:
            return wrapper->wrapString(objID, variable, getTypeID(objID));
        case VAR_NEXT_EDGE:
            return wrapper->wrapString(objID, variable, getNextEdge(objID));
        case VAR_STAGES_REMAINING:
            return wrapper->wrapInt(objID, variable, getRemainingStages(objID));
        case VAR_VEHICLE:
            return wrapper->wrapString(objID, variable, getVehicle(objID));
        default:
            return false;
    }
}
コード例 #10
0
void ArrivalPaxLandsideBehavior::ProcessGetOnVehicle( const ElapsedTime& eEventTime )
{
	WriteLogEntry(eEventTime);

	setState(StayOnVehicle);
	WriteLogEntry(eEventTime);

	//Notify vehicle that one passenger has moved into
	//
	LandsideVehicleInSim* pVehicle = getVehicle();
	if(pVehicle)
	{	
		if(LandsideResourceInSim* pRes = getResource())
		{
			pRes->PassengerMoveOut(this,eEventTime);
		}
		pVehicle->AddOnPax(this);
		pVehicle->NotifyPaxMoveInto(m_pPerson->getEngine(),this, eEventTime);
	}
	else
	{
		ASSERT(FALSE);
	}
}
コード例 #11
0
void State_ParkingToCurbside::OnMoveOutRoute( CARCportEngine* _pEngine )
{
	getVehicle()->DoParkingToSpot(m_spot);
	getVehicle()->SuccessParkInCurb(m_pCurb,m_spot);
}
コード例 #12
0
bool Activities::ExitVehicle::update(CharacterObject *character,
                                     CharacterController *controller) {
    RW_UNUSED(controller);

    if (jacked) {
        const auto jacked_lhs = AnimCycle::CarJackedLHS;
        const auto jacked_rhs = AnimCycle::CarJackedRHS;
        const auto cycle_current = character->getCurrentCycle();

        if (cycle_current == jacked_lhs || cycle_current == jacked_rhs) {
            if (character->animator->isCompleted(AnimIndexAction)) {
                return true;
            }
        } else {
            if (character->getCurrentVehicle() == nullptr) return true;

            auto vehicle = character->getCurrentVehicle();
            auto seat = character->getCurrentSeat();
            auto door = vehicle->getSeatEntryDoor(seat);
            RW_UNUSED(door);
            auto exitPos = vehicle->getSeatEntryPositionWorld(seat);
            auto exitPosLocal = vehicle->getSeatEntryPosition(seat);

            character->rotation = vehicle->getRotation();

            // Exit the vehicle immediatley
            character->enterVehicle(nullptr, seat);
            character->setPosition(exitPos);

            if (exitPosLocal.x > 0.f) {
                character->playCycle(jacked_rhs);
            } else {
                character->playCycle(jacked_lhs);
            }
            // No need to open the door, it should already be open.
        }
        return false;
    }

    if (character->getCurrentVehicle() == nullptr) return true;

    auto vehicle = character->getCurrentVehicle();
    auto seat = character->getCurrentSeat();
    auto door = vehicle->getSeatEntryDoor(seat);
    auto exitPos = vehicle->getSeatEntryPositionWorld(seat);
    auto exitPosLocal = vehicle->getSeatEntryPosition(seat);

    auto cycle_exit = AnimCycle::CarGetOutLHS;

    if (exitPosLocal.x > 0.f) {
        cycle_exit = AnimCycle::CarGetOutRHS;
    }

    if (vehicle->getVehicle()->vehicletype_ == VehicleModelInfo::BOAT) {
        auto ppos = character->getPosition();
        character->enterVehicle(nullptr, seat);
        character->setPosition(ppos);
        return true;
    }

    bool isDriver = vehicle->isOccupantDriver(character->getCurrentSeat());

    // If the vehicle is going too fast, slow down
    if (isDriver) {
        if (!vehicle->canOccupantExit()) {
            vehicle->setBraking(1.f);
            return false;
        }
    }

    if (character->getCurrentCycle() == cycle_exit) {
        if (character->animator->isCompleted(AnimIndexAction)) {
            character->enterVehicle(nullptr, seat);
            character->setPosition(exitPos);

            if (isDriver) {
                // Apply the handbrake
                vehicle->setHandbraking(true);
                vehicle->setThrottle(0.f);
            }

            return true;
        }
    } else {
        character->playCycle(cycle_exit);
        if (door) {
            vehicle->setPartTarget(door, true, door->openAngle);
        }
    }

    return false;
}