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); } } } }
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; }
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; } }; }
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); }
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]; } }
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); } } } }
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; } } } } }