예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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;
                    }
                }
            }
        }
예제 #3
0
        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);
            }
        }