예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }