Beispiel #1
0
        private static void BuildTankState(Entity tank,
                                           TankGenome genome)
        {
            var state = new TankStateComponent(tank, Globals.EventManager)
            {
                TrackWidth = 1f
            };

            foreach (var attribute in TankGenome.Attributes)
            {
                var percent = (float)genome.GetAttribute(attribute) /
                              TankGenome.MaxAttributeValue;

                SetStateAttribute(state, attribute, percent);
            }

            var rangePercent = (float)genome.GetAttribute(Attribute.GunRange) /
                               TankGenome.MaxAttributeValue;
            var damagePercent = (float)genome.GetAttribute(Attribute.GunDamage) /
                                TankGenome.MaxAttributeValue;
            var lengthBase = state.Dimensions.X / 2f;
            var length     = (lengthBase * 0.5f) * rangePercent + (lengthBase * 0.5f);
            var widthBase  = state.TurretWidth / 4f;
            var width      = (widthBase * 0.5f) * damagePercent + (widthBase * 0.5f);

            state.BarrelDimensions = new Vector2(length, width);

            tank.AddComponent(state);
        }
Beispiel #2
0
//     public static Entity CreateControlledTestTank(Vector2 position,
//       float rotation)
//     {
//       var entity = CreateTankBase();
//
//       var state = new TankStateComponent(entity)
//       {
//         Dimensions = new Vector2(10, 6),
//         TrackWidth = 1,
//         TurretWidth = 4,
//         BarrelDimensions = new Vector2(4, 0.5f),
//         MaxHealth = 1,
//         MaxSpeed = 30,
//         MaxTurnSpeed = 90,
//         SensorRadius = 100
//       };
//       entity.AddComponent(state);
//       entity.AddComponent(
//         new TankKeyboardControlComponent(entity, EventManager));
//
//       if (!entity.Initialize())
//       {
//         Log.ErrorFormat("Could not initialize {0}, discarding", entity.Name);
//         entity.Dispose();
//         return null;
//       }
//
//       entity.Transform.Position = position;
//       entity.Transform.Rotation = rotation;
//       EntityManager.AddEntity(entity);
//       return entity;
//     }

        public static Entity CreateTestTank(Vector2 position, float rotation)
        {
            var entity = CreateTankBase();

            var state = new TankStateComponent(entity, Globals.EventManager)
            {
                Dimensions          = new Vector2(10, 6),
                TrackWidth          = 1,
                TurretWidth         = 4,
                BarrelDimensions    = new Vector2(4, 0.5f),
                TurretRangeOfMotion = 180,

                SensorRadius = 100,
                GunRange     = 75,
                GunSpeed     = 100,
                GunDamage    = 1,
                ReloadTime   = 2,

                MaxHealth             = 20,
                MaxSpeed              = 20,
                MaxTurnSpeed          = 30,
                MaxTurretRotationRate = 30
            };

            entity.AddComponent(state);
            entity.AddComponent(new TankAiComponent(entity, Globals.EntityManager,
                                                    Globals.EventManager, Globals.PhysicsManager));


            if (!entity.Initialize())
            {
                Log.ErrorFmt("Could not initialize {0}, discarding", entity.Name);
                entity.Dispose();
                return(null);
            }

            entity.Transform.Position = position;
            entity.Transform.Rotation = rotation;
            Globals.EntityManager.AddEntity(entity);
            return(entity);
        }
Beispiel #3
0
        private static void SetStateAttribute(TankStateComponent state,
                                              Attribute attribute, float percent)
        {
            float min;
            float max;
            float value;

            switch (attribute)
            {
            case Attribute.Health:
                min             = Properties.Settings.Default.TankMinHealth;
                max             = Properties.Settings.Default.TankMaxHealth;
                value           = ((max - min) * percent) + min;
                state.MaxHealth = value;
                break;

            // size is backwards, more points means a smaller size
            case Attribute.Size:
                percent = 1f - (percent / 2f);
                var length = percent * Properties.Settings.Default.TankBaseLength;
                var width  = percent * Properties.Settings.Default.TankBaseWidth;
                state.Dimensions  = new Vector2(length, width);
                state.TurretWidth = width * 0.75f;
                break;

            case Attribute.Speed:
                min            = Properties.Settings.Default.TankMinSpeed;
                max            = Properties.Settings.Default.TankMaxSpeed;
                value          = ((max - min) * percent) + min;
                state.MaxSpeed = value;
                break;

            case Attribute.TurnSpeed:
                min   = Properties.Settings.Default.TankMinTurnSpeed;
                max   = Properties.Settings.Default.TankMaxTurnSpeed;
                value = ((max - min) * percent) + min;
                state.MaxTurnSpeed = value;
                break;

            case Attribute.TurretRotationSpeed:
                min   = Properties.Settings.Default.TankMinTurretSpeed;
                max   = Properties.Settings.Default.TankMaxTurretSpeed;
                value = ((max - min) * percent) + min;
                state.MaxTurretRotationRate = value;
                break;

            case Attribute.TurretRangeOfMotion:
                min   = Properties.Settings.Default.TankMinTurretRangeOfMotion;
                max   = Properties.Settings.Default.TankMaxTurretRangeOfMotion;
                value = ((max - min) * percent) + min;
                state.TurretRangeOfMotion = value;
                break;

            case Attribute.SensorRange:
                min   = Properties.Settings.Default.TankMinSensorRange;
                max   = Properties.Settings.Default.TankMaxSensorRange;
                value = ((max - min) * percent) + min;
                state.SensorRadius = value;
                break;

            case Attribute.GunRange:
                min            = Properties.Settings.Default.TankMinGunRange;
                max            = Properties.Settings.Default.TankMaxGunRange;
                value          = ((max - min) * percent) + min;
                state.GunRange = value;
                break;

            case Attribute.GunDamage:
                min             = Properties.Settings.Default.TankMinGunDamage;
                max             = Properties.Settings.Default.TankMaxGunDamage;
                value           = ((max - min) * percent) + min;
                state.GunDamage = value;
                break;

            case Attribute.GunSpeed:
                min            = Properties.Settings.Default.TankMinGunSpeed;
                max            = Properties.Settings.Default.TankMaxGunSpeed;
                value          = ((max - min) * percent) + min;
                state.GunSpeed = value;
                break;

            case Attribute.GunReloadTime:
                // min and max intentionally reversed so that more points gives
                // a shorter reload time
                min              = Properties.Settings.Default.TankMaxReloadSpeed;
                max              = Properties.Settings.Default.TankMinReloadSpeed;
                value            = ((max - min) * percent) + min;
                state.ReloadTime = value;
                break;
            }
        }