private void ThinkTrack() { if (this.m_Target == null) { this.m_Drone.SetShipTarget(0, Vector3.Zero, true, 0); this.m_State = DroneTrapState.SEEK; } else if (this.m_Drone.ListenTurretFiring == Turret.FiringEnum.Firing) { this.m_State = DroneTrapState.DRAG; } else { bool flag = (double)(this.m_Drone.Position - this.m_Target.Position).LengthSquared > (double)this.m_AttackRange * (double)this.m_AttackRange; if (this.m_WeaponsDisabled != flag) { foreach (IGameObject state in this.m_Drone.WeaponBanks.ToList <WeaponBank>()) { state.PostSetProp("DisableAllTurrets", flag); } this.m_WeaponsDisabled = flag; } Vector3 targetPos = this.m_Target.Position + Vector3.Normalize(this.m_DefaultTestPlanetPos - this.m_Target.Position) * (this.m_AttackRange * 0.75f); Vector3 look = Vector3.Normalize(this.m_Target.Position - this.m_Drone.Position); if ((double)(this.m_Drone.Maneuvering.Destination - targetPos).LengthSquared <= 2500.0) { return; } this.m_Drone.Maneuvering.PostAddGoal(targetPos, look); } }
private void ThinkSeek() { if (this.m_Target != null) { this.m_State = DroneTrapState.TRACK; } else { Vector3 targetPos = this.m_TrapPlanet != null ? this.m_TrapPlanet.Parameters.Position : this.m_DefaultTestPlanetPos; if ((double)(this.m_Drone.Maneuvering.Destination - targetPos).LengthSquared <= 100.0) { return; } this.m_Drone.Maneuvering.PostAddGoal(targetPos, -Vector3.UnitZ); } }
public override void Initialize() { this.m_Target = (Ship)null; this.m_TrapPlanet = (StellarBody)null; this.m_RequiresHelp = false; this.m_State = DroneTrapState.SEEK; this.m_RequestHelpDelay = 200; this.m_PrevDistFromPlanet = 0.0f; this.m_AttackRange = 0.0f; foreach (WeaponBank state in this.m_Drone.WeaponBanks.ToList <WeaponBank>()) { state.PostSetProp("RequestFireStateChange", true); state.PostSetProp("DisableAllTurrets", true); this.m_AttackRange = Math.Max(state.Weapon.RangeTable.Effective.Range, this.m_AttackRange); this.m_WeaponsDisabled = true; } this.m_AttackRange = Math.Min(this.m_AttackRange, 1000f); }
private void ThinkDrag() { if (this.m_Target == null || this.m_Drone.ListenTurretFiring != Turret.FiringEnum.Firing) { this.SetTarget((IGameObject)null); this.m_State = DroneTrapState.SEEK; foreach (IGameObject state in this.m_Drone.WeaponBanks.ToList <WeaponBank>()) { state.PostSetProp("DisableAllTurrets", true); } this.m_WeaponsDisabled = true; } else { Vector3 defaultTestPlanetPos = this.m_DefaultTestPlanetPos; Vector3 look = defaultTestPlanetPos - this.m_Target.Position; double num1 = (double)look.Normalize(); Vector3 targetPos = defaultTestPlanetPos; if ((double)(this.m_Drone.Maneuvering.Destination - targetPos).LengthSquared > 2500.0) { this.m_Drone.Maneuvering.PostAddGoal(targetPos, look); } if ((double)(this.m_Target.Position - targetPos).LengthSquared > (double)this.m_PrevDistFromPlanet) { --this.m_RequestHelpDelay; } else { this.m_RequestHelpDelay = 200; } this.m_RequiresHelp = this.m_RequestHelpDelay <= 0; float num2 = (float)((this.m_TrapPlanet != null ? (double)this.m_TrapPlanet.Parameters.Radius : 500.0) + (double)this.m_Target.ShipSphere.radius * 0.5); if ((double)(this.m_Target.Position - defaultTestPlanetPos).LengthSquared >= (double)num2 * (double)num2) { return; } this.m_Target.KillShip(true); } }