public void AngleDeltaTest(float alpha, float beta, float delta) { var alphaRad = MathUtility.ToRadians(alpha); var betaRad = MathUtility.ToRadians(beta); var deltaRad = MathUtility.ToRadians(delta); Assert.Equal(deltaRad, MathUtility.CalculateAngleDelta(alphaRad, betaRad), Precision); }
private bool Rotate(float targetYaw, float deltaTime) { var deltaYaw = MathUtility.CalculateAngleDelta(targetYaw, _gameObject.TurretYaw); if (MathF.Abs(deltaYaw) > 0.15f) { _gameObject.TurretYaw -= MathF.Sign(deltaYaw) * deltaTime * MathUtility.ToRadians(_moduleData.TurretTurnRate); return(true); } _gameObject.TurretYaw -= deltaYaw; return(false); }
private bool FoundTargetWhileScanning(BehaviorUpdateContext context, BitArray <AutoAcquireEnemiesType> autoAcquireEnemiesWhenIdle) { return(false); var attacksBuildings = autoAcquireEnemiesWhenIdle.Get(AutoAcquireEnemiesType.AttackBuildings); var scanRange = _gameObject.CurrentWeapon.Template.AttackRange; var restrictedByScanAngle = _moduleData.MinIdleScanAngle != 0 && _moduleData.MaxIdleScanAngle != 0; var scanAngleOffset = context.GameContext.Random.NextDouble() * (_moduleData.MaxIdleScanAngle - _moduleData.MinIdleScanAngle) + _moduleData.MinIdleScanAngle; var nearbyObjects = context.GameContext.Scene3D.Quadtree.FindNearby(_gameObject, _gameObject.Transform, scanRange); foreach (var obj in nearbyObjects) { if (obj.Definition.KindOf.Get(ObjectKinds.Structure) && !attacksBuildings) { continue; } if (restrictedByScanAngle) { // TODO: test with GLAVehicleTechnicalChassisOne var deltaTranslation = obj.Translation - _gameObject.Translation; var direction = deltaTranslation.Vector2XY(); var angleToObject = MathUtility.GetYawFromDirection(direction); var angleDelta = MathUtility.CalculateAngleDelta(angleToObject, _gameObject.EulerAngles.Z + MathUtility.ToRadians(_moduleData.NaturalTurretAngle)); if (angleDelta < -scanAngleOffset || scanAngleOffset < angleDelta) { continue; } } _gameObject.CurrentWeapon.SetTarget(new WeaponTarget(obj)); return(true); } return(false); }