public static MyGuiScreenInventory OpenInventory(MyGuiScreenInventoryType inventoryScreenType, MyEntity otherSide = null, MySmallShipInteractionActionEnum? action = null)
        {
            MyMwcLog.WriteLine("OpenInventory()");


            // return harvester when opening inventory, harvester can update inventory, which would not propagete to inventory screen and closing inventory would override those changes
            var harvester = MySession.PlayerShip.Weapons.GetMountedHarvestingDevice();
            if (harvester != null && harvester.CurrentState != MyHarvestingDeviceEnum.InsideShip)
                harvester.Shot(null);

            StringBuilder otherSideInventoryName = null;
            MyInventory otherSideInventory = null;
            List<MySmallShipBuilderWithName> shipsObjectBuilders = null;
            bool closeOtherSideInventory = false;
            
            m_inventoryScreenType = inventoryScreenType;
            m_shipsInventoryOwner = MySession.Static;
            m_player = MySession.Static.Player;
            m_detectedEntity = otherSide;
            m_detectedAction = action;
            shipsObjectBuilders = new List<MySmallShipBuilderWithName>();
            shipsObjectBuilders.Add(new MySmallShipBuilderWithName(MySession.PlayerShip.GetObjectBuilder(true) as MyMwcObjectBuilder_SmallShip_Player));

            switch(m_inventoryScreenType)
            {            
                case MyGuiScreenInventoryType.GodEditor:
                    LoadGodEditorInventory(ref otherSideInventory, ref otherSideInventoryName, ref shipsObjectBuilders);
                    closeOtherSideInventory = true;
                    break;
                case MyGuiScreenInventoryType.InGameEditor:
                    LoadIngameEditorInventory(ref otherSideInventory, ref otherSideInventoryName);
                    break;
                case MyGuiScreenInventoryType.Game:
                    LoadGameInventory(ref otherSideInventory, ref otherSideInventoryName, ref shipsObjectBuilders);
                    break;
            }
            
            var currentShipBuilder = shipsObjectBuilders[0];            
            shipsObjectBuilders.Sort((x, y) => ((int)x.Builder.ShipType).CompareTo((int)y.Builder.ShipType));
            m_curentIndex = shipsObjectBuilders.IndexOf(currentShipBuilder);
            MyMwcObjectBuilder_Inventory otherSideInventoryBuilder = otherSideInventory != null ? otherSideInventory.GetObjectBuilder(true) : null;
            if (closeOtherSideInventory) 
            {
                Debug.Assert(otherSideInventory != null);
                otherSideInventory.Close();
            }
            m_currentInventoryScreen = new MyGuiScreenInventory(shipsObjectBuilders, m_curentIndex,
                                                                      m_player.Money, m_tradeForMoney,
                                                                      otherSideInventoryBuilder, otherSideInventoryName,
                                                                      m_inventoryScreenType);
            m_currentInventoryScreen.OnSave += Save;
            m_currentInventoryScreen.Closed += OnInventoryScreenClosed;
            MyGuiScreenGamePlay.Static.HideSelectAmmo();
            return m_currentInventoryScreen;
        }
Beispiel #2
0
 private static void Clear()
 {
     m_otherSideInventoryOwner = null;
     m_player = null;
     m_shipsInventoryOwner            = null;
     m_tradeForMoney                  = false;
     m_entityDetector                 = null;
     m_detectedAction                 = null;
     m_currentInventoryScreen.OnSave -= Save;
     m_currentInventoryScreen.Closed -= OnInventoryScreenClosed;
     m_currentInventoryScreen         = null;
 }
Beispiel #3
0
        public static MyGuiScreenInventory OpenInventory(MyGuiScreenInventoryType inventoryScreenType, MyEntity otherSide = null, MySmallShipInteractionActionEnum?action = null)
        {
            MyMwcLog.WriteLine("OpenInventory()");


            // return harvester when opening inventory, harvester can update inventory, which would not propagete to inventory screen and closing inventory would override those changes
            var harvester = MySession.PlayerShip.Weapons.GetMountedHarvestingDevice();

            if (harvester != null && harvester.CurrentState != MyHarvestingDeviceEnum.InsideShip)
            {
                harvester.Shot(null);
            }

            StringBuilder otherSideInventoryName = null;
            MyInventory   otherSideInventory     = null;
            List <MySmallShipBuilderWithName> shipsObjectBuilders = null;
            bool closeOtherSideInventory = false;

            m_inventoryScreenType = inventoryScreenType;
            m_shipsInventoryOwner = MySession.Static;
            m_player            = MySession.Static.Player;
            m_detectedEntity    = otherSide;
            m_detectedAction    = action;
            shipsObjectBuilders = new List <MySmallShipBuilderWithName>();
            shipsObjectBuilders.Add(new MySmallShipBuilderWithName(MySession.PlayerShip.GetObjectBuilder(true) as MyMwcObjectBuilder_SmallShip_Player));

            switch (m_inventoryScreenType)
            {
            case MyGuiScreenInventoryType.GodEditor:
                LoadGodEditorInventory(ref otherSideInventory, ref otherSideInventoryName, ref shipsObjectBuilders);
                closeOtherSideInventory = true;
                break;

            case MyGuiScreenInventoryType.InGameEditor:
                LoadIngameEditorInventory(ref otherSideInventory, ref otherSideInventoryName);
                break;

            case MyGuiScreenInventoryType.Game:
                LoadGameInventory(ref otherSideInventory, ref otherSideInventoryName, ref shipsObjectBuilders);
                break;
            }

            var currentShipBuilder = shipsObjectBuilders[0];

            shipsObjectBuilders.Sort((x, y) => ((int)x.Builder.ShipType).CompareTo((int)y.Builder.ShipType));
            m_curentIndex = shipsObjectBuilders.IndexOf(currentShipBuilder);
            MyMwcObjectBuilder_Inventory otherSideInventoryBuilder = otherSideInventory != null?otherSideInventory.GetObjectBuilder(true) : null;

            if (closeOtherSideInventory)
            {
                Debug.Assert(otherSideInventory != null);
                otherSideInventory.Close();
            }
            m_currentInventoryScreen = new MyGuiScreenInventory(shipsObjectBuilders, m_curentIndex,
                                                                m_player.Money, m_tradeForMoney,
                                                                otherSideInventoryBuilder, otherSideInventoryName,
                                                                m_inventoryScreenType);
            m_currentInventoryScreen.OnSave += Save;
            m_currentInventoryScreen.Closed += OnInventoryScreenClosed;
            MyGuiScreenGamePlay.Static.HideSelectAmmo();
            return(m_currentInventoryScreen);
        }
Beispiel #4
0
        private static void LoadGameInventory(ref MyInventory otherSideInventory, ref StringBuilder otherSideInventoryName, ref List <MySmallShipBuilderWithName> shipsObjectBuilders)
        {
            if (MySession.PlayerShip.TradeDetector != null && m_detectedEntity == null)
            {
                m_detectedEntity = MySession.PlayerShip.TradeDetector.GetNearestEntity();
            }

            if (m_detectedEntity != null)
            {
                if (m_detectedAction == null)
                {
                    m_detectedAction = (MySmallShipInteractionActionEnum)MySession.PlayerShip.TradeDetector.GetNearestEntityCriterias();
                }
                m_otherSideInventoryOwner = m_detectedEntity as IMyInventory;

                otherSideInventory = m_otherSideInventoryOwner.Inventory;
                string entityName;
                if (m_detectedEntity is MyPrefabHangar)
                {
                    entityName = ((m_detectedEntity) as MyPrefabHangar).GetOwner().GetCorrectDisplayName();
                }
                else
                {
                    entityName = m_detectedEntity.GetCorrectDisplayName();
                }

                switch (m_detectedAction)
                {
                case MySmallShipInteractionActionEnum.TradeForFree:
                    if (IsTradingWithMothership())
                    {
                        List <MyInventoryItem> inventoryItems = new List <MyInventoryItem>();
                        foreach (MyInventoryItem inventoryItem in m_shipsInventoryOwner.Inventory.GetInventoryItems())
                        {
                            if (inventoryItem.ObjectBuilderType == MyMwcObjectBuilderTypeEnum.SmallShip_Player)
                            {
                                shipsObjectBuilders.Add(new MySmallShipBuilderWithName(inventoryItem.GetInventoryItemObjectBuilder(false) as MyMwcObjectBuilder_SmallShip_Player));
                            }
                            else if (inventoryItem.ObjectBuilderType == MyMwcObjectBuilderTypeEnum.SmallShip_HackingTool)
                            {
                                inventoryItem.CanBeMoved = false;
                            }
                            else
                            {
                                continue;
                            }
                            inventoryItem.IsTemporaryItem = true;
                            inventoryItems.Add(inventoryItem);
                        }

                        //m_shipsInventoryOwner.Inventory.RemoveInventoryItems(inventoryItems);
                        //m_shipsInventoryOwner.Inventory.RemoveInventoryItems(MyMwcObjectBuilderTypeEnum.SmallShip_Player, null);
                        //m_shipsInventoryOwner.Inventory.ClearInventoryItems(false);
                        m_shipsInventoryOwner.Inventory.RemoveInventoryItems(inventoryItems, false);
                        otherSideInventory.AddInventoryItems(inventoryItems);
                    }
                    break;

                case MySmallShipInteractionActionEnum.TradeForMoney:
                    m_tradeForMoney = true;
                    if (m_detectedEntity is MySmallShipBot)
                    {
                        otherSideInventory.PriceCoeficient = 3f;
                    }
                    break;

                case MySmallShipInteractionActionEnum.Blocked:
                case MySmallShipInteractionActionEnum.Build:
                case MySmallShipInteractionActionEnum.Loot:
                case MySmallShipInteractionActionEnum.Examine:
                case MySmallShipInteractionActionEnum.ExamineEmpty:
                    break;

                default:
                    throw new MyMwcExceptionApplicationShouldNotGetHere();
                }

                otherSideInventoryName = new StringBuilder();
                if (string.IsNullOrEmpty(entityName))
                {
                    otherSideInventoryName.Append(MyTextsWrapper.Get(MyTextsWrapperEnum.OtherSide));
                }
                else
                {
                    otherSideInventoryName.Append(entityName);
                    //otherSideInventoryName.Append(MyTextsWrapper.Get(MyTextsWrapperEnum.OtherSideInventory));
                }

                if (OpeningInventoryScreen != null)
                {
                    OpeningInventoryScreen(m_detectedEntity, m_detectedAction.Value);
                }
            }
        }
 private static void Clear()
 {                        
     m_otherSideInventoryOwner = null;
     m_player = null;
     m_shipsInventoryOwner = null;
     m_tradeForMoney = false;            
     m_entityDetector = null;
     m_detectedAction = null;
     m_currentInventoryScreen.OnSave -= Save;
     m_currentInventoryScreen.Closed -= OnInventoryScreenClosed;
     m_currentInventoryScreen = null;
 }
        private static void LoadGameInventory(ref MyInventory otherSideInventory, ref StringBuilder otherSideInventoryName, ref List<MySmallShipBuilderWithName> shipsObjectBuilders) 
        {
            if (MySession.PlayerShip.TradeDetector != null && m_detectedEntity == null)
            {
                m_detectedEntity = MySession.PlayerShip.TradeDetector.GetNearestEntity();
            }            

            if (m_detectedEntity != null)
            {
                if (m_detectedAction == null)
                {
                    m_detectedAction = (MySmallShipInteractionActionEnum)MySession.PlayerShip.TradeDetector.GetNearestEntityCriterias();
                }                
                m_otherSideInventoryOwner = m_detectedEntity as IMyInventory;

                otherSideInventory = m_otherSideInventoryOwner.Inventory;
                string entityName;
                if (m_detectedEntity is MyPrefabHangar)
                {
                    entityName = ((m_detectedEntity) as MyPrefabHangar).GetOwner().GetCorrectDisplayName();
                }
                else
                {
                    entityName = m_detectedEntity.GetCorrectDisplayName();
                }

                switch (m_detectedAction)
                {
                    case MySmallShipInteractionActionEnum.TradeForFree:
                        if (IsTradingWithMothership())
                        {
                            List<MyInventoryItem> inventoryItems = new List<MyInventoryItem>();
                            foreach (MyInventoryItem inventoryItem in m_shipsInventoryOwner.Inventory.GetInventoryItems())
                            {
                                if (inventoryItem.ObjectBuilderType == MyMwcObjectBuilderTypeEnum.SmallShip_Player)
                                {
                                    shipsObjectBuilders.Add(new MySmallShipBuilderWithName(inventoryItem.GetInventoryItemObjectBuilder(false) as MyMwcObjectBuilder_SmallShip_Player));
                                }
                                else if (inventoryItem.ObjectBuilderType == MyMwcObjectBuilderTypeEnum.SmallShip_HackingTool)
                                {
                                    inventoryItem.CanBeMoved = false;
                                }
                                else 
                                {
                                    continue;
                                }
                                inventoryItem.IsTemporaryItem = true;
                                inventoryItems.Add(inventoryItem);
                            }

                            //m_shipsInventoryOwner.Inventory.RemoveInventoryItems(inventoryItems);
                            //m_shipsInventoryOwner.Inventory.RemoveInventoryItems(MyMwcObjectBuilderTypeEnum.SmallShip_Player, null);
                            //m_shipsInventoryOwner.Inventory.ClearInventoryItems(false);
                            m_shipsInventoryOwner.Inventory.RemoveInventoryItems(inventoryItems, false);
                            otherSideInventory.AddInventoryItems(inventoryItems);
                        }
                        break;
                    case MySmallShipInteractionActionEnum.TradeForMoney:
                        m_tradeForMoney = true;
                        if (m_detectedEntity is MySmallShipBot) 
                        {
                            otherSideInventory.PriceCoeficient = 3f;
                        }
                        break;
                    case MySmallShipInteractionActionEnum.Blocked:
                    case MySmallShipInteractionActionEnum.Build:
                    case MySmallShipInteractionActionEnum.Loot:
                    case MySmallShipInteractionActionEnum.Examine:
                    case MySmallShipInteractionActionEnum.ExamineEmpty:
                        break;
                    default:
                        throw new MyMwcExceptionApplicationShouldNotGetHere();
                }

                otherSideInventoryName = new StringBuilder();
                if (string.IsNullOrEmpty(entityName))
                {
                    otherSideInventoryName.Append(MyTextsWrapper.Get(MyTextsWrapperEnum.OtherSide));
                }
                else
                {
                    otherSideInventoryName.Append(entityName);
                    //otherSideInventoryName.Append(MyTextsWrapper.Get(MyTextsWrapperEnum.OtherSideInventory));
                }

                if (OpeningInventoryScreen != null)
                {
                    OpeningInventoryScreen(m_detectedEntity, m_detectedAction.Value);
                }
            }
        }