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 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); }