void ABaseVehicleAI::UpdateMovement() { float steering = CalculateSteering(); float throttle = CalculateThrottle(); GetVehicleMovementComponent()->SetSteeringInput(steering); GetVehicleMovementComponent()->SetThrottleInput(throttle); if(GetDistanceFromDestination() < 250) { GetVehicleMovementComponent()->SetHandbrakeInput(true); State = EVehicleMovementState::VMS_Stopping; OnMoveCompleted.Broadcast(); State = EVehicleMovementState::VMS_Idle; UKismetSystemLibrary::K2_SetTimer(this, "UpdateMovement", 0.0, false); } else { State = EVehicleMovementState::VMS_Moving; } }
tResult YawToSteer::OnPinEvent(IPin *pSource, tInt nEventCode, tInt nParam1, tInt nParam2, IMediaSample *pMediaSample) { RETURN_IF_POINTER_NULL(pMediaSample); RETURN_IF_POINTER_NULL(pSource); RETURN_IF_POINTER_NULL(pMediaSample); if (nEventCode != IPinEventSink::PE_MediaSampleReceived) { RETURN_NOERROR; } logger.StartLog(); if (pSource == &senderCarYawInPin) { GetSenderYaw(pMediaSample); // init senderYaw if necessary if (!isSenderYawInitialized) { oldSenderYaw = senderYaw; isSenderYawInitialized = tTrue; } deltaSenderYaw = CalcYawDelta(oldSenderYaw, senderYaw); if (deltaSenderYaw > abruptVariationThreshold) { isLocalYawInitialized = tFalse; isSenderYawInitialized = tFalse; targetLocalYaw = 0; RETURN_NOERROR; } // ignore yaw values if deviation compared to last value less than x (0.2) else if (abs(deltaSenderYaw) > 0.2) { targetLocalYaw += deltaSenderYaw; } } else if (pSource == &localCarYawInPin) { GetLocalYaw(pMediaSample); // init localYaw if necessary if (!isLocalYawInitialized && isSenderYawInitialized) { targetLocalYaw = localYaw; isLocalYawInitialized = tTrue; } } else if (pSource == &senderCarSpeedInPin) { senderSpeed = GetFloat(pMediaSample); directionCorrection = (senderSpeed > SPEED_STATIONARY) ? -1 : 1; } if (isSenderYawInitialized && isLocalYawInitialized) { CalculateSteering(); TransmitSignalValue(&steerOutPin, steer); } else { steer = STEERING_STRAIGHT; } logger.Log(cString::Format("sendYaw %f |localY %f targetY %f steer %f | %f\n" "\tSpeed: %f; corr: %f", senderYaw, localYaw, targetLocalYaw, steer, CalcYawDelta(targetLocalYaw, localYaw), senderSpeed, directionCorrection).GetPtr()); logger.EndLog(); RETURN_NOERROR; }