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); } } }
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); }
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); }
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); }
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); }
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); } } }
public void SendShot(ShotPrepareEvent evt, BlockedWeaponNode weaponNode) { MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weaponNode.muzzlePoint, weaponNode.weaponInstance); base.ScheduleEvent(new SelfShotEvent(accessor.GetFireDirectionWorld()), weaponNode); }
public void SendShot(ShaftAimingShotPrepareEvent evt, UndergroundShaftNode weapon) { MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance); base.ScheduleEvent(new SelfShotEvent(accessor.GetFireDirectionWorld()), weapon); }
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); }