public override void MainBehavior() { if (RAI_SessionCore.IsServer == false) { return; } base.MainBehavior(); //Logger.MsgDebug(Mode.ToString(), DebugTypeEnum.General); if (Mode != BehaviorMode.Retreat && Despawn.DoRetreat == true) { ChangeCoreBehaviorMode(BehaviorMode.Retreat); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.LevelWithGravity | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.WaterNavigation); } if (Mode == BehaviorMode.Init) { if (!AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); BehaviorTriggerD = true; } else { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.LevelWithGravity | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.WaterNavigation); } } if (Mode == BehaviorMode.WaitingForTarget) { if (AutoPilot.CurrentMode != AutoPilot.UserCustomModeIdle) { AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.LevelWithGravity); } if (AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.LevelWithGravity | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.WaterNavigation); } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); BehaviorTriggerD = true; } } if (!AutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat && Mode != BehaviorMode.WaitingForTarget) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.LevelWithGravity); BehaviorTriggerD = true; } //A - Stop All Movement if (BehaviorActionA) { BehaviorActionA = false; ChangeCoreBehaviorMode(BehaviorMode.WaitAtWaypoint); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.LevelWithGravity); WaitTime = MyAPIGateway.Session.GameDateTime; BehaviorTriggerC = true; } //WaitAtWaypoint if (Mode == BehaviorMode.WaitAtWaypoint) { var timespan = MyAPIGateway.Session.GameDateTime - WaitTime; if (timespan.TotalSeconds >= AutoPilot.Data.WaypointWaitTimeTrigger) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); BehaviorTriggerD = true; } } //Approach if (Mode == BehaviorMode.ApproachTarget) { bool inRange = false; if (!AutoPilot.InGravity() && AutoPilot.DistanceToTargetWaypoint < AutoPilot.Data.EngageDistanceSpace) { inRange = true; } if (AutoPilot.InGravity() && AutoPilot.DistanceToTargetWaypoint < AutoPilot.Data.EngageDistancePlanet) { inRange = true; } if (inRange) { AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToTarget | NewAutoPilotMode.LevelWithGravity | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.WaterNavigation); ChangeCoreBehaviorMode(BehaviorMode.EngageTarget); BehaviorTriggerA = true; } } //Engage if (Mode == BehaviorMode.EngageTarget) { bool outRange = false; if (!AutoPilot.InGravity() && AutoPilot.DistanceToTargetWaypoint > AutoPilot.Data.DisengageDistanceSpace) { outRange = true; } if (AutoPilot.InGravity() && AutoPilot.DistanceToTargetWaypoint > AutoPilot.Data.DisengageDistancePlanet) { outRange = true; } if (outRange) { AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.LevelWithGravity | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.WaterNavigation); ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); BehaviorTriggerB = true; } } //Retreat if (Mode == BehaviorMode.Retreat) { if (Despawn.NearestPlayer?.Controller?.ControlledEntity?.Entity != null) { //Logger.AddMsg("DespawnCoordsCreated", true); AutoPilot.SetInitialWaypoint(VectorHelper.GetDirectionAwayFromTarget(this.RemoteControl.GetPosition(), Despawn.NearestPlayer.GetPosition()) * 1000 + this.RemoteControl.GetPosition()); } } }
public override void MainBehavior() { if (Mode != BehaviorMode.Retreat && Despawn.DoRetreat == true) { Mode = BehaviorMode.Retreat; NewAutoPilot.ActivateAutoPilot(AutoPilotType.Legacy, NewAutoPilotMode.None, this.RemoteControl.GetPosition(), false, true, true); } //Init if (Mode == BehaviorMode.Init) { if (!NewAutoPilot.Targeting.HasTarget()) { Mode = BehaviorMode.WaitingForTarget; } else { Mode = BehaviorMode.WaitAtWaypoint; this.HorseflyWaypointWaitTime = MyAPIGateway.Session.GameDateTime; NewAutoPilot.ActivateAutoPilot(AutoPilotType.Legacy, NewAutoPilotMode.None, this.RemoteControl.GetPosition(), true, true, true); } } //Waiting For Target if (Mode == BehaviorMode.WaitingForTarget) { if (NewAutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); this.HorseflyWaypointWaitTime = MyAPIGateway.Session.GameDateTime; NewAutoPilot.SetRandomOffset(NewAutoPilot.Targeting.Target.GetEntity(), false); NewAutoPilot.ActivateAutoPilot(AutoPilotType.Legacy, NewAutoPilotMode.None, this.RemoteControl.GetPosition(), true, true, true); } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); } } if (!NewAutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } //Approach if (Mode == BehaviorMode.ApproachTarget) { var timeSpan = MyAPIGateway.Session.GameDateTime - this.HorseflyWaypointAbandonTime; //Logger.MsgDebug("Distance To Waypoint: " + NewAutoPilot.DistanceToCurrentWaypoint.ToString(), DebugTypeEnum.General); if (ArrivedAtWaypoint()) { ChangeCoreBehaviorMode(BehaviorMode.WaitAtWaypoint); this.HorseflyWaypointWaitTime = MyAPIGateway.Session.GameDateTime; NewAutoPilot.ActivateAutoPilot(AutoPilotType.None, NewAutoPilotMode.None, Vector3D.Zero); } else if (timeSpan.TotalSeconds >= this.HorseflyWaypointAbandonTimeTrigger) { Logger.MsgDebug("Horsefly Timeout, Getting New Offset", DebugTypeEnum.General); this.HorseflyWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; NewAutoPilot.SetRandomOffset(NewAutoPilot.Targeting.Target.GetEntity(), false); } else if (NewAutoPilot.IsWaypointThroughVelocityCollision()) { Logger.MsgDebug("Horsefly Velocity Through Collision, Getting New Offset", DebugTypeEnum.General); this.HorseflyWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; NewAutoPilot.SetRandomOffset(NewAutoPilot.Targeting.Target.GetEntity(), false); } } //WaitAtWaypoint if (Mode == BehaviorMode.WaitAtWaypoint) { var timeSpan = MyAPIGateway.Session.GameDateTime - this.HorseflyWaypointWaitTime; if (timeSpan.TotalSeconds >= this.HorseflyWaypointWaitTimeTrigger) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); this.HorseflyWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; NewAutoPilot.SetRandomOffset(NewAutoPilot.Targeting.Target.GetEntity(), false); NewAutoPilot.ActivateAutoPilot(AutoPilotType.Legacy, NewAutoPilotMode.None, this.RemoteControl.GetPosition(), true, true, true); } } //Retreat if (Mode == BehaviorMode.Retreat) { if (Despawn.NearestPlayer?.Controller?.ControlledEntity?.Entity != null) { //Logger.AddMsg("DespawnCoordsCreated", true); NewAutoPilot.SetInitialWaypoint(VectorHelper.GetDirectionAwayFromTarget(this.RemoteControl.GetPosition(), Despawn.NearestPlayer.GetPosition()) * 1000 + this.RemoteControl.GetPosition()); } } }
public override void MainBehavior() { if (RAI_SessionCore.IsServer == false) { return; } base.MainBehavior(); //Logger.MsgDebug(Mode.ToString(), DebugTypeEnum.General); if (Mode != BehaviorMode.Retreat && Despawn.DoRetreat == true) { ChangeCoreBehaviorMode(BehaviorMode.Retreat); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode); } if (Mode == BehaviorMode.Init) { if (!AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } else { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.OffsetWaypointGenerator(true); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.OffsetWaypoint); } } if (Mode == BehaviorMode.WaitingForTarget) { if (AutoPilot.CurrentMode != AutoPilot.UserCustomMode) { AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); } if (AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.OffsetWaypointGenerator(true); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.OffsetWaypoint); BehaviorTriggerA = true; } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); } } if (!AutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat && Mode != BehaviorMode.WaitingForTarget) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); } //TimerThing var modeTime = MyAPIGateway.Session.GameDateTime - HorseFighterModeSwitchTime; if (modeTime.TotalSeconds > (FighterMode ? HorseFighterTimeEngaging : HorseFighterTimeApproaching)) { HorseFighterModeSwitchTime = MyAPIGateway.Session.GameDateTime; FighterMode = FighterMode ? false : true; Logger.MsgDebug("HorseFighter Using Fighter Mode: " + FighterMode.ToString(), DebugTypeEnum.General); } //Approach if (Mode == BehaviorMode.ApproachTarget) { if (FighterMode && AutoPilot.DistanceToTargetWaypoint < (AutoPilot.InGravity() ? HorseFighterEngageDistancePlanet : HorseFighterEngageDistanceSpace)) { AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.Strafe | NewAutoPilotMode.WaypointFromTarget); ChangeCoreBehaviorMode(BehaviorMode.EngageTarget); BehaviorTriggerC = true; } else { var timeSpan = MyAPIGateway.Session.GameDateTime - this.HorseFighterWaypointAbandonTime; if (AutoPilot.ArrivedAtOffsetWaypoint()) { ChangeCoreBehaviorMode(BehaviorMode.WaitAtWaypoint); this.HorseFighterWaypointWaitTime = MyAPIGateway.Session.GameDateTime; AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); BehaviorTriggerB = true; } else if (timeSpan.TotalSeconds >= this.HorseFighterWaypointAbandonTimeTrigger) { this.HorseFighterWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); } else if (AutoPilot.IsWaypointThroughVelocityCollision()) { this.HorseFighterWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); } } } //Engage if (Mode == BehaviorMode.EngageTarget) { bool outRange = false; if (FighterMode) { outRange = AutoPilot.DistanceToTargetWaypoint > (AutoPilot.InGravity() ? HorseFighterDisengageDistancePlanet : HorseFighterDisengageDistanceSpace); } else { outRange = true; } if (outRange) { AutoPilot.OffsetWaypointGenerator(true); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.OffsetWaypoint); ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); BehaviorTriggerA = true; } } //WaitAtWaypoint if (Mode == BehaviorMode.WaitAtWaypoint) { var timeSpan = MyAPIGateway.Session.GameDateTime - this.HorseFighterWaypointWaitTime; if (timeSpan.TotalSeconds >= this.HorseFighterWaypointWaitTimeTrigger) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); this.HorseFighterWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.OffsetWaypoint); BehaviorTriggerA = true; } } //Retreat if (Mode == BehaviorMode.Retreat) { if (Despawn.NearestPlayer?.Controller?.ControlledEntity?.Entity != null) { //Logger.AddMsg("DespawnCoordsCreated", true); AutoPilot.SetInitialWaypoint(VectorHelper.GetDirectionAwayFromTarget(this.RemoteControl.GetPosition(), Despawn.NearestPlayer.GetPosition()) * 1000 + this.RemoteControl.GetPosition()); } } }
public override void MainBehavior() { if (RAI_SessionCore.IsServer == false) { return; } base.MainBehavior(); bool skipEngageCheck = false; if (Mode != BehaviorMode.Retreat && Despawn.DoRetreat == true) { Mode = BehaviorMode.Retreat; AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode); } //Init if (Mode == BehaviorMode.Init) { if (!AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } else { EngageOverrideTimer = MyAPIGateway.Session.GameDateTime; ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); CreateAndMoveToOffset(); skipEngageCheck = true; } } //Waiting For Target if (Mode == BehaviorMode.WaitingForTarget) { if (AutoPilot.CurrentMode != AutoPilot.UserCustomMode) { AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); } if (AutoPilot.Targeting.HasTarget()) { EngageOverrideTimer = MyAPIGateway.Session.GameDateTime; ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); CreateAndMoveToOffset(); skipEngageCheck = true; BehaviorTriggerA = true; } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); } } if (!AutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } //Approach Target if (Mode == BehaviorMode.ApproachTarget && !skipEngageCheck) { double distance = AutoPilot.InGravity() ? this.StrikeBeginPlanetAttackRunDistance : this.StrikeBeginSpaceAttackRunDistance; bool engageOverride = false; if (EngageOverrideWithDistanceAndTimer) { if (AutoPilot.DistanceToCurrentWaypoint < EngageOverrideDistance) { var time = MyAPIGateway.Session.GameDateTime - EngageOverrideTimer; if (time.TotalSeconds > EngageOverrideTimerTrigger) { engageOverride = true; } } } if ((engageOverride || AutoPilot.DistanceToCurrentWaypoint <= distance) && AutoPilot.Targeting.Target.Distance(RemoteControl.GetPosition()) > this.StrikeBreakawayDistance && !AutoPilot.IsAvoidingCollision()) { ChangeCoreBehaviorMode(BehaviorMode.EngageTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | (StrikeEngageUseSafePlanetPathing ? NewAutoPilotMode.PlanetaryPathing : NewAutoPilotMode.None) | NewAutoPilotMode.WaypointFromTarget); skipEngageCheck = true; BehaviorTriggerB = true; } if (skipEngageCheck == false) { var timeSpan = MyAPIGateway.Session.GameDateTime - LastOffsetCalculation; if (timeSpan.TotalSeconds >= StrikeOffsetRecalculationTime) { skipEngageCheck = true; AutoPilot.DebugDataA = "Offset Expire, Recalc"; CreateAndMoveToOffset(); } if (AutoPilot.Data.ReverseOffsetDistAltAboveHeight) { if (TargetIsHigh && AutoPilot.Targeting.Target.CurrentAltitude() < AutoPilot.Data.ReverseOffsetHeight) { TargetIsHigh = false; AutoPilot.DebugDataA = "Target is Low"; CreateAndMoveToOffset(); } else if (!TargetIsHigh && AutoPilot.Targeting.Target.CurrentAltitude() > AutoPilot.Data.ReverseOffsetHeight) { TargetIsHigh = true; AutoPilot.DebugDataA = "Target is High"; CreateAndMoveToOffset(); } } } } //Engage Target if (Mode == BehaviorMode.EngageTarget && !skipEngageCheck) { Logger.MsgDebug("Strike: " + StrikeBreakawayDistance.ToString() + " - " + AutoPilot.DistanceToInitialWaypoint, DebugTypeEnum.General); if (AutoPilot.DistanceToInitialWaypoint <= StrikeBreakawayDistance || (AutoPilot.Data.UseVelocityCollisionEvasion && AutoPilot.Collision.VelocityResult.CollisionImminent())) { EngageOverrideTimer = MyAPIGateway.Session.GameDateTime; ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); CreateAndMoveToOffset(); BehaviorTriggerA = true; } } }
public override void MainBehavior() { if (RAI_SessionCore.IsServer == false) { return; } Logger.MsgDebug(Mode.ToString(), DebugTypeEnum.General); if (Mode != BehaviorMode.Retreat && Despawn.DoRetreat == true) { ChangeCoreBehaviorMode(BehaviorMode.Retreat); NewAutoPilot.ActivateAutoPilot(AutoPilotType.Legacy, NewAutoPilotMode.None, this.RemoteControl.GetPosition(), false, false, true); } if (Mode == BehaviorMode.Init) { if (!NewAutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } else { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); NewAutoPilot.ActivateAutoPilot(AutoPilotType.Legacy, NewAutoPilotMode.None, this.RemoteControl.GetPosition(), true, true, true); } } if (Mode == BehaviorMode.WaitingForTarget) { if (NewAutoPilot.CurrentMode != NewAutoPilotMode.None) { NewAutoPilot.ActivateAutoPilot(AutoPilotType.None, NewAutoPilotMode.None, Vector3D.Zero); } if (NewAutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); NewAutoPilot.ActivateAutoPilot(AutoPilotType.Legacy, NewAutoPilotMode.None, this.RemoteControl.GetPosition(), true, true, true); } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); } } if (!NewAutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat && Mode != BehaviorMode.WaitingForTarget) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); NewAutoPilot.ActivateAutoPilot(AutoPilotType.None, NewAutoPilotMode.None, Vector3D.Zero); } //Approach if (Mode == BehaviorMode.ApproachTarget) { bool inRange = false; if (!NewAutoPilot.InGravity() && NewAutoPilot.DistanceToInitialWaypoint < this.FighterEngageDistanceSpace) { inRange = true; } if (NewAutoPilot.InGravity() && NewAutoPilot.DistanceToInitialWaypoint < this.FighterEngageDistancePlanet) { inRange = true; } if (inRange) { NewAutoPilot.ActivateAutoPilot(AutoPilotType.RivalAI, NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.Strafe, Vector3D.Zero, true, false, false); ChangeCoreBehaviorMode(BehaviorMode.EngageTarget); BehaviorTriggerA = true; } } //Engage if (Mode == BehaviorMode.EngageTarget) { bool outRange = false; if (!NewAutoPilot.InGravity() && NewAutoPilot.DistanceToInitialWaypoint > this.FighterDisengageDistanceSpace) { outRange = true; } if (NewAutoPilot.InGravity() && NewAutoPilot.DistanceToInitialWaypoint > this.FighterDisengageDistancePlanet) { outRange = true; } if (outRange) { NewAutoPilot.ActivateAutoPilot(AutoPilotType.Legacy, NewAutoPilotMode.None, this.RemoteControl.GetPosition(), true, true, true); ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); BehaviorTriggerB = true; } } //Retreat if (Mode == BehaviorMode.Retreat) { if (Despawn.NearestPlayer?.Controller?.ControlledEntity?.Entity != null) { //Logger.AddMsg("DespawnCoordsCreated", true); NewAutoPilot.SetInitialWaypoint(VectorHelper.GetDirectionAwayFromTarget(this.RemoteControl.GetPosition(), Despawn.NearestPlayer.GetPosition()) * 1000 + this.RemoteControl.GetPosition()); } } }
public override void MainBehavior() { if (RAI_SessionCore.IsServer == false) { return; } base.MainBehavior(); if (Mode != BehaviorMode.Retreat && Despawn.DoRetreat == true) { ChangeCoreBehaviorMode(BehaviorMode.Retreat); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode); } //Init if (Mode == BehaviorMode.Init) { if (!AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } else { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); this.HorseflyWaypointWaitTime = MyAPIGateway.Session.GameDateTime; AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.OffsetWaypoint); } } //Waiting For Target if (Mode == BehaviorMode.WaitingForTarget) { if (AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); this.HorseflyWaypointWaitTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.OffsetWaypoint); } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); } } if (!AutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } //Approach if (Mode == BehaviorMode.ApproachTarget) { var timeSpan = MyAPIGateway.Session.GameDateTime - this.HorseflyWaypointAbandonTime; //Logger.MsgDebug("Distance To Waypoint: " + NewAutoPilot.DistanceToCurrentWaypoint.ToString(), DebugTypeEnum.General); if (AutoPilot.ArrivedAtOffsetWaypoint()) { ChangeCoreBehaviorMode(BehaviorMode.WaitAtWaypoint); this.HorseflyWaypointWaitTime = MyAPIGateway.Session.GameDateTime; AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); BehaviorTriggerA = true; } else if (timeSpan.TotalSeconds >= this.HorseflyWaypointAbandonTimeTrigger) { Logger.MsgDebug("Horsefly Timeout, Getting New Offset", DebugTypeEnum.General); this.HorseflyWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); } else if (AutoPilot.IsWaypointThroughVelocityCollision()) { Logger.MsgDebug("Horsefly Velocity Through Collision, Getting New Offset", DebugTypeEnum.General); this.HorseflyWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); } } //WaitAtWaypoint if (Mode == BehaviorMode.WaitAtWaypoint) { var timeSpan = MyAPIGateway.Session.GameDateTime - this.HorseflyWaypointWaitTime; if (timeSpan.TotalSeconds >= this.HorseflyWaypointWaitTimeTrigger) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); this.HorseflyWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.OffsetWaypoint); BehaviorTriggerB = true; } } //Retreat if (Mode == BehaviorMode.Retreat) { if (Despawn.NearestPlayer?.Controller?.ControlledEntity?.Entity != null) { //Logger.AddMsg("DespawnCoordsCreated", true); AutoPilot.SetInitialWaypoint(VectorHelper.GetDirectionAwayFromTarget(this.RemoteControl.GetPosition(), Despawn.NearestPlayer.GetPosition()) * 1000 + this.RemoteControl.GetPosition()); } } }
public override void MainBehavior() { if (RAI_SessionCore.IsServer == false) { return; } base.MainBehavior(); //Logger.MsgDebug(Mode.ToString(), DebugTypeEnum.General); if (Mode != BehaviorMode.Retreat && Despawn.DoRetreat == true) { ChangeCoreBehaviorMode(BehaviorMode.Retreat); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode); } if (Mode == BehaviorMode.Init) { if (!AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } else { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.OffsetWaypointGenerator(true); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | NewAutoPilotMode.WaypointFromTarget | AutoPilot.UserCustomMode | NewAutoPilotMode.OffsetWaypoint); } } if (Mode == BehaviorMode.WaitingForTarget) { if (AutoPilot.CurrentMode != AutoPilot.UserCustomModeIdle) { AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); } if (AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.OffsetWaypointGenerator(true); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | NewAutoPilotMode.WaypointFromTarget | AutoPilot.UserCustomMode | NewAutoPilotMode.OffsetWaypoint); } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); } } if (!AutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat && Mode != BehaviorMode.WaitingForTarget) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); } //ApproachTarget if (Mode == BehaviorMode.ApproachTarget) { var timeSpan = MyAPIGateway.Session.GameDateTime - this.SniperWaypointAbandonTime; //Logger.MsgDebug("Distance To Waypoint: " + NewAutoPilot.DistanceToCurrentWaypoint.ToString(), DebugTypeEnum.General); if (AutoPilot.ArrivedAtOffsetWaypoint()) { ChangeCoreBehaviorMode(BehaviorMode.EngageTarget); this.SniperWaypointWaitTime = MyAPIGateway.Session.GameDateTime; AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.WaypointFromTarget); BehaviorTriggerA = true; } else if (timeSpan.TotalSeconds >= AutoPilot.Data.WaypointAbandonTimeTrigger) { Logger.MsgDebug("Sniper Timeout, Getting New Offset", DebugTypeEnum.General); this.SniperWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); } else if (AutoPilot.IsWaypointThroughVelocityCollision()) { Logger.MsgDebug("Sniper Velocity Through Collision, Getting New Offset", DebugTypeEnum.General); this.SniperWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); } } //ApproachWaypoint if (Mode == BehaviorMode.ApproachWaypoint) { var engageDistance = AutoPilot.InGravity() ? AutoPilot.Data.EngageDistancePlanet : AutoPilot.Data.EngageDistanceSpace; var disengageDistance = AutoPilot.InGravity() ? AutoPilot.Data.DisengageDistancePlanet : AutoPilot.Data.DisengageDistanceSpace; if (AutoPilot.DistanceToTargetWaypoint < engageDistance) { var distanceDifference = engageDistance - AutoPilot.DistanceToTargetWaypoint; var engageDifferenceHalved = (disengageDistance - engageDistance) / 2; var directionAwayFromTarget = Vector3D.Normalize(RemoteControl.GetPosition() - AutoPilot.Targeting.TargetLastKnownCoords); var fallbackCoords = directionAwayFromTarget * (distanceDifference + engageDifferenceHalved) + RemoteControl.GetPosition(); AutoPilot.SetInitialWaypoint(fallbackCoords); } else { ChangeCoreBehaviorMode(BehaviorMode.EngageTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.WaypointFromTarget); } } //Engage if (Mode == BehaviorMode.EngageTarget) { var timeSpan = MyAPIGateway.Session.GameDateTime - this.SniperWaypointWaitTime; var engageDistance = AutoPilot.InGravity() ? AutoPilot.Data.EngageDistancePlanet : AutoPilot.Data.EngageDistanceSpace; var disengageDistance = AutoPilot.InGravity() ? AutoPilot.Data.DisengageDistancePlanet : AutoPilot.Data.DisengageDistanceSpace; if (timeSpan.TotalSeconds >= AutoPilot.Data.WaypointWaitTimeTrigger || AutoPilot.DistanceToTargetWaypoint > disengageDistance) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); this.SniperWaypointAbandonTime = MyAPIGateway.Session.GameDateTime; AutoPilot.OffsetWaypointGenerator(true); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode | NewAutoPilotMode.WaypointFromTarget | NewAutoPilotMode.OffsetWaypoint); } if (AutoPilot.DistanceToTargetWaypoint < engageDistance) { ChangeCoreBehaviorMode(BehaviorMode.ApproachWaypoint); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode); } } //Retreat if (Mode == BehaviorMode.Retreat) { if (Despawn.NearestPlayer?.Controller?.ControlledEntity?.Entity != null) { //Logger.AddMsg("DespawnCoordsCreated", true); AutoPilot.SetInitialWaypoint(VectorHelper.GetDirectionAwayFromTarget(this.RemoteControl.GetPosition(), Despawn.NearestPlayer.GetPosition()) * 1000 + this.RemoteControl.GetPosition()); } } }
public override void MainBehavior() { bool skipEngageCheck = false; //Init if (Mode == BehaviorMode.Init) { if (!NewAutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } else { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); CreateAndMoveToOffset(); skipEngageCheck = true; } } //Waiting For Target if (Mode == BehaviorMode.WaitingForTarget) { if (NewAutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); CreateAndMoveToOffset(); skipEngageCheck = true; } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); } } if (!NewAutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } //Approach Target if (Mode == BehaviorMode.ApproachTarget && !skipEngageCheck) { double distance = NewAutoPilot.InGravity() ? this.StrikeBeginPlanetAttackRunDistance : this.StrikeBeginSpaceAttackRunDistance; if (NewAutoPilot.DistanceToCurrentWaypoint <= distance && !NewAutoPilot.IsAvoidingCollision()) { ChangeCoreBehaviorMode(BehaviorMode.EngageTarget); NewAutoPilot.ActivateAutoPilot(AutoPilotType.RivalAI, NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward, RemoteControl.GetPosition(), true, false, StrikeEngageUseSafePlanetPathing); skipEngageCheck = true; } if (skipEngageCheck == false) { var timeSpan = MyAPIGateway.Session.GameDateTime - LastOffsetCalculation; if (timeSpan.TotalSeconds >= StrikeOffsetRecalculationTime) { skipEngageCheck = true; CreateAndMoveToOffset(); } if (TargetIsHigh && NewAutoPilot.Targeting.Target.CurrentAltitude() < NewAutoPilot.OffsetPlanetMinTargetAltitude) { TargetIsHigh = false; CreateAndMoveToOffset(); } else if (!TargetIsHigh && NewAutoPilot.Targeting.Target.CurrentAltitude() > NewAutoPilot.OffsetPlanetMinTargetAltitude) { TargetIsHigh = true; CreateAndMoveToOffset(); } } } //Engage Target if (Mode == BehaviorMode.EngageTarget && !skipEngageCheck) { Logger.MsgDebug("Strike: " + StrikeBreakawayDistance.ToString() + " - " + NewAutoPilot.DistanceToInitialWaypoint, DebugTypeEnum.General); if (NewAutoPilot.DistanceToInitialWaypoint <= StrikeBreakawayDistance || (NewAutoPilot.UseVelocityCollisionEvasion && NewAutoPilot.Collision.VelocityResult.CollisionImminent())) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); CreateAndMoveToOffset(); } } }
public override void MainBehavior() { if (RAI_SessionCore.IsServer == false) { return; } Logger.MsgDebug(Mode.ToString(), DebugTypeEnum.General); if (Mode != BehaviorMode.Retreat && Despawn.DoRetreat == true) { ChangeCoreBehaviorMode(BehaviorMode.Retreat); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode); } if (Mode == BehaviorMode.Init) { if (!AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } else { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | NewAutoPilotMode.WaypointFromTarget | AutoPilot.UserCustomMode); } } if (Mode == BehaviorMode.WaitingForTarget) { if (AutoPilot.CurrentMode != AutoPilot.UserCustomModeIdle) { AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); } if (AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | NewAutoPilotMode.WaypointFromTarget | AutoPilot.UserCustomMode); } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); } } if (!AutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat && Mode != BehaviorMode.WaitingForTarget) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); } //Approach if (Mode == BehaviorMode.ApproachTarget) { } //WaitWaitAtWaypoint if (Mode == BehaviorMode.WaitAtWaypoint) { } //Retreat if (Mode == BehaviorMode.Retreat) { if (Despawn.NearestPlayer?.Controller?.ControlledEntity?.Entity != null) { //Logger.AddMsg("DespawnCoordsCreated", true); AutoPilot.SetInitialWaypoint(VectorHelper.GetDirectionAwayFromTarget(this.RemoteControl.GetPosition(), Despawn.NearestPlayer.GetPosition()) * 1000 + this.RemoteControl.GetPosition()); } } }
public override void MainBehavior() { if (RAI_SessionCore.IsServer == false) { return; } base.MainBehavior(); //Logger.MsgDebug(Mode.ToString(), DebugTypeEnum.General); if (Mode != BehaviorMode.Retreat && Despawn.DoRetreat == true) { ChangeCoreBehaviorMode(BehaviorMode.Retreat); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | AutoPilot.UserCustomMode); } if (Mode == BehaviorMode.Init) { if (!AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); } else { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | NewAutoPilotMode.WaypointFromTarget | AutoPilot.UserCustomMode); } } if (Mode == BehaviorMode.WaitingForTarget) { if (AutoPilot.CurrentMode != AutoPilot.UserCustomModeIdle) { AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); } if (AutoPilot.Targeting.HasTarget()) { ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | NewAutoPilotMode.WaypointFromTarget | AutoPilot.UserCustomMode); } else if (Despawn.NoTargetExpire == true) { Despawn.Retreat(); } } if (!AutoPilot.Targeting.HasTarget() && Mode != BehaviorMode.Retreat && Mode != BehaviorMode.WaitingForTarget) { ChangeCoreBehaviorMode(BehaviorMode.WaitingForTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), AutoPilot.UserCustomModeIdle); } //Approach if (Mode == BehaviorMode.ApproachTarget) { var targetDist = Vector3D.Distance(RemoteControl.GetPosition(), AutoPilot.Targeting.TargetLastKnownCoords); if (targetDist < MaxDistanceFromTarget) { if (AutoPilot.Data.PadDistanceFromTarget > 0 && targetDist > AutoPilot.Data.PadDistanceFromTarget) { //Nothing } else { BehaviorTriggerA = true; ChangeCoreBehaviorMode(BehaviorMode.WaitAtWaypoint); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), (RotateToTargetWithinRange ? NewAutoPilotMode.RotateToWaypoint : NewAutoPilotMode.None) | NewAutoPilotMode.WaypointFromTarget | AutoPilot.UserCustomMode); } } } //Engage if (Mode == BehaviorMode.WaitAtWaypoint) { var targetDist = Vector3D.Distance(RemoteControl.GetPosition(), AutoPilot.Targeting.TargetLastKnownCoords); if (AutoPilot.Data.PadDistanceFromTarget > 0 && targetDist > AutoPilot.Data.PadDistanceFromTarget) { BehaviorTriggerC = true; ChangeCoreBehaviorMode(BehaviorMode.ApproachTarget); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | NewAutoPilotMode.WaypointFromTarget | AutoPilot.UserCustomMode); } else if (targetDist > MaxDistanceFromTarget) { BehaviorTriggerB = true; ChangeCoreBehaviorMode(BehaviorMode.WaitAtWaypoint); AutoPilot.ActivateAutoPilot(this.RemoteControl.GetPosition(), NewAutoPilotMode.RotateToWaypoint | NewAutoPilotMode.ThrustForward | NewAutoPilotMode.PlanetaryPathing | NewAutoPilotMode.WaypointFromTarget | AutoPilot.UserCustomMode); } } //Retreat if (Mode == BehaviorMode.Retreat) { if (Despawn.NearestPlayer?.Controller?.ControlledEntity?.Entity != null) { //Logger.AddMsg("DespawnCoordsCreated", true); AutoPilot.SetInitialWaypoint(VectorHelper.GetDirectionAwayFromTarget(this.RemoteControl.GetPosition(), Despawn.NearestPlayer.GetPosition()) * 1000 + this.RemoteControl.GetPosition()); } } }