Пример #1
0
        public void PrepareTargeting(TargetingEvent evt, WeaponNode weapon, [JoinByTank] TankNode tank)
        {
            TargetingData targetingData = evt.TargetingData;
            VerticalSectorsTargetingComponent verticalSectorsTargeting = weapon.verticalSectorsTargeting;
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);

            targetingData.Origin       = accessor.GetBarrelOriginWorld();
            targetingData.Dir          = accessor.GetFireDirectionWorld();
            targetingData.FullDistance = verticalSectorsTargeting.WorkDistance;
            targetingData.MaxAngle     = (verticalSectorsTargeting.VAngleUp <= verticalSectorsTargeting.VAngleDown) ? verticalSectorsTargeting.VAngleDown : verticalSectorsTargeting.VAngleUp;
            LinkedList <TargetSector> instance = BattleCache.targetSectors.GetInstance();

            instance.Clear();
            CollectTargetSectorsEvent eventInstance = BattleCache.collectTargetSectorsEvent.GetInstance().Init();

            eventInstance.TargetSectors = instance;
            TargetingCone cone = new TargetingCone {
                VAngleUp   = verticalSectorsTargeting.VAngleUp,
                VAngleDown = verticalSectorsTargeting.VAngleDown,
                HAngle     = verticalSectorsTargeting.HAngle,
                Distance   = verticalSectorsTargeting.WorkDistance
            };

            eventInstance.TargetingCone = cone;
            base.ScheduleEvent(eventInstance, weapon);
            CollectSectorDirectionsEvent event3 = BattleCache.collectSectorDirectionsEvent.GetInstance().Init();

            event3.TargetSectors = instance;
            event3.TargetingData = targetingData;
            base.ScheduleEvent(event3, weapon);
            base.ScheduleEvent(BattleCache.collectTargetsEvent.GetInstance().Init(targetingData), weapon);
            base.ScheduleEvent(BattleCache.targetEvaluateEvent.GetInstance().Init(targetingData), weapon);
        }
Пример #2
0
        public void CollectSectorDirectionsEvent(Tanks.Battle.ClientCore.API.CollectSectorDirectionsEvent evt, VerticalSectorTargetingNode verticalSectorTargeting, [JoinByTank] WeaponNode weapon)
        {
            TargetingData targetingData = evt.TargetingData;
            VerticalSectorsTargetingComponent verticalSectorsTargeting = verticalSectorTargeting.verticalSectorsTargeting;

            CollectDirection(evt.TargetingData.Origin, evt.TargetingData.Dir, 0f, targetingData);
            if (evt.TargetSectors.Count != 0)
            {
                Vector3 leftDirectionWorld = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance).GetLeftDirectionWorld();
                TargetSectorUtils.CutSectorsByOverlap((LinkedList <TargetSector>)evt.TargetSectors, 1f / verticalSectorsTargeting.RaysPerDegree);
                IEnumerator <TargetSector> enumerator = evt.TargetSectors.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    TargetSector current = enumerator.Current;
                    float        num     = current.Length();
                    int          numRays = (int)Math.Floor((double)(verticalSectorsTargeting.RaysPerDegree * num));
                    this.CollectSectorDirections(targetingData, leftDirectionWorld, current, numRays);
                }
            }
        }
Пример #3
0
        private bool CheckManualTargetingActivity(WeaponRotationControlComponent rotation, VerticalSectorsTargetingComponent verticalSectors, ShaftAimingWorkingStateComponent working, bool isInputActive)
        {
            if (rotation.IsRotating())
            {
                return(true);
            }
            if (!isInputActive)
            {
                return(false);
            }
            float verticalAngle = working.VerticalAngle;

            return((verticalAngle != verticalSectors.VAngleUp) ? (verticalAngle != -verticalSectors.VAngleDown) : false);
        }