private void Update() { switch (CurrentGameState) { case GameStates.Hiring: break; case GameStates.CharacterPicking: if (Input.GetKeyDown(KeyCode.Mouse0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { PlayableUnit unit = hit.collider.gameObject.GetComponent <PlayableUnit>(); if (unit != null && unit._player == _activePlayer) { ActivateUnit(unit); } } } break; case GameStates.Movement: break; default: break; } }
public void Attack(PlayableUnit currUnit, PlayableUnit targetUnit) { int Dx = Math.Abs(currUnit.UnitCoordinates.X - targetUnit.UnitCoordinates.X); int Dy = Math.Abs(currUnit.UnitCoordinates.Y - targetUnit.UnitCoordinates.Y); targetUnit.Hp = Math.Max(0, targetUnit.Hp - (Dx <= 1 && Dy <= 1 ? currUnit.Damage / 2 : currUnit.Damage)); }
public void EndUnitTurn(PlayableUnit unit) { StopCoroutine(_waitCoroutine); EndTurn(); _countDown.gameObject.SetActive(false); CurrentGameState = GameStates.CharacterPicking; }
private void Attack() { _isAttacking = true; switch (_currentWeapon) { case Weapons.Fists: _animator.Play("Punch"); StartCoroutine(EndPunch(_animationLengthFist)); break; case Weapons.PowerPunch: _animator.Play("Punch"); StartCoroutine(EndPunch(_animationLengthFist)); break; case Weapons.Knife: _animator.Play("Knife"); StartCoroutine(EndPunch(_animationLengthKnife)); break; case Weapons.Hammer: _animator.Play("Hammer"); StartCoroutine(EndPunch(_animationLengthHammer)); break; case Weapons.Gun: _animator.Play("Gun"); StartCoroutine(EndPunch(_animationLengthGun)); break; default: break; } RaycastHit hit; Ray ray = new Ray(transform.position + new Vector3(0, 1, 0), transform.forward); if (Physics.Raycast(ray, out hit, _attackRange)) { if (hit.collider != null) { PlayableUnit enemy = hit.collider.gameObject.GetComponent <PlayableUnit>(); if (enemy != null && enemy._player != PlayerManager.Instance._activePlayer) { if (IsFortified) { int damage = Mathf.RoundToInt(_strength / enemy._defense); Mathf.Clamp(damage, 1, 11); enemy.Health -= damage; } else { enemy.Health -= _strength; } } } } }
private void AssignUnitValues(PlayableUnit thisUnit) { thisUnit._player = PlayerManager.Instance._activePlayer; thisUnit._health = _health; thisUnit._strength = _strength; thisUnit._speed = _speed; thisUnit._defense = _defense; }
public bool CanAttack(PlayableUnit source, PlayableUnit target) { //Если атакуемый юнит жив return(!target.IsDead && //игрок не пытается атаковать сам себя source.Player != target.Player && //и координаты входят в радиус атаки - везвраащем true, иначе - false Math.Abs(source.UnitCoordinates.X - target.UnitCoordinates.X) <= source.MaxAttackRange && Math.Abs(source.UnitCoordinates.Y - target.UnitCoordinates.Y) <= source.MaxAttackRange); }
private void OnTriggerEnter(Collider other) { PlayableUnit unit = other.GetComponent <PlayableUnit>(); if (unit != null) { unit.CurrentWeapon = weaponType; Destroy(this.gameObject); } }
private IEnumerator WaitUnitTurn(PlayableUnit unit) { CurrentGameState = GameStates.Movement; int timeRemaining = 10; _countDown.gameObject.SetActive(true); _countDown.text = timeRemaining.ToString(); for (int i = 0; i < 10; i++) { yield return(new WaitForSeconds(1f)); timeRemaining--; _countDown.text = timeRemaining.ToString(); } unit.IsActive = false; EndUnitTurn(unit); }
private void Place() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.CompareTag("Floor")) { GameObject newUnit = Instantiate(_unit, hit.point, Quaternion.identity); PlayableUnit thisUnit = newUnit.AddComponent <PlayableUnit>(); AssignUnitValues(thisUnit); _isPlacing = false; _UI.SetActive(true); PlayerManager.Instance.CheckMoneyForRemainingMoney(); PlayerManager.Instance.EndTurn(); UpdateUIValues(); } } }
public void MoveTo(PlayableUnit target, int x, int y) { target.UnitCoordinates.X = x; target.UnitCoordinates.Y = y; }
public void Suicide(PlayableUnit unit) { EndUnitTurn(unit); }
public static void UpdatePlayerPartyPos(PlayableUnit unit, int pos) { unit.partyPos = pos; SortPlayerParty(); }
public bool CanMove(PlayableUnit unit, int x, int y) { return(Math.Abs(unit.UnitCoordinates.X - x) <= unit.MaxMoveRange && Math.Abs(unit.UnitCoordinates.Y - y) <= unit.MaxMoveRange); }
private void ActivateUnit(PlayableUnit unit) { unit.IsActive = true; _waitCoroutine = StartCoroutine(WaitUnitTurn(unit)); }
public static void RemoveFromPlayerParty(PlayableUnit unit) { PlayableUnit unitToRemove = playerParty.Find(u => u.name == unit.name); playerParty.Remove(unitToRemove); }
public static void UpdatePlayerUnit(PlayableUnit unit) { int index = playerParty.FindIndex(u => u.name == unit.name); playerParty[index] = unit; }
public bool CanStandWithOtherUnit(PlayableUnit other) { return(false); }
public static void AddToPlayerParty(PlayableUnit unit) { playerParty.Add(unit); SortPlayerParty(); }
public void Attack(PlayableUnit currUnit, PlayableUnit targetUnit) { targetUnit.Hp = Math.Max(0, targetUnit.Hp - currUnit.Damage); }