Ejemplo n.º 1
0
        protected override void Awake()
        {
            base.Awake();

            transform.GetChild(0).GetComponent <Button>().onClick.AddListener(OnClick);
            SpiritCountText = transform.GetChild(0).GetChild(0).GetComponent <TextMeshProUGUI>();

            void OnClick()
            {
                Debug.Log(1);
                var goldCost          = SpiritData.Get(Numeral.ResourceCost).Value;
                var spiritLimit       = SpiritData.Get(Enums.Spirit.SpiritLimit).Value;
                var magicCrystalsCost = SpiritData.Get(Enums.Spirit.MagicCrystalReq).Value;

                Debug.Log(Owner.ResourceSystem);
                if (Owner.ResourceSystem.CheckHaveResources(spiritLimit, goldCost, magicCrystalsCost))
                {
                    Debug.Log(3);
                    PlaceNewSpiritClicked?.Invoke(SpiritData);
                    Count--;

                    if (Count >= 1)
                    {
                        Debug.Log(4);
                        SpiritCountText.text = Count.ToString();
                        Debug.Log(5);
                    }
                    else
                    {
                        AllThisSpiritsPlaced?.Invoke(this);
                        Destroy(gameObject);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void Set(SpiritData spiritData, PlayerSystem owner, Vector2 position, int index)
        {
            transform.GetChild(0).GetComponent <Image>().sprite = spiritData.Image;

            owner      = Owner;
            SpiritData = spiritData;

            GetComponent <RectTransform>().localPosition = position * index;

            Count = 1;
        }
Ejemplo n.º 3
0
    private void Awake()
    {
        _controls = new PlayerControls();

        _spiritData = gameObject.GetComponent <SpiritData>();
        _speed      = _spiritData.spirit._speed;
        _jumpForce  = _spiritData.spirit._jumpForce;
        _throwForce = _spiritData.spirit._throwForce;
        _type       = _spiritData.spirit.type;


        switch (_type)
        {
        case Spirit.Type.small:
            _direction = Vector2.down * _throwForce;
            SetArrow();
            break;

        case Spirit.Type.Large:
            _direction = Vector2.up * _throwForce;
            SetArrow();
            break;

        case Spirit.Type.medium:
            _direction = Vector2.up * _throwForce;
            SetArrow();
            break;

        default:
            break;
        }

        _controls.Gameplay.Move.performed += HandleMove;
        _controls.Gameplay.Move.canceled  += context =>
        {
            _moveAxis  = Vector2.zero;
            _direction = Vector2.up * _throwForce;
            SetArrow();
        };

        _controls.Gameplay.Jump.performed += HandleJump;
        _controls.Gameplay.Jump.canceled  += context => { _isJumping = false; _isAim = false; };

        _controls.Gameplay.Change.performed += HandleChange;

        _controls.Gameplay.Aim.performed += HandleAim;
        _controls.Gameplay.Aim.canceled  += context => { _isAim = false; if (bulletTime != null)
                                                         {
                                                             bulletTime.Active = false;
                                                         }
        };
    }
Ejemplo n.º 4
0
        public static SpiritSystem Spirit(SpiritData data, Vector3 position, bool isOwnedByPlayer = true)
        {
            var newSpiritPrefab = U.Instantiate(data.Prefab, position, Quaternion.identity, ReferenceHolder.Instance.SpiritParent);
            var newSpirit       = new SpiritSystem(newSpiritPrefab, isOwnedByPlayer)
            {
                Data     = data,
                UsedCell = null
            };

            newSpirit.SetSystem(GameData.Instance.Player);
            PlaceEffect(newSpirit.Data.Base.Element, newSpiritPrefab.transform.position);
            return(newSpirit);
        }
Ejemplo n.º 5
0
        private void LoadSpirits()
        {
            if (_spiritPrefabs.Length == 0)
            {
                return;
            }
            var spirits = DataParser.LoadSpiritsData();

            _spirits = new SpiritData[spirits.Length];
            for (int i = 0; i < _spirits.Length; i++)
            {
                var phrases = _spiritPhrases.Where(p => spirits[i].Phrases.Contains(p.Id)).ToArray();
                _spirits[i]         = new SpiritData(spirits[i].Id, phrases, spirits[i].IsPremium, spirits[i].Name, spirits[i].PleasantItemIds, spirits[i].DialogIds);
                _spirits[i].Dialogs = this._spiritDialogs.Where(dialog => spirits[i].DialogIds.Contains(dialog.Id)).ToArray();
                _spirits[i].Prefab  = _spiritPrefabs[i];
            }
        }
Ejemplo n.º 6
0
        void OnPlacingNewSpirit(SpiritData spiritData)
        {
            if (Owner.CellControlSystem.IsGridBuilded)
            {
                var newSpiritLimit      = spiritData.Get(Enums.Spirit.SpiritLimit).Value;
                var newGoldCost         = spiritData.Get(Numeral.ResourceCost).Value;
                var newMagicCrystalCost = spiritData.Get(Enums.Spirit.MagicCrystalReq).Value;

                if (Owner.ResourceSystem.CheckHaveResources(newSpiritLimit, newGoldCost, newMagicCrystalCost))
                {
                    if (GameManager.Instance.GameState == GameState.InGameMultiplayer)
                    {
                        var choosedCell = Owner.CellControlSystem.ChoosedCell;

                        var position = new Coordinates3D(
                            (int)choosedCell.transform.position.x,
                            (int)choosedCell.transform.position.y,
                            (int)choosedCell.transform.position.z);

                        SpiritCreationRequested?.Invoke(new SpiritCreationRequest()
                        {
                            Index     = spiritData.Index,
                            Rarity    = (int)spiritData.Base.Rarity,
                            Element   = (int)spiritData.Base.Element,
                            Position  = position,
                            CellIndex = Owner.CellControlSystem.Cells.IndexOf(choosedCell)
                        });
                    }
                    else
                    {
                        var newSpirit = Create.Spirit(spiritData, Owner.CellControlSystem.ChoosedCell, true);
                        SpiritPlaced?.Invoke(newSpirit);
                    }
                }
            }
        }
Ejemplo n.º 7
0
        public void AddSpiritButton(SpiritData spiritData)
        {
            var spiritCount  = 0;
            var isSameSpirit = false;

            spiritButtons.ForEach(button =>
            {
                if (button.SpiritData.Index == spiritData.Index)
                {
                    isSameSpirit = true;
                    button.Count++;
                    button.transform.GetChild(0).GetChild(0).GetComponent <TextMeshProUGUI>().text = button.Count.ToString();
                    spiritCount++;
                }
            });

            if (!isSameSpirit)
            {
                spiritButtons.Add(GetSpiritButton());
            }

            UpdateUI();

            SpiritButtonSystem GetSpiritButton()
            {
                var newSpiritButton = Instantiate(SpiritButtonPrefab, RarityGOs[(int)spiritData.Base.Rarity].transform).GetComponent <SpiritButtonSystem>();

                newSpiritButton.Set(spiritData, Owner, newSpiritButtonPos, spiritCount);
                newSpiritButton.PlaceNewSpiritClicked += OnPlaceNewSpiritClicked;
                newSpiritButton.AllThisSpiritsPlaced  += OnAllThisSpiritsUsed;

                return(newSpiritButton);

                void OnPlaceNewSpiritClicked(SpiritData obj) => PlaceNewSpiritClicked?.Invoke(obj);

                void OnAllThisSpiritsUsed(SpiritButtonSystem spiritButton)
                {
                    spiritButtons.Remove(spiritButton);

                    var buttonRects = new List <RectTransform>();

                    spiritButtons.ForEach(button =>
                    {
                        if (button.Element == spiritButton.Element)
                        {
                            if (button.Rarity == spiritButton.Rarity)
                            {
                                buttonRects.Add(button.GetComponent <RectTransform>());
                            }
                        }
                    });

                    for (int i = 0; i < buttonRects.Count; i++)
                    {
                        var isNewButtonPosBusy = false;
                        var newButtonPos       = (Vector2)buttonRects[i].localPosition - newSpiritButtonPos;

                        for (int j = 0; j < buttonRects.Count; j++)
                        {
                            if (newButtonPos.y == buttonRects[j].localPosition.y)
                            {
                                isNewButtonPosBusy = true;
                                break;
                            }
                        }

                        if (isNewButtonPosBusy)
                        {
                            break;
                        }
                        else if (newButtonPos.y >= 0)
                        {
                            buttonRects[i].localPosition = newButtonPos;
                        }
                    }
                }
            }
        }