예제 #1
0
 public Task(Guid taskID, PlaceInfo place, Product product, decimal qty, PlaceAction action)
 {
     TaskID = taskID;
     Place = place;
     Product = product;
     Qty = qty;
     Action = action;
 }
예제 #2
0
        public void Run_ShouldNotSetPositionOrDirection_IfDirectionNone()
        {
            var action = new PlaceAction(_robot, _mapProviderMock.Object, new BidimensionalPoint(2, 1), Direction.None);

            action.Run();

            Assert.Null(_robot.Position);
            Assert.Equal(Direction.None, _robot.Direction);
        }
예제 #3
0
        public void Run_ShouldNotSetPositionOrDirection_IfPositionNotValid()
        {
            _mapProviderMock.Setup(mapProvider => mapProvider.IsPositionAvailable(It.IsAny <IPosition>())).Returns(false);
            var action = new PlaceAction(_robot, _mapProviderMock.Object, new BidimensionalPoint(2, 1), Direction.North);

            action.Run();

            Assert.Null(_robot.Position);
            Assert.Equal(Direction.None, _robot.Direction);
        }
예제 #4
0
        public void Place(int index)
        {
            var action = new PlaceAction()
            {
                SessionID = GameManager.instance.currentSession,
                Index     = index,
            };

            ProcessAction(action);
        }
예제 #5
0
        public void Run_ShouldSetPositionAndDirection()
        {
            _mapProviderMock.Setup(mapProvider => mapProvider.IsPositionAvailable(It.IsAny <IPosition>())).Returns(true);
            var action = new PlaceAction(_robot, _mapProviderMock.Object, new BidimensionalPoint(2, 1), Direction.North);

            action.Run();

            Assert.Equal(Direction.North, _robot.Direction);;
            Assert.Equal(2, _robot.Position.Latitude);
            Assert.Equal(1, _robot.Position.Longitude);
        }
예제 #6
0
        public void Run_ShouldkeepPreviousPositionOrDirection_IfNotValid()
        {
            var position = new BidimensionalPoint(1, 3);

            _robot.Position  = position;
            _robot.Direction = Direction.East;
            _mapProviderMock.Setup(mapProvider => mapProvider.IsPositionAvailable(It.IsAny <IPosition>())).Returns(false);
            var action = new PlaceAction(_robot, _mapProviderMock.Object, new BidimensionalPoint(2, 1), Direction.West);

            action.Run();

            Assert.Equal(position, _robot.Position);
            Assert.Equal(Direction.East, _robot.Direction);
        }
예제 #7
0
        public static PlaceResult PlaceFromGameBin(EditTownModel ths, UIBinInfo info, ulong lotId, PlaceAction action)
        {
            PlaceResult contentFailure = PlaceResult.ContentFailure;
            Lot lot = LotManager.GetLot(lotId);
            if (lot == null)
            {
                return PlaceResult.InvalidLot;
            }
            else if (lot.Household != null)
            {
                return PlaceResult.HouseholdPresent;
            }

            ths.GetInWorldHouseholdBinInfoList();
            contentFailure = PlaceResult.ContentFailure;
            if (info.HouseholdId != ulong.MaxValue)
            {
                BinCommon.KickSimsOffLot(lot, true);
                if (info.LotId != ulong.MaxValue)
                {
                    contentFailure = BinCommonEx.PlaceHouseholdAndContentsFromGameBin(info.ContentId, lot, action, Mover.GetLotCost);
                }
                else
                {
                    contentFailure = BinCommonEx.PlaceHouseholdFromGameBin(info.ContentId, lot, action, Mover.GetLotCost);
                }

                if (contentFailure != PlaceResult.Success)
                {
                    return contentFailure;
                }

                ths.mGameBin.Remove(info);
                if (ths.GameBinChanged != null)
                {
                    ths.GameBinChanged(ths, null);
                }

                info = BinCommon.CreateInWorldBinInfo(lot.Household, lot);
                if (info != null)
                {
                    ths.mInWorldHouseholdBin.Add(info);
                }
            }
            return contentFailure;
        }
예제 #8
0
        public void placingPhase()
        {
            PlaceAction act = PlaceAction.Place;

            while (referee.inPlacing(xPlayer, oPlayer) || act == PlaceAction.Shoot)
            {
                gameBoard.Display($@"X stones:{xPlayer.stones} O stones:{oPlayer.stones}");
                if (act == PlaceAction.Place)
                {
                    switch (gameBoard.Place(currPlayer, referee))
                    {
                    case PlaceResult.Invalid: break;

                    case  PlaceResult.Done:
                        if (currPlayer == xPlayer)
                        {
                            currPlayer = oPlayer;
                        }
                        else
                        {
                            currPlayer = xPlayer;
                        }
                        break;

                    case  PlaceResult.MillMade: act = PlaceAction.Shoot;  break;
                    }
                }
                else
                {
                    if (gameBoard.Shoot(currPlayer, referee) == ShootResult.Done)
                    {
                        act = PlaceAction.Place;
                        if (currPlayer == xPlayer)
                        {
                            currPlayer = oPlayer;
                        }
                        else
                        {
                            currPlayer = xPlayer;
                        }
                    }
                }
            }
        }
        protected virtual void ProcessPlaceAction(PlaceAction action, List <StackResponseContainerInfo> stackResponses)
        {
            byte count = action.Count;
            Item sourceItem;
            Item destItem;
            StackRequestSlotInfo source      = action.Source;
            StackRequestSlotInfo destination = action.Destination;

            sourceItem = GetContainerItem(source.ContainerId, source.Slot);

            if (sourceItem.Count == count || sourceItem.Count - count <= 0)
            {
                destItem            = sourceItem;
                sourceItem          = new ItemAir();
                sourceItem.UniqueId = 0;
                SetContainerItem(source.ContainerId, source.Slot, sourceItem);
            }
            else
            {
                destItem          = (Item)sourceItem.Clone();
                sourceItem.Count -= count;
                destItem.Count    = count;
                destItem.UniqueId = Environment.TickCount & Int32.MaxValue;
            }

            Item existingItem = GetContainerItem(destination.ContainerId, destination.Slot);

            if (existingItem.UniqueId > 0)             // is empty/air is what this means
            {
                existingItem.Count += count;
                destItem            = existingItem;
            }
            else
            {
                SetContainerItem(destination.ContainerId, destination.Slot, destItem);
            }

            if (destination.ContainerId == 21 || destination.ContainerId == 22)
            {
                if (!(GetContainerItem(21, 14) is ItemAir) && !(GetContainerItem(22, 15) is ItemAir))
                {
                    Enchantment.SendEnchantments(_player, GetContainerItem(21, 14));
                }
                else
                {
                    Enchantment.SendEmptyEnchantments(_player);
                }
            }

            stackResponses.Add(new StackResponseContainerInfo
            {
                ContainerId = source.ContainerId,
                Slots       = new List <StackResponseSlotInfo>
                {
                    new StackResponseSlotInfo()
                    {
                        Count          = sourceItem.Count,
                        Slot           = source.Slot,
                        HotbarSlot     = source.Slot,
                        StackNetworkId = sourceItem.UniqueId
                    }
                }
            });
            stackResponses.Add(new StackResponseContainerInfo
            {
                ContainerId = destination.ContainerId,
                Slots       = new List <StackResponseSlotInfo>
                {
                    new StackResponseSlotInfo()
                    {
                        Count          = destItem.Count,
                        Slot           = destination.Slot,
                        HotbarSlot     = destination.Slot,
                        StackNetworkId = destItem.UniqueId
                    }
                }
            });
        }
예제 #10
0
        public static PlaceResult PlaceFromGameBin(EditTownModel ths, UIBinInfo info, ulong lotId, PlaceAction action)
        {
            PlaceResult contentFailure = PlaceResult.ContentFailure;
            Lot         lot            = LotManager.GetLot(lotId);

            if (lot == null)
            {
                return(PlaceResult.InvalidLot);
            }
            else if (lot.Household != null)
            {
                return(PlaceResult.HouseholdPresent);
            }

            ths.GetInWorldHouseholdBinInfoList();
            contentFailure = PlaceResult.ContentFailure;
            if (info.HouseholdId != ulong.MaxValue)
            {
                BinCommon.KickSimsOffLot(lot, true);
                if (info.LotId != ulong.MaxValue)
                {
                    contentFailure = BinCommonEx.PlaceHouseholdAndContentsFromGameBin(info.ContentId, lot, action, Mover.GetLotCost);
                }
                else
                {
                    contentFailure = BinCommonEx.PlaceHouseholdFromGameBin(info.ContentId, lot, action, Mover.GetLotCost);
                }

                if (contentFailure != PlaceResult.Success)
                {
                    return(contentFailure);
                }

                ths.mGameBin.Remove(info);
                if (ths.GameBinChanged != null)
                {
                    ths.GameBinChanged(ths, null);
                }

                info = BinCommon.CreateInWorldBinInfo(lot.Household, lot);
                if (info != null)
                {
                    ths.mInWorldHouseholdBin.Add(info);
                }
            }
            return(contentFailure);
        }
예제 #11
0
        public static PlaceResult PlaceFromExportBin(EditTownModel ths, UIBinInfo info, ulong lotId, PlaceAction action, bool showConfirmDialog)
        {
            try
            {
                PlaceResult contentFailure = PlaceResult.ContentFailure;
                Lot         lot            = LotManager.GetLot(lotId);
                if (lot == null)
                {
                    return(PlaceResult.InvalidLot);
                }

                ExportBinContents exportBinItem = ths.FindExportBinContents(info.ContentId);
                if (exportBinItem != null)
                {
                    ths.GetInWorldHouseholdBinInfoList();
                    ths.GetInWorldLotBinInfoList();
                    Sim newActiveSim = null;
                    if (lot.Household != null)
                    {
                        return(BinCommonEx.MergeHouseholdFromExportBin(exportBinItem, lot, showConfirmDialog, Mover.Settings.mAllowGreaterThanEight));
                    }

                    BinCommon.KickSimsOffLot(lot, true);
                    ProgressDialog.Show(Localization.LocalizeString("Ui/Caption/Global:Processing", new object[0x0]));

                    try
                    {
                        try
                        {
                            contentFailure = BinCommonEx.PlaceFromExportBin(exportBinItem, lot, action, true, Mover.GetLotCost, ref newActiveSim);

                            ExportBinContentsEx.Flush(exportBinItem);

                            UIBinInfo item = BinCommon.CreateInWorldBinInfo(lot.Household, lot);
                            if (item != null)
                            {
                                if (info.HouseholdId != ulong.MaxValue)
                                {
                                    ths.mInWorldHouseholdBin.Add(item);
                                }
                                else
                                {
                                    ths.mInWorldLotBin.Add(item);
                                }
                            }
                        }
                        finally
                        {
                            ProgressDialog.Close();
                        }
                    }
                    catch (ExecutionEngineException)
                    { }
                }
                return(contentFailure);
            }
            catch (Exception e)
            {
                Common.Exception("PlaceFromExportBin", e);
                return(PlaceResult.ContentFailure);
            }
        }
예제 #12
0
        public static PlaceResult PlaceFromExportBin(ExportBinContents exportBinItem, Lot lot, PlaceAction action, bool buyFurnished, GetLotCost onLotCost, ref Sim newActiveSim)
        {
            if (exportBinItem == null)
            {
                return(PlaceResult.ContentFailure);
            }

            bool flag = exportBinItem.IsLoaded();

            if (!flag)
            {
                ExportBinContentsEx.Import(exportBinItem, false);
            }

            PlaceResult result = PlaceFromExportBin(exportBinItem.Household, exportBinItem, lot, action, buyFurnished, onLotCost, ref newActiveSim);

            if (!flag)
            {
                ExportBinContentsEx.Flush(exportBinItem);
            }

            return(result);
        }
예제 #13
0
        private void Update()
        {
            UpdateTalking();
            UpdateAudio();

            InputX = Input.GetAxis(MoveAxisX);
            InputY = Input.GetAxis(MoveAxisY);

            InputAction            = Input.GetButtonDown(ActionButton);
            InputTogglePlaceAction = Input.GetButtonDown(TogglePlaceActionButton);

            InputToggleLeft  = Input.GetButtonDown(ToggleLeftButton);
            InputToggleRight = Input.GetButtonDown(ToggleRightButton);

            if (PlaceMode)
            {
                if (PlaceAction == PlaceAction.Buy)
                {
                    if (CurrentPlaceable)
                    {
                        CurrentPlaceable.gameObject.SetActive(true);
                    }

                    if (InputToggleRight)
                    {
                        NextPlaceable();
                    }
                    else if (InputToggleLeft)
                    {
                        PreviousPlaceable();
                    }
                }
                else
                {
                    if (CurrentPlaceable)
                    {
                        CurrentPlaceable.gameObject.SetActive(false);
                    }
                }

                if (InputAction)
                {
                    HandlePlaceAction();
                }
                else if (InputTogglePlaceAction)
                {
                    // Cycle to next enum
                    PlaceAction =
                        (PlaceAction)(((int)PlaceAction + 1) % Enum.GetNames(typeof(PlaceAction)).Length);
                }
            }
            else
            {
                if (InputAction)
                {
                    if (TargetEnemy)
                    {
                        HandleEnemy(TargetEnemy);
                    }
                }

                UpdateEnergy();
            }

            UpdateTooltip();
        }
예제 #14
0
        public static PlaceResult PlaceFromExportBin(EditTownModel ths, UIBinInfo info, ulong lotId, PlaceAction action, bool showConfirmDialog)
        {
            try
            {
                PlaceResult contentFailure = PlaceResult.ContentFailure;
                Lot lot = LotManager.GetLot(lotId);
                if (lot == null)
                {
                    return PlaceResult.InvalidLot;
                }

                ExportBinContents exportBinItem = ths.FindExportBinContents(info.ContentId);
                if (exportBinItem != null)
                {
                    ths.GetInWorldHouseholdBinInfoList();
                    ths.GetInWorldLotBinInfoList();
                    Sim newActiveSim = null;
                    if (lot.Household != null)
                    {
                        return BinCommonEx.MergeHouseholdFromExportBin(exportBinItem, lot, showConfirmDialog, Mover.Settings.mAllowGreaterThanEight);
                    }

                    BinCommon.KickSimsOffLot(lot, true);
                    ProgressDialog.Show(Localization.LocalizeString("Ui/Caption/Global:Processing", new object[0x0]));

                    try
                    {
                        try
                        {
                            contentFailure = BinCommonEx.PlaceFromExportBin(exportBinItem, lot, action, true, Mover.GetLotCost, ref newActiveSim);
                            
                            ExportBinContentsEx.Flush(exportBinItem);

                            UIBinInfo item = BinCommon.CreateInWorldBinInfo(lot.Household, lot);
                            if (item != null)
                            {
                                if (info.HouseholdId != ulong.MaxValue)
                                {
                                    ths.mInWorldHouseholdBin.Add(item);
                                }
                                else
                                {
                                    ths.mInWorldLotBin.Add(item);
                                }
                            }
                        }
                        finally
                        {
                            ProgressDialog.Close();
                        }
                    }
                    catch (ExecutionEngineException)
                    { }
                }
                return contentFailure;
            }
            catch (Exception e)
            {
                Common.Exception("PlaceFromExportBin", e);
                return PlaceResult.ContentFailure;
            }
        }
예제 #15
0
 public static PlaceResult PlaceFromExportBin(EditTownModel ths, UIBinInfo info, ulong lotId, PlaceAction action)
 {
     return PlaceFromExportBin(ths, info, lotId, action, true);
 }
예제 #16
0
        public static PlaceResult PlaceFromExportBin(Household household, ExportBinContents exportBinItem, Lot lot, PlaceAction action, bool buyFurnished, GetLotCost onLotCost, ref Sim newActiveSim)
        {
            if (household == null)
            {
                return(PlaceResult.InvalidBinHousehold);
            }
            else if (lot == null)
            {
                return(PlaceResult.InvalidLot);
            }
            else if (exportBinItem == null)
            {
                return(PlaceResult.ContentFailure);
            }

            bool flag = exportBinItem.IsLoaded();

            if (!flag)
            {
                ExportBinContentsEx.Import(exportBinItem, false);
            }

            PlaceResult contentFailure = PlaceResult.ContentFailure;

            if (household != null)
            {
                if (((action & PlaceAction.PlaceAndPay) != PlaceAction.PlaceOnly) && !PayForLot(household, lot, buyFurnished, onLotCost))
                {
                    if (!flag)
                    {
                        ExportBinContentsEx.Flush(exportBinItem);
                    }
                    Household.CleanupOldIdToNewSimDescriptionMap();
                    return(PlaceResult.InsufficientFunds);
                }

                if ((!buyFurnished) && (!lot.IsApartmentLot))
                {
                    lot.MakeLotUnfurnished();
                    Common.Sleep();
                    lot.UpdateCachedValues();
                }

                CreateActors(household, lot, false);
                CreateInventories(household, exportBinItem.HouseholdContents, exportBinItem.IndexMap);
                Common.Sleep();
                BinCommon.UpdateImportedUrnstones(household, lot);
                household.PostImport();

                if ((action & PlaceAction.MoveIn) != PlaceAction.PlaceOnly)
                {
                    BinCommon.MoveIn(household, lot);
                }
                if ((action & PlaceAction.Activate) != PlaceAction.PlaceOnly)
                {
                    newActiveSim = BinCommon.ActivateSim(exportBinItem.Household, lot);
                }

                ThumbnailManager.GenerateHouseholdThumbnail(household.HouseholdId, household.HouseholdId, ThumbnailSizeMask.Large | ThumbnailSizeMask.Medium);
                contentFailure = PlaceResult.Success;
            }

            if (!flag)
            {
                ExportBinContentsEx.Flush(exportBinItem);
            }

            return(contentFailure);
        }
예제 #17
0
 public static PlaceResult PlaceFromExportBin(EditTownModel ths, UIBinInfo info, ulong lotId, PlaceAction action)
 {
     return(PlaceFromExportBin(ths, info, lotId, action, true));
 }
예제 #18
0
        public static PlaceResult PlaceHouseholdAndContentsFromGameBin(ulong contentId, Lot lot, PlaceAction action, GetLotCost onLotCost)
        {
            LotContents lotContents = Bin.Singleton.FindLot(contentId);

            if (lotContents != null)
            {
                Household household = lotContents.Household.Household;
                if (household != null)
                {
                    if (((action & PlaceAction.PlaceAndPay) != PlaceAction.PlaceOnly) && !PayForLot(household, lot, true, onLotCost))
                    {
                        return(PlaceResult.InsufficientFunds);
                    }

                    CreateActors(household, lot, false);
                    CreateInventories(lotContents.Household);
                    if ((action & PlaceAction.MoveIn) != PlaceAction.PlaceOnly)
                    {
                        BinCommon.MoveIn(household, lot);
                    }

                    Bin.Singleton.RemoveLotFromGameBin(lotContents);
                    return(PlaceResult.Success);
                }
            }
            return(PlaceResult.ContentFailure);
        }