예제 #1
0
 public void CopyBotParameters(MyMwcObjectBuilder_SmallShip_Bot copyFrom)
 {
     AITemplate     = copyFrom.AITemplate;
     Aggressivity   = copyFrom.Aggressivity;
     SeeDistance    = copyFrom.SeeDistance;
     SleepDistance  = copyFrom.SleepDistance;
     PatrolMode     = copyFrom.PatrolMode;
     ShipTemplateID = copyFrom.ShipTemplateID;
 }
        public MyGuiScreenEditorSmallShip(MyMwcObjectBuilder_SmallShip_Bot botBuilder, List<MySmallShipBuilderWithName> templateBuilders, int selectedIndex)
            : base(null, new Vector2(0.5f, 0.5f), MyGuiConstants.SCREEN_BACKGROUND_COLOR, null, MyTextsWrapperEnum.EditSmallShip)
        {
            m_botBuilder = botBuilder;
            m_templatesBuilders = templateBuilders;

            Init();

            m_selectShipFactionCombobox.SelectItemByKey((int)m_botBuilder.Faction);
            m_selectAITemplateCombobox.SelectItemByKey((int)m_botBuilder.AITemplate);
            m_aggresivitySlider.SetValue(m_botBuilder.Aggressivity);
            m_seeDistanceSlider.SetValue(m_botBuilder.SeeDistance);
            m_selectSmallShipCombobox.SelectItemByIndex(selectedIndex);
        }
        private List<MySmallShipBuilderWithName> GetTemplatesForCombobox(MyMwcObjectBuilder_SmallShip_Bot selectedBuilder, out int? selectedIndex) 
        {            
            int? foundedIndex = null;
            int currentIndex = 0;
            List<MySmallShipBuilderWithName> templatesForCombobox = new List<MySmallShipBuilderWithName>();            
            for (int i = 0; i < MyGuiSmallShipHelpers.MyMwcObjectBuilder_SmallShip_TypesEnumValues.Length; i++)
            {
                MyMwcObjectBuilder_SmallShip_TypesEnum shipType = (MyMwcObjectBuilder_SmallShip_TypesEnum)MyGuiSmallShipHelpers.MyMwcObjectBuilder_SmallShip_TypesEnumValues.GetValue(i);                
                StringBuilder templateName;
                // insert no teplate       
                templateName = GetTemplatePrefix(shipType);                
                templateName.Append("NO TEMPLATE");
                MyMwcObjectBuilder_SmallShip_Bot builderToAdd = null;
                if (selectedBuilder != null && selectedBuilder.ShipTemplateID == null && selectedBuilder.ShipType == shipType) 
                {
                    builderToAdd = selectedBuilder;
                    foundedIndex = currentIndex;
                }
                else
                {
                    builderToAdd = MyMwcObjectBuilder_SmallShip_Bot.CreateObjectBuilderWithAllItems(shipType, MyShipTypeConstants.GetShipTypeProperties(shipType).GamePlay.CargoCapacity);
                    if (selectedBuilder != null) 
                    {
                        builderToAdd.CopyBotParameters(selectedBuilder);
                    }
                }
                templatesForCombobox.Add(new MySmallShipBuilderWithName(templateName, builderToAdd));
                currentIndex++;

                // real templates
                foreach (MySmallShipTemplate template in MySmallShipTemplates.GetTemplatesForType(shipType)) 
                {
                    if (selectedBuilder != null && selectedBuilder.ShipTemplateID != null && selectedBuilder.ShipTemplateID.Value == template.ID) 
                    {
                        foundedIndex = currentIndex;
                    }
                    builderToAdd = new MyMwcObjectBuilder_SmallShip_Bot(template.Builder);
                    if (selectedBuilder != null)
                    {
                        builderToAdd.CopyBotParameters(selectedBuilder);
                    }
                    templateName = GetTemplatePrefix(shipType);
                    MyMwcUtils.AppendStringBuilder(templateName, template.Name);
                    templatesForCombobox.Add(new MySmallShipBuilderWithName(templateName, builderToAdd, template));
                    currentIndex++;
                }
            }
            selectedIndex = foundedIndex;
            return templatesForCombobox;
        }
예제 #4
0
        private void SetupWeapons(MyMwcObjectBuilder_SmallShip_Bot objectBuilder)
        {
            m_botWeaponParamsAllSlots = new MyBotParams[Enum.GetNames(typeof(MyMwcObjectBuilder_FireKeyEnum)).Length];

            bool autoCannonMounted = Weapons.HasMountedWeapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Autocanon);
            bool machineGunMounted = Weapons.HasMountedWeapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Machine_Gun);
            bool shotgunMounted = Weapons.HasMountedWeapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Shotgun);
            bool sniperMounted = Weapons.HasMountedWeapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Sniper);
            bool missileLauncherMounted = Weapons.HasMountedWeapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Missile_Launcher);
            bool cannonMounted = Weapons.HasMountedWeapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Cannon);
            bool frontLauncherMounted = Weapons.HasMountedWeapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Universal_Launcher_Front);

            if (machineGunMounted)  // Will be overwritten when autoCannonm mounted
            {
                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum[] ammoPriorities = { MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Machine_Gun_SAPHEI, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Machine_Gun_High_Speed, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Machine_Gun_Basic, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Machine_Gun_BioChem, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Machine_Gun_EMP };
                TryAssignAmmo(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Machine_Gun, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_FireKeyEnum.Primary, ammoPriorities);
            }
            
            if (autoCannonMounted)
	        {
                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum[] ammoPriorities = { MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_SAPHEI, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_High_Speed, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_BioChem, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_EMP };
                TryAssignAmmo(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Autocanon, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_FireKeyEnum.Primary, ammoPriorities);
	        }

            if (shotgunMounted)
            {
                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum[] ammoPriorities = { MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Shotgun_Explosive, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Shotgun_Armor_Piercing, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Shotgun_High_Speed, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Shotgun_Basic };
                TryAssignAmmo(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Shotgun, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_FireKeyEnum.Secondary, ammoPriorities);
            }

            if (sniperMounted)
            {
                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum[] ammoPriorities = { MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Sniper_SAPHEI, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Sniper_High_Speed, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Sniper_BioChem, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Sniper_EMP };
                TryAssignAmmo(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Sniper, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_FireKeyEnum.Third, ammoPriorities);
            }

            if (missileLauncherMounted)
            {
                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum[] ammoPriorities = { MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Guided_Missile_Visual_Detection, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Guided_Missile_Engine_Detection, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Missile_Basic, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Missile_BioChem, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Missile_EMP };
                TryAssignAmmo(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Missile_Launcher, MyMwcObjectBuilder_AmmoGroupEnum.Missile, MyMwcObjectBuilder_FireKeyEnum.Fourth, ammoPriorities);
            }

            if (cannonMounted)
            {
                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum[] ammoPriorities = { MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_Basic, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_BioChem, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_EMP };
                TryAssignAmmo(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Cannon, MyMwcObjectBuilder_AmmoGroupEnum.Cannon, MyMwcObjectBuilder_FireKeyEnum.Fifth, ammoPriorities);
            }

            if (frontLauncherMounted)
            {
                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum[] flashAmmo = { MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Universal_Launcher_Flash_Bomb };
                TryAssignAmmo(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Universal_Launcher_Front, MyMwcObjectBuilder_AmmoGroupEnum.UniversalLauncherFront, MyMwcObjectBuilder_FireKeyEnum.FlashBombFront, flashAmmo);

                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum[] hologramAmmo = { MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Universal_Launcher_Hologram };
                TryAssignAmmo(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Universal_Launcher_Front, MyMwcObjectBuilder_AmmoGroupEnum.UniversalLauncherFront, MyMwcObjectBuilder_FireKeyEnum.HologramFront, hologramAmmo);

                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum[] smokeAmmo = { MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Universal_Launcher_Smoke_Bomb};
                TryAssignAmmo(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Universal_Launcher_Front, MyMwcObjectBuilder_AmmoGroupEnum.UniversalLauncherFront, MyMwcObjectBuilder_FireKeyEnum.SmokeBombFront, smokeAmmo);
            }
        }
예제 #5
0
        public virtual void Init(string hudLabelText, MyMwcObjectBuilder_SmallShip_Bot objectBuilder)
        {
            System.Diagnostics.Debug.Assert(objectBuilder.Faction != 0);

            //StringBuilder label = new StringBuilder(hudLabelText);
            TotalAliveBots++;

            string fixedHudLabelText = hudLabelText;
            if (string.IsNullOrEmpty(hudLabelText) || hudLabelText == GetFriendlyName())
            {
                fixedHudLabelText = MyTextsWrapper.GetFormatString(MyTextsWrapperEnum.Ship);
            }

            base.Init(fixedHudLabelText, objectBuilder);

            Faction = objectBuilder.Faction;
            m_aiTemplate = MyBotAITemplates.GetTemplate(objectBuilder.AITemplate);
            Aggressivity = objectBuilder.Aggressivity;
            SeeDistance = objectBuilder.SeeDistance == 0 ? 1000 : objectBuilder.SeeDistance;
            SleepDistance = objectBuilder.SleepDistance == 0 ? 1000 : objectBuilder.SleepDistance;
            PatrolMode = objectBuilder.PatrolMode;
            ActiveAI = true;
            m_leaderId = objectBuilder.Leader;
            AITemplate.SetIdleBehavior(objectBuilder.IdleBehavior);
            LeaderLostEnabled = objectBuilder.LeaderLostEnabled;
            ActiveAI = ActiveAI;

            SetupWeapons(objectBuilder);

            SetupDifficulty();

            //if (hudLabelText == GetFriendlyName())
            //{
            //    label = new StringBuilder("");
            //}

            //if (string.IsNullOrEmpty(hudLabelText) || hudLabelText == GetFriendlyName())
            //{
            //    DisplayName = MyTextsWrapper.GetFormatString(MyTextsWrapperEnum.Ship);
            //}

            //MyHud.ChangeText(this, label, null, 10000, MyHudIndicatorFlagsEnum.SHOW_ALL);


            MyModelDummy dummy;
            if (GetModelLod0().Dummies.TryGetValue("destruction", out dummy))
            {
                m_biochemEffectLocalMatrix = dummy.Matrix;
            }

            m_shock_time = -1;

            MyBotCoordinator.AddBot(this);
            
            InitSpoiledHolograms();

            MyEntities.OnEntityRemove += MyEntities_OnEntityRemove;

            m_dangerZoneId = MyDangerZones.Instance.Register(this);
            
            MySession.Static.LinkEntities += OnLinkEntities;
        }
예제 #6
0
        private MySmallShipBot CreateShip(MyMwcObjectBuilder_SmallShip_Bot bldr, Vector3 position)
        {
            MySmallShipBot bot = CreateBotFromBuilder(bldr, position);
            MyEntities.Add(bot);

            SetBotPath(bot);

            return bot;
        }
예제 #7
0
        private MySmallShipBot CreateBotFromBuilder(MyMwcObjectBuilder_SmallShip_Bot bldr, Vector3 position)
        {
            //hax
            bldr.ArmorHealth = MyGameplayConstants.HEALTH_BASIC;
            bldr.ShipMaxHealth = MyGameplayConstants.HEALTH_BASIC;
            bldr.Fuel = float.MaxValue;
            bldr.Oxygen = float.MaxValue;
            bldr.OwnerId = this.EntityId.Value.NumericValue;
            if (bldr.ShipTemplateID != null) 
            {
                var shipTemplate = MySmallShipTemplates.GetTemplateForSpawn(bldr.ShipTemplateID.Value);
                Debug.Assert(shipTemplate != null, string.Format("ShipTemplate {0} was not found!", bldr.ShipTemplateID.Value));
                if (shipTemplate != null)
                {
                    shipTemplate.ApplyToSmallShipBuilder(bldr);
                }
            }
            bldr.Faction = this.Faction;

            MySmallShipBot bot = (MySmallShipBot)MyEntities.CreateFromObjectBuilder(null, bldr, Matrix.CreateWorld(position, Vector3.Backward, Vector3.Up));

            return bot;
        }
예제 #8
0
        public static MyMwcObjectBuilder_SmallShip_Bot CreateObjectBuilderWithAllItems(MyMwcObjectBuilder_SmallShip_TypesEnum shipType, int maxInventoryItems)
        {
            List <MyMwcObjectBuilder_SmallShip_Weapon> weapons        = new List <MyMwcObjectBuilder_SmallShip_Weapon>();
            List <MyMwcObjectBuilder_AssignmentOfAmmo> ammoAssignment = new List <MyMwcObjectBuilder_AssignmentOfAmmo>();
            List <MyMwcObjectBuilder_InventoryItem>    inventoryItems = new List <MyMwcObjectBuilder_InventoryItem>();

            // weapons
            foreach (MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum weapon in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum)))
            {
                var weaponBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(weapon);
                weaponBuilder.SetAutoMount();
                weapons.Add(weaponBuilder);
                // we want have 2x autocanon
                if (weapon == MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Autocanon)
                {
                    var autocannonBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(weapon);
                    autocannonBuilder.SetAutoMount();
                    weapons.Add(autocannonBuilder);
                }
            }

            // ammo assignment
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Primary, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Secondary, MyMwcObjectBuilder_AmmoGroupEnum.Missile, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Missile_Basic));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Third, MyMwcObjectBuilder_AmmoGroupEnum.UniversalLauncherFront, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Universal_Launcher_Mine_Basic));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Fourth, MyMwcObjectBuilder_AmmoGroupEnum.UniversalLauncherBack, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Universal_Launcher_Mine_Smart));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Fifth, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic));

            // inventory items
            // ammo
            foreach (MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum ammo in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum)))
            {
                inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Ammo(ammo), 1000f));
            }

            // tools
            foreach (MyMwcObjectBuilder_SmallShip_Tool_TypesEnum tool in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Tool_TypesEnum)))
            {
                inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Tool(tool), 1f));
            }

            // radars
            foreach (MyMwcObjectBuilder_SmallShip_Radar_TypesEnum radar in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Radar_TypesEnum)))
            {
                inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Radar(radar), 1f));
            }

            // engines
            foreach (MyMwcObjectBuilder_SmallShip_Engine_TypesEnum engine in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Engine_TypesEnum)))
            {
                if (engine != MyMwcObjectBuilder_SmallShip_Engine_TypesEnum.PowerCells_1)
                {
                    inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Engine(engine), 1f));
                }
            }

            // armors
            foreach (MyMwcObjectBuilder_SmallShip_Armor_TypesEnum armor in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Armor_TypesEnum)))
            {
                if (armor != MyMwcObjectBuilder_SmallShip_Armor_TypesEnum.Basic)
                {
                    inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Armor(armor), 1f));
                }
            }

            // foundation factory
            var foundationFactory = new MyMwcObjectBuilder_PrefabFoundationFactory();

            foundationFactory.PrefabHealthRatio = 1f;
            foundationFactory.PrefabMaxHealth   = null;
            inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(foundationFactory, 1f));
            inventoryItems.RemoveAll(x => MyMwcObjectBuilder_InventoryItem.IsDisabled(x));

            if (inventoryItems.Count > maxInventoryItems)
            {
                inventoryItems = inventoryItems.GetRange(0, maxInventoryItems);
            }

            MyMwcObjectBuilder_SmallShip_Bot builder =
                new MyMwcObjectBuilder_SmallShip_Bot(
                    shipType,
                    new MyMwcObjectBuilder_Inventory(inventoryItems, maxInventoryItems),
                    weapons,
                    new MyMwcObjectBuilder_SmallShip_Engine(MyMwcObjectBuilder_SmallShip_Engine_TypesEnum.PowerCells_1),
                    ammoAssignment,
                    new MyMwcObjectBuilder_SmallShip_Armor(MyMwcObjectBuilder_SmallShip_Armor_TypesEnum.Basic),
                    new MyMwcObjectBuilder_SmallShip_Radar(MyMwcObjectBuilder_SmallShip_Radar_TypesEnum.Radar_1),
                    null, 1f, float.MaxValue, float.MaxValue, float.MaxValue,
                    true, false, MyMwcObjectBuilder_FactionEnum.None, MyAITemplateEnum.DEFAULT, 0, 1000, 1000, MyPatrolMode.CYCLE, null, BotBehaviorType.IDLE, 200f, 0, false, true);

            return(builder);
        }
        public override void OnOkClick(MyGuiControlButton sender)
        {
            base.OnOkClick(sender);

            if (m_botBuilder != null)
            {
                m_botBuilder.Faction = (MyMwcObjectBuilder_FactionEnum)m_selectShipFactionCombobox.GetSelectedKey();
                m_botBuilder.AITemplate = (MyAITemplateEnum)m_selectAITemplateCombobox.GetSelectedKey();
                m_botBuilder.Aggressivity = m_aggresivitySlider.GetValue();
                m_botBuilder.SeeDistance = m_seeDistanceSlider.GetValue();
                var templateBuilder = m_templatesBuilders[m_selectSmallShipCombobox.GetSelectedKey()];
                bool isTemplate = templateBuilder.UserData != null;
                if (isTemplate)
                {
                    var template = templateBuilder.UserData as MySmallShipTemplate;                    
                    if (m_botBuilder.ShipTemplateID == null)
                    {
                        if (m_inventoryBuilder == null)
                        {
                            m_botBuilder.Inventory = null;
                            m_botBuilder.Weapons = null;
                            m_botBuilder.Engine = null;
                            m_botBuilder.Armor = null;
                            m_botBuilder.Radar = null;
                        }
                        else
                        {
                            m_botBuilder.Inventory = m_inventoryBuilder.Inventory;
                            m_botBuilder.Weapons = m_inventoryBuilder.Weapons;
                            m_botBuilder.Engine = m_inventoryBuilder.Engine;
                            m_botBuilder.Armor = m_inventoryBuilder.Armor;
                            m_botBuilder.Radar = m_inventoryBuilder.Radar;
                        }
                    }                    
                    m_botBuilder.ShipTemplateID = template.ID;
                }
                else
                {
                    var builderWithAllItems = MyMwcObjectBuilder_SmallShip_Bot.CreateObjectBuilderWithAllItems(templateBuilder.Builder.ShipType, MyShipTypeConstants.GetShipTypeProperties(templateBuilder.Builder.ShipType).GamePlay.CargoCapacity);
                    if (m_botBuilder.ShipTemplateID != null) 
                    {
                        m_botBuilder.Inventory = builderWithAllItems.Inventory;
                        m_botBuilder.Weapons = builderWithAllItems.Weapons;
                        m_botBuilder.Engine = builderWithAllItems.Engine;
                        m_botBuilder.Armor = builderWithAllItems.Armor;
                        m_botBuilder.Radar = builderWithAllItems.Radar;
                    }
                    m_botBuilder.ShipTemplateID = null;
                }
                m_botBuilder.ShipType = templateBuilder.Builder.ShipType;
                CloseAndCallOnOk();
            }
            else if (m_bot != null) // edit SmallShip
            {
                Matrix matrix = m_bot.WorldMatrix;
                MyMwcObjectBuilder_SmallShip_Bot botBuilder = m_bot.GetObjectBuilder(true) as MyMwcObjectBuilder_SmallShip_Bot;
                System.Diagnostics.Debug.Assert(botBuilder != null);

                botBuilder.Faction = (MyMwcObjectBuilder_FactionEnum)m_selectShipFactionCombobox.GetSelectedKey();
                botBuilder.AITemplate = (MyAITemplateEnum)m_selectAITemplateCombobox.GetSelectedKey();
                botBuilder.Aggressivity = m_aggresivitySlider.GetValue();
                botBuilder.SeeDistance = m_seeDistanceSlider.GetValue();
                botBuilder.ShipType = (MyMwcObjectBuilder_SmallShip_TypesEnum)m_selectSmallShipCombobox.GetSelectedKey();

                if (m_inventoryBuilder != null)
                {
                    botBuilder.Inventory = m_inventoryBuilder.Inventory;
                    botBuilder.Weapons = m_inventoryBuilder.Weapons;
                    botBuilder.Engine = m_inventoryBuilder.Engine;
                    botBuilder.Armor = m_inventoryBuilder.Armor;
                    botBuilder.Radar = m_inventoryBuilder.Radar;
                }

                MyEditorGizmo.ClearSelection();
                m_newBotBuilderToInit = botBuilder;
                m_newBotWorldMatrixToInit = matrix;
                m_bot.MarkForClose();
                m_bot.OnClose += OnOldBodClose;
            }
            else // create SmallShip
            {
                MyMwcObjectBuilder_SmallShip_TypesEnum shipType = (MyMwcObjectBuilder_SmallShip_TypesEnum)
                    Enum.ToObject(typeof(MyMwcObjectBuilder_SmallShip_TypesEnum), m_selectSmallShipCombobox.GetSelectedKey());

                MyMwcObjectBuilder_FactionEnum shipFaction = (MyMwcObjectBuilder_FactionEnum)
                    Enum.ToObject(typeof(MyMwcObjectBuilder_FactionEnum), m_selectShipFactionCombobox.GetSelectedKey());

                MyMwcPositionAndOrientation positionAndOrientation = new MyMwcPositionAndOrientation(m_newObjectPosition, Vector3.Forward, Vector3.Up);
                MyMwcObjectBuilder_SmallShip_Bot botBuilder = MyEditor.CreateDefaultBotObjectBuilder(positionAndOrientation.Position, positionAndOrientation.Forward,
                    positionAndOrientation.Up, shipType, shipFaction);

                botBuilder.AITemplate = (MyAITemplateEnum)m_selectAITemplateCombobox.GetSelectedKey();
                botBuilder.Aggressivity = m_aggresivitySlider.GetValue();
                botBuilder.SeeDistance = m_seeDistanceSlider.GetValue();

                MyEditor.Static.CreateFromObjectBuilder(botBuilder, Matrix.CreateWorld(m_newObjectPosition, Vector3.Forward, Vector3.Up), m_screenPosition);
                CloseAndCallOnOk();
            }            
        }
예제 #10
0
        public virtual void Init(string hudLabelText, MyMwcObjectBuilder_SmallShip_Bot objectBuilder/*, Matrix matrix, float health*/)
        {
            System.Diagnostics.Debug.Assert(objectBuilder.Faction != 0);
            if (objectBuilder.Faction == 0)
            {
                Trace.SendMsgLastCall(objectBuilder.EntityId.ToString());
            }
            base.Init(hudLabelText, objectBuilder/*, matrix, health*/);

            Faction = objectBuilder.Faction;

            // Array of params for all weapons on ship 
            m_botWeaponParamsAllSlots = new MyBotParams[Enum.GetNames(typeof(MyMwcObjectBuilder_FireKeyEnum)).Length];

            //Assignment of constants for each weapon
            foreach (var item in objectBuilder.AssignmentOfAmmo)
            {
                //Set params for weapon in selected slot
                MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum ammo = item.AmmoType;
                MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum? weaponTypeNullable = MyGuiSmallShipHelpers.GetWeaponType(item.AmmoType, item.Group);
                MyMwcObjectBuilder_FireKeyEnum fireKey = item.FireKey;

                if (weaponTypeNullable != null)
                {
                    var weaponType = (MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum)weaponTypeNullable;
                    MyBotParams botParamsOneSlot = SettingsForWeaponType(weaponType, ammo);
                    botParamsOneSlot.FireKey = fireKey;
                    m_botWeaponParamsAllSlots[(int)fireKey - 1] = botParamsOneSlot;

                    //store all weapon types bot has
                    m_weaponTypesMounted |= weaponType;
                }
            }

            //always 0 super easy 1 max hard
            MyGameplayDifficultyEnum difficultyOfThisBot = GetBotDifficulty();

            DifficultyStrafingSpeed = MyGameplayConstants.GetGameplayDifficulty(difficultyOfThisBot).BotStrafingSpeed;

            DifficultyMovingSpeed = MyGameplayConstants.GetGameplayDifficulty(difficultyOfThisBot).BotMovingSpeed;

            DifficultyFireRatio = MyGameplayConstants.GetGameplayDifficulty(difficultyOfThisBot).BotFireRatio;

            //HACK BECAUSE OF TEST BUILD..
	        DifficultyGunUsageRatio = 0.5f;
            //DifficultyGunUsageRatio = MyGameplayConstants.GetGameplayDifficulty(difficultyOfThisBot).BotGunUsageRatio;

            DifficultyRaidAttackOccurrence = MyGameplayConstants.GetGameplayDifficulty(difficultyOfThisBot).BotRaidAttackOccurrence;

            DifficultyFlyAroundTargetOccurrence = MyGameplayConstants.GetGameplayDifficulty(difficultyOfThisBot).BotFlyAroundTargetOccurrence;

            DifficultyAttackReactDistance = MyGameplayConstants.GetGameplayDifficulty(difficultyOfThisBot).BotAttackReactDistance;

            DifficultyUseFireBurst = 1;

            MyHud.ChangeText(this, new StringBuilder(hudLabelText), null, 10000, MyHudIndicatorFlagsEnum.SHOW_ALL);

            NormalDecision = MyBotDecisionLogicsEnum.None;
            AttackDecision = MyBotDecisionLogicsEnum.None;

            //bot survival waypoints if getting lost
            m_rememberWaypoints = new MyWaypointMemory(this);
            m_temporaryWaypoints = new MyWaypointMemory(this);

            m_canSeeCheck = new MyCanSeeMemory(false);
            m_canSeeCheckForShoot = new MyCanSeeMemory(false);
            m_canSeeCheckForMove = new MyCanSeeMemory(false);

            //Set behavrior duration times
            SettingsForBehaviorTimers();

            //Inicialize timers
            ResetBehaviourTimer();
            ResetStrafeTimer();

            m_decisionTimeCounter = 0;
            m_lostCounter = 0;

            Threat = null;
            Target = null;
            FollowTarget = null;

            //Next inicialization should be done from input so every bot can do something different (shuold it be in object builder for bot?)
            //--------------------------------------------------------
            //Set default decision logic
            NormalDecision = MyBotDecisionLogicsEnum.Guard;
            AttackDecision = MyBotDecisionLogicsEnum.CasualFighter;

            m_survivalKit = new Dictionary<MyBotSurvivalAlertsEnum, MySurvivalDecision>();
            AddSurvivalAlert(MyBotSurvivalAlertsEnum.EnemyInsight, MyBotDecisionLogicsEnum.None, 1000);
            AddSurvivalAlert(MyBotSurvivalAlertsEnum.UnderAttack, MyBotDecisionLogicsEnum.CasualFighter, 1000);
            
            //Initialize waypoint memories
            m_savedWaypoints = new MyWaypointMemory(this);

            Trace.SendMsgLastCall("Init Bot " + base.Name);
        }
 public void CopyBotParameters(MyMwcObjectBuilder_SmallShip_Bot copyFrom) 
 {
     AITemplate = copyFrom.AITemplate;
     Aggressivity = copyFrom.Aggressivity;
     SeeDistance = copyFrom.SeeDistance;
     SleepDistance = copyFrom.SleepDistance;
     PatrolMode = copyFrom.PatrolMode;
     ShipTemplateID = copyFrom.ShipTemplateID;
 }
        public static MyMwcObjectBuilder_SmallShip_Bot CreateObjectBuilderWithAllItems(MyMwcObjectBuilder_SmallShip_TypesEnum shipType, int maxInventoryItems)
        {
            List<MyMwcObjectBuilder_SmallShip_Weapon> weapons = new List<MyMwcObjectBuilder_SmallShip_Weapon>();
            List<MyMwcObjectBuilder_AssignmentOfAmmo> ammoAssignment = new List<MyMwcObjectBuilder_AssignmentOfAmmo>();
            List<MyMwcObjectBuilder_InventoryItem> inventoryItems = new List<MyMwcObjectBuilder_InventoryItem>();

            // weapons
            foreach (MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum weapon in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum)))
            {
                var weaponBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(weapon);
                weaponBuilder.SetAutoMount();
                weapons.Add(weaponBuilder);
                // we want have 2x autocanon
                if (weapon == MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Autocanon)
                {
                    var autocannonBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(weapon);
                    autocannonBuilder.SetAutoMount();
                    weapons.Add(autocannonBuilder);
                }
            }

            // ammo assignment
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Primary, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Secondary, MyMwcObjectBuilder_AmmoGroupEnum.Missile, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Missile_Basic));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Third, MyMwcObjectBuilder_AmmoGroupEnum.UniversalLauncherFront, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Universal_Launcher_Mine_Basic));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Fourth, MyMwcObjectBuilder_AmmoGroupEnum.UniversalLauncherBack, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Universal_Launcher_Mine_Smart));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Fifth, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic));

            // inventory items
            // ammo
            foreach (MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum ammo in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum)))
            {
                inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Ammo(ammo), 1000f));
            }

            // tools
            foreach (MyMwcObjectBuilder_SmallShip_Tool_TypesEnum tool in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Tool_TypesEnum)))
            {
                inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Tool(tool), 1f));   
            }

            // radars
            foreach (MyMwcObjectBuilder_SmallShip_Radar_TypesEnum radar in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Radar_TypesEnum)))
            {
                inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Radar(radar), 1f));
            }

            // engines
            foreach (MyMwcObjectBuilder_SmallShip_Engine_TypesEnum engine in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Engine_TypesEnum)))
            {
                if (engine != MyMwcObjectBuilder_SmallShip_Engine_TypesEnum.PowerCells_1)
                {
                    inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Engine(engine), 1f));
                }
            }

            // armors
            foreach (MyMwcObjectBuilder_SmallShip_Armor_TypesEnum armor in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Armor_TypesEnum)))
            {
                if (armor != MyMwcObjectBuilder_SmallShip_Armor_TypesEnum.Basic)
                {
                    inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Armor(armor), 1f));
                }
            }

            // foundation factory
            var foundationFactory = new MyMwcObjectBuilder_PrefabFoundationFactory();
            foundationFactory.PrefabHealthRatio = 1f;
            foundationFactory.PrefabMaxHealth = null;
            inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(foundationFactory, 1f));
            inventoryItems.RemoveAll(x => MyMwcObjectBuilder_InventoryItem.IsDisabled(x));

            if (inventoryItems.Count > maxInventoryItems)
            {
                inventoryItems = inventoryItems.GetRange(0, maxInventoryItems);
            }

            MyMwcObjectBuilder_SmallShip_Bot builder =
                new MyMwcObjectBuilder_SmallShip_Bot(
                    shipType,
                    new MyMwcObjectBuilder_Inventory(inventoryItems, maxInventoryItems),
                    weapons,
                    new MyMwcObjectBuilder_SmallShip_Engine(MyMwcObjectBuilder_SmallShip_Engine_TypesEnum.PowerCells_1),
                    ammoAssignment,
                    new MyMwcObjectBuilder_SmallShip_Armor(MyMwcObjectBuilder_SmallShip_Armor_TypesEnum.Basic),
                    new MyMwcObjectBuilder_SmallShip_Radar(MyMwcObjectBuilder_SmallShip_Radar_TypesEnum.Radar_1),
                    null, 1f, float.MaxValue, float.MaxValue, float.MaxValue,
                    true, false, MyMwcObjectBuilder_FactionEnum.None, MyAITemplateEnum.DEFAULT, 0, 1000, 1000, MyPatrolMode.CYCLE, null, BotBehaviorType.IDLE, 200f, 0, false, true);

            return builder;
        }