private void Start() { this.Stop(false); NodeList <TrackingNode> nodeList = Service.Get <EntityController>().GetNodeList <TrackingNode>(); for (TrackingNode trackingNode = nodeList.Head; trackingNode != null; trackingNode = trackingNode.Next) { BuildingComponent buildingComp = trackingNode.BuildingComp; if (buildingComp != null && buildingComp.BuildingType.Type == BuildingType.Turret) { trackingNode.TrackingComp.MaxVelocity = 0.75f; this.trackComps.Add(trackingNode.TrackingComp); this.CreateRandomDelay(trackingNode.TrackingComp, 0u); } } }
protected override void Update(uint dt) { ShooterController shooterController = Service.ShooterController; for (TrackingNode trackingNode = this.nodeList.Head; trackingNode != null; trackingNode = trackingNode.Next) { TrackingComponent trackingComp = trackingNode.TrackingComp; Entity turretTarget = shooterController.GetTurretTarget(trackingNode.ShooterComp); if (turretTarget != null && turretTarget != trackingComp.TargetEntity) { trackingComp.TargetEntity = turretTarget; trackingComp.Mode = TrackingMode.Entity; } if (trackingComp.Mode != TrackingMode.Disabled) { if (trackingComp.Mode == TrackingMode.Entity) { float num = (float)trackingNode.TrackingComp.TargetTransform.X - trackingNode.Transform.CenterX(); float num2 = (float)trackingNode.TrackingComp.TargetTransform.Z - trackingNode.Transform.CenterZ(); trackingComp.Yaw = Mathf.Atan2(num2, num); if (trackingNode.TrackingComp.TrackPitch) { float num3 = Mathf.Sqrt(num * num + num2 * num2); float num4 = Mathf.Sqrt(trackingNode.ShooterComp.MinAttackRangeSquared); float num5 = Mathf.Sqrt(trackingNode.ShooterComp.MaxAttackRangeSquared); num3 = Mathf.Clamp(num3, num4, num5); trackingComp.Pitch = 0.2617994f * (num5 - num3) / (num5 - num4); } } else if (trackingComp.Mode == TrackingMode.Location) { float x = (float)trackingComp.TargetX - trackingNode.Transform.CenterX(); float y = (float)trackingComp.TargetZ - trackingNode.Transform.CenterZ(); trackingComp.Yaw = Mathf.Atan2(y, x); } else if (trackingComp.Mode == TrackingMode.Angle) { trackingComp.Yaw = trackingComp.TargetYaw; } } } }
private void FastForwardTrackingAfterWorldLoad(float fastForwardTime) { this.Stop(false); NodeList <TrackingNode> nodeList = Service.Get <EntityController>().GetNodeList <TrackingNode>(); for (TrackingNode trackingNode = nodeList.Head; trackingNode != null; trackingNode = trackingNode.Next) { BuildingComponent buildingComp = trackingNode.BuildingComp; if (buildingComp != null && buildingComp.BuildingType.Type == BuildingType.Turret) { float randomDelayTime = this.GetRandomDelayTime(true); if (randomDelayTime < fastForwardTime) { trackingNode.TrackingComp.IdleFastForwardTimeRemaining = fastForwardTime - randomDelayTime; this.trackComps.Add(trackingNode.TrackingComp); } } } if (this.trackComps.Count > 0) { uint item = Service.Get <ViewTimerManager>().CreateViewTimer(0f, false, new TimerDelegate(this.FastForwardTracking), null); this.idleTimers.Add(item); } }