예제 #1
0
        public IOpenContainerResult TryOpen(IPropContainer container)
        {
            var props = container.Content.CalcActualItems();

            container.Open();
            return(new SuccessOpenContainerResult(props));
        }
예제 #2
0
    private ContainerVm GetContainerPrefab(IPropContainer container)
    {
        if (container is ILootContainer lootContainer)
        {
            return(LootPrefab);
        }

        return(ChestPrefab);
    }
예제 #3
0
 public OpenContainerTask([NotNull] IActor actor,
                          [NotNull] IPropContainer container,
                          [NotNull] IOpenContainerMethod method,
                          [NotNull] ISectorMap map) : base(actor)
 {
     _container = container ?? throw new ArgumentNullException(nameof(container));
     _method    = method ?? throw new ArgumentNullException(nameof(method));
     _map       = map ?? throw new ArgumentNullException(nameof(map));
 }
예제 #4
0
        private void OnChildChange(IPropContainer child)
        {
            if (Change != null)
            {
                _invalidateProps = true;

                Change(this);
            }
        }
예제 #5
0
        /// <summary>
        /// Проверяем, что сундук не на клетке с выходом.
        /// </summary>
        private static void ValidateTransitionOverlap(ISector sector, IPropContainer container)
        {
            var transitionNodes       = sector.Map.Transitions.Keys;
            var chestOnTransitionNode = transitionNodes.Contains(container.Node);

            if (chestOnTransitionNode)
            {
                throw new SectorValidationException();
            }
        }
예제 #6
0
        public IOpenContainerResult TryOpen(IPropContainer container)
        {
            if (container is null)
            {
                throw new System.ArgumentNullException(nameof(container));
            }

            container.Open();
            return(new SuccessOpenContainerResult());
        }
예제 #7
0
        public BindedPropSet(IPropContainer propSource, IPropSetCalculator calculator) : base(calculator)
        {
            if (propSource == null)
            {
                throw new ArgumentNullException();
            }

            _propSource         = propSource;
            _propSource.Change += OnPropSourceChange;
        }
예제 #8
0
    private void CreateContainerViewModel(IEnumerable <MapNodeVM> nodeViewModels, IPropContainer container)
    {
        var containerVm = Instantiate(ContainerPrefab, transform);

        var containerNodeVm   = nodeViewModels.Single(x => x.Node == container.Node);
        var containerPosition = containerNodeVm.transform.position + new Vector3(0, 0, -1);

        containerVm.transform.position = containerPosition;
        containerVm.Container          = container;
        containerVm.Selected          += Container_Selected;
    }
예제 #9
0
 public PropsBase(IPropContainer <TStored> container)
 {
     if (container != null)
     {
         Container = container;
     }
     else
     {
         Container = new PropContainer <TStored>();
     }
 }
예제 #10
0
        public DepositLifetimeModule(IStaticObjectManager staticObjectManager, IStaticObject parentStaticObject)
        {
            _staticObjectManager = staticObjectManager ?? throw new ArgumentNullException(nameof(staticObjectManager));
            _parentStaticObject  = parentStaticObject ?? throw new ArgumentNullException(nameof(parentStaticObject));

            _depositModule   = _parentStaticObject.GetModule <IPropDepositModule>();
            _containerModule = _parentStaticObject.GetModule <IPropContainer>();

            _depositModule.Mined          += DepositModule_Mined;
            _containerModule.ItemsRemoved += ContainerModule_ItemsRemoved;
        }
예제 #11
0
    private ContainerVm GetContainerPrefab(IPropContainer container)
    {
        if (container is ILootContainer)
        {
            return(LootPrefab);
        }

        if (container.Purpose == PropContainerPurpose.Treasures)
        {
            return(ChestPrefab);
        }

        return(TrashPrefab);
    }
예제 #12
0
        public void Remove(IPropContainer child, bool bNotify)
        {
            if (children.Contains(child))
            {
                child.Change -= OnChildChange;
                children.Remove(child);

                _invalidateProps = true;

                if (bNotify && Change != null)
                {
                    Change(this);
                }
            }
        }
예제 #13
0
        public void Add(IPropContainer child, bool bNotify)
        {
            // TODO: Remove this check for performance?
            if (!children.Contains(child))
            {
                child.Change += OnChildChange;
                children.Add(child);

                _invalidateProps = true;

                if (bNotify && Change != null)
                {
                    Change(this);
                }
            }
        }
예제 #14
0
    private void CreateContainerViewModel(IEnumerable <MapNodeVM> nodeViewModels, IPropContainer container)
    {
        var containerPrefab = GetContainerPrefab(container);

        var containerViewModel = Instantiate(containerPrefab, transform);

        var containerNodeVm   = nodeViewModels.Single(x => x.Node == container.Node);
        var containerPosition = containerNodeVm.transform.position + new Vector3(0, 0, -1);

        containerViewModel.transform.position = containerPosition;
        containerViewModel.Container          = container;
        containerViewModel.Selected          += Container_Selected;
        containerViewModel.MouseEnter        += ContainerViewModel_MouseEnter;

        _containerViewModels.Add(containerViewModel);
    }
예제 #15
0
        public PropDepositModule(IPropContainer propContainer,
                                 IDropTableScheme dropTableScheme,
                                 IDropResolver dropResolver,
                                 string[] toolTags,
                                 int exhaustingValue,
                                 DepositMiningDifficulty depositMiningDifficulty)
        {
            _propContainer   = propContainer ?? throw new ArgumentNullException(nameof(propContainer));
            _dropTableScheme = dropTableScheme ?? throw new ArgumentNullException(nameof(dropTableScheme));
            _dropResolver    = dropResolver ?? throw new ArgumentNullException(nameof(dropResolver));
            _toolTags        = toolTags ?? throw new ArgumentNullException(nameof(toolTags));

            _exhaustingValue   = exhaustingValue;
            _exhaustingCounter = exhaustingValue;
            Difficulty         = depositMiningDifficulty;
        }
예제 #16
0
    private void ShowFoundPropsModalOrNotFound(IActor actor, IPropContainer propContainer)
    {
        var props = propContainer.Content.CalcActualItems();

        if (props.Any())
        {
            var containerPopupObj = _container.InstantiatePrefab(ContainerPopupPrefab, WindowCanvas.transform);

            var containerPopup = containerPopupObj.GetComponent <ContainerPopup>();

            var transferMachine = new PropTransferMachine(actor.Person.GetModule <IInventoryModule>(),
                                                          propContainer.Content);
            containerPopup.Init(transferMachine);
        }
        else
        {
            var indicator = Instantiate(FoundNothingIndicatorPrefab, transform);
            indicator.CurrentLanguage = _uiSettingService.CurrentLanguage;

            var actorViewModel = ActorViewModels.SingleOrDefault(x => x.Actor == actor);

            indicator.Init(actorViewModel);
        }
    }
예제 #17
0
        public void OpenContainer(IPropContainer container, IOpenContainerMethod method)
        {
            var openResult = method.TryOpen(container);

            DoOpenContainer(container, openResult);
        }
예제 #18
0
        private void DoOpenContainer(IPropContainer container, IOpenContainerResult openResult)
        {
            var e = new OpenContainerEventArgs(container, openResult);

            OpenedContainer?.Invoke(this, e);
        }
예제 #19
0
 public OpenContainerEventArgs(IPropContainer container, [NotNull] IOpenContainerResult result)
 {
     Container = container;
     Result    = result ?? throw new ArgumentNullException(nameof(result));
 }
예제 #20
0
 public StringProps(IPropContainer <string> container) :
     base(container)
 {
     //Debug.EnableTracing(@class);
 }
예제 #21
0
 private void OnPropSourceChange(IPropContainer propSource)
 {
     _invalidatePropSource = true;
 }
예제 #22
0
 public void Add(IPropContainer child)
 {
     Add(child, true);
 }
        private OpenContainerTask CreateTask(IActor actor, IPropContainer container)
        {
            var openMethod = new HandOpenContainerMethod();

            return(new OpenContainerTask(actor, container, openMethod, SectorManager.CurrentSector.Map));
        }
예제 #24
0
 public void Remove(IPropContainer child)
 {
     Remove(child, true);
 }
예제 #25
0
 public IOpenContainerResult TryOpen(IPropContainer container)
 {
     container.Open();
     return(new SuccessOpenContainerResult());
 }
예제 #26
0
 public Props(IPropContainer <object> container) :
     base(container)
 {
     //Debug.EnableTracing(@class);
 }
예제 #27
0
 public OpenContainerTask(IActor actor, IPropContainer container, IOpenContainerMethod method) : base(actor)
 {
     _container = container ?? throw new ArgumentNullException(nameof(container));
     _method    = method ?? throw new ArgumentNullException(nameof(method));
 }