Ejemplo n.º 1
0
        public void CollectTargetSectors(CollectTargetSectorsEvent e, WeaponNode weaponNode, [JoinByBattle] ICollection <TargetTankNode> targetTankNodes, WeaponNode weaponNode1, [JoinByTank] OwnerTankNode ownerTankNode, [JoinByTeam] Optional <TeamNode> team)
        {
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weaponNode.muzzlePoint, weaponNode.weaponInstance);
            bool   flag   = team.IsPresent();
            long   num    = !flag ? 0L : team.Get().teamGroup.Key;
            LookAt lookAt = new LookAt {
                Position = accessor.GetBarrelOriginWorld(),
                Forward  = accessor.GetFireDirectionWorld(),
                Left     = accessor.GetLeftDirectionWorld(),
                Up       = accessor.GetUpDirectionWorld()
            };
            IEnumerator <TargetTankNode> enumerator = targetTankNodes.GetEnumerator();

            while (enumerator.MoveNext())
            {
                TargetTankNode current = enumerator.Current;
                if (!ownerTankNode.Entity.Equals(current.Entity) && (!flag || (num != current.Entity.GetComponent <TeamGroupComponent>().Key)))
                {
                    BoxCollider tankToTankCollider = (BoxCollider)current.tankColliders.TankToTankCollider;
                    LookTo      lookTo             = new LookTo {
                        Position = tankToTankCollider.bounds.center,
                        Radius   = this.CalculateTankMinimalRadius(lookAt.Forward, tankToTankCollider)
                    };
                    this.AddTargetSector(lookAt, lookTo, e.TargetingCone, e.TargetSectors, e.VAllowableAngleAcatter, e.HAllowableAngleAcatter);
                }
            }
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        public void ApplyKickback(FixedUpdateEvent evt, KickbackNode weapon, [JoinByTank] TankNode tank)
        {
            KickbackComponent   kickback = weapon.kickback;
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);
            float deltaTime = evt.DeltaTime;

            VulcanPhysicsUtils.ApplyVulcanForce(((-accessor.GetFireDirectionWorld() * kickback.KickbackForce) * WeaponConstants.WEAPON_FORCE_MULTIPLIER) * deltaTime, tank.rigidbody.Rigidbody, accessor.GetWorldMiddlePosition(), tank.tankFalling, tank.track);
        }
Ejemplo n.º 4
0
        public void StartKickback(BaseShotEvent evt, KickbackNode weapon, [JoinByTank] TankNode tank)
        {
            KickbackComponent   kickback      = weapon.kickback;
            MuzzleLogicAccessor accessor      = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);
            Vector3             vector        = -accessor.GetFireDirectionWorld() * kickback.KickbackForce;
            Vector3             worldPosition = accessor.GetWorldPosition();

            tank.rigidbody.Rigidbody.AddForceAtPositionSafe(vector * WeaponConstants.WEAPON_FORCE_MULTIPLIER, worldPosition);
        }
Ejemplo n.º 5
0
        public void PrepareTargeting(TargetingEvent evt, TargetingNode conicTargeting)
        {
            TargetingData           targetingData = evt.TargetingData;
            ConicTargetingComponent component     = conicTargeting.conicTargeting;
            MuzzleLogicAccessor     accessor      = new MuzzleLogicAccessor(conicTargeting.muzzlePoint, conicTargeting.weaponInstance);

            targetingData.Origin       = accessor.GetWorldPositionShiftDirectionBarrel(component.FireOriginOffsetCoeff);
            targetingData.Dir          = accessor.GetFireDirectionWorld();
            targetingData.FullDistance = component.WorkDistance;
            targetingData.MaxAngle     = component.HalfConeAngle;
            base.ScheduleEvent(BattleCache.collectDirectionsEvent.GetInstance().Init(targetingData), conicTargeting);
            base.ScheduleEvent(BattleCache.collectTargetsEvent.GetInstance().Init(targetingData), conicTargeting);
            base.ScheduleEvent(BattleCache.targetEvaluateEvent.GetInstance().Init(targetingData), conicTargeting);
        }
Ejemplo n.º 6
0
        public void PrepareTargeting(TargetingEvent evt, TargetingNode verticalTargeting)
        {
            TargetingData targetingData          = evt.TargetingData;
            VerticalTargetingComponent component = verticalTargeting.verticalTargeting;
            MuzzleLogicAccessor        accessor  = new MuzzleLogicAccessor(verticalTargeting.muzzlePoint, verticalTargeting.weaponInstance);

            targetingData.Origin       = accessor.GetWorldPosition();
            targetingData.Dir          = accessor.GetFireDirectionWorld();
            targetingData.FullDistance = component.WorkDistance;
            targetingData.MaxAngle     = (component.AngleUp <= component.AngleDown) ? component.AngleDown : component.AngleUp;
            base.ScheduleEvent(BattleCache.collectDirectionsEvent.GetInstance().Init(targetingData), verticalTargeting);
            base.ScheduleEvent(BattleCache.collectTargetsEvent.GetInstance().Init(targetingData), verticalTargeting);
            base.ScheduleEvent(BattleCache.targetEvaluateEvent.GetInstance().Init(targetingData), verticalTargeting);
        }
 public void CheckWorkActivationState(TimeUpdateEvent evt, ShaftAimingWorkActivationWeaponControllerNode weapon)
 {
     if (!this.CheckHandleWeaponIntersectionStatus(weapon.Entity))
     {
         if (!InputManager.CheckAction(ShotActions.SHOT))
         {
             this.MakeQuickShot(weapon.Entity);
         }
         else if (weapon.shaftAimingWorkActivationState.ActivationTimer < weapon.shaftStateConfig.ActivationToWorkingTransitionTimeSec)
         {
             weapon.shaftAimingWorkActivationState.ActivationTimer += evt.DeltaTime;
         }
         else
         {
             MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);
             ShaftAimingWorkingStateComponent component = new ShaftAimingWorkingStateComponent {
                 InitialEnergy    = weapon.weaponEnergy.Energy,
                 WorkingDirection = accessor.GetFireDirectionWorld()
             };
             StateUtils.SwitchEntityState(weapon.Entity, component, this.weaponStates);
         }
     }
 }
Ejemplo n.º 8
0
        public void SendShot(ShotPrepareEvent evt, BlockedWeaponNode weaponNode)
        {
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weaponNode.muzzlePoint, weaponNode.weaponInstance);

            base.ScheduleEvent(new SelfShotEvent(accessor.GetFireDirectionWorld()), weaponNode);
        }
Ejemplo n.º 9
0
        public void SendShot(ShaftAimingShotPrepareEvent evt, UndergroundShaftNode weapon)
        {
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);

            base.ScheduleEvent(new SelfShotEvent(accessor.GetFireDirectionWorld()), weapon);
        }
Ejemplo n.º 10
0
        public void UpdateVerticalTargetingAngle(WeaponRotationUpdateVerticalEvent e, AimingVerticalTargetingControllerNode weapon, [JoinByUser] SingleNode <MouseControlStateHolderComponent> mouseControlStateHolder)
        {
            float min                  = -weapon.verticalSectorsTargeting.VAngleDown;
            float vAngleUp             = weapon.verticalSectorsTargeting.VAngleUp;
            float maxVerticalSpeed     = weapon.shaftAimingSpeed.MaxVerticalSpeed;
            float verticalAcceleration = weapon.shaftAimingSpeed.VerticalAcceleration;
            int   shaftElevationDirectionByKeyboard = weapon.weaponRotationControl.ShaftElevationDirectionByKeyboard;
            bool  mouseControlEnable = mouseControlStateHolder.component.MouseControlEnable;

            if (!mouseControlEnable)
            {
                weapon.weaponRotationControl.MouseShaftAimCumulativeVerticalAngle = 0f;
            }
            else
            {
                shaftElevationDirectionByKeyboard = (int)Mathf.Sign(weapon.weaponRotationControl.MouseShaftAimCumulativeVerticalAngle);
                weapon.weaponRotationControl.MouseShaftAimCumulativeVerticalAngle = Mathf.Clamp(weapon.weaponRotationControl.MouseShaftAimCumulativeVerticalAngle, min - weapon.shaftAimingWorkingState.VerticalAngle, vAngleUp - weapon.shaftAimingWorkingState.VerticalAngle);
            }
            bool isInputActive = false;

            if (weapon.shaftAimingWorkingState.VerticalElevationDir != shaftElevationDirectionByKeyboard)
            {
                weapon.shaftAimingWorkingState.VerticalSpeed        = 0f;
                weapon.shaftAimingWorkingState.VerticalElevationDir = shaftElevationDirectionByKeyboard;
                isInputActive = shaftElevationDirectionByKeyboard != 0;
            }
            else
            {
                weapon.shaftAimingWorkingState.VerticalElevationDir = shaftElevationDirectionByKeyboard;
                weapon.shaftAimingWorkingState.VerticalSpeed       += verticalAcceleration * e.DeltaTime;
                weapon.shaftAimingWorkingState.VerticalSpeed        = Mathf.Clamp(weapon.shaftAimingWorkingState.VerticalSpeed, 0f, maxVerticalSpeed);
                float num6 = (shaftElevationDirectionByKeyboard * weapon.shaftAimingWorkingState.VerticalSpeed) * e.DeltaTime;
                if (!mouseControlEnable)
                {
                    isInputActive = num6 != 0f;
                    weapon.shaftAimingWorkingState.VerticalAngle += num6;
                    weapon.shaftAimingWorkingState.VerticalAngle  = Mathf.Clamp(weapon.shaftAimingWorkingState.VerticalAngle, min, vAngleUp);
                }
                else if (!weapon.weaponRotationControl.BlockRotate)
                {
                    num6          = (shaftElevationDirectionByKeyboard <= 0) ? Mathf.Clamp(num6, weapon.weaponRotationControl.MouseShaftAimCumulativeVerticalAngle, 0f) : Mathf.Clamp(num6, 0f, weapon.weaponRotationControl.MouseShaftAimCumulativeVerticalAngle);
                    isInputActive = num6 != 0f;
                    weapon.weaponRotationControl.MouseShaftAimCumulativeVerticalAngle -= num6;
                    weapon.shaftAimingWorkingState.VerticalAngle += num6;
                    weapon.shaftAimingWorkingState.VerticalAngle  = Mathf.Clamp(weapon.shaftAimingWorkingState.VerticalAngle, min, vAngleUp);
                }
            }
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);

            weapon.shaftAimingWorkingState.WorkingDirection = (Vector3)(Quaternion.AngleAxis(weapon.shaftAimingWorkingState.VerticalAngle, accessor.GetLeftDirectionWorld()) * accessor.GetFireDirectionWorld());
            weapon.shaftAimingWorkingState.IsActive         = this.CheckManualTargetingActivity(weapon.weaponRotationControl, weapon.verticalSectorsTargeting, weapon.shaftAimingWorkingState, isInputActive);
        }