Ejemplo n.º 1
0
    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;
        }
    }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
 public void EndUnitTurn(PlayableUnit unit)
 {
     StopCoroutine(_waitCoroutine);
     EndTurn();
     _countDown.gameObject.SetActive(false);
     CurrentGameState = GameStates.CharacterPicking;
 }
Ejemplo n.º 4
0
    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;
                    }
                }
            }
        }
    }
Ejemplo n.º 5
0
 private void AssignUnitValues(PlayableUnit thisUnit)
 {
     thisUnit._player   = PlayerManager.Instance._activePlayer;
     thisUnit._health   = _health;
     thisUnit._strength = _strength;
     thisUnit._speed    = _speed;
     thisUnit._defense  = _defense;
 }
Ejemplo n.º 6
0
 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);
 }
Ejemplo n.º 7
0
    private void OnTriggerEnter(Collider other)
    {
        PlayableUnit unit = other.GetComponent <PlayableUnit>();

        if (unit != null)
        {
            unit.CurrentWeapon = weaponType;
            Destroy(this.gameObject);
        }
    }
Ejemplo n.º 8
0
    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);
    }
Ejemplo n.º 9
0
    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();
            }
        }
    }
Ejemplo n.º 10
0
 public void MoveTo(PlayableUnit target, int x, int y)
 {
     target.UnitCoordinates.X = x;
     target.UnitCoordinates.Y = y;
 }
Ejemplo n.º 11
0
 public void Suicide(PlayableUnit unit)
 {
     EndUnitTurn(unit);
 }
Ejemplo n.º 12
0
 public static void UpdatePlayerPartyPos(PlayableUnit unit, int pos)
 {
     unit.partyPos = pos;
     SortPlayerParty();
 }
Ejemplo n.º 13
0
 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);
 }
Ejemplo n.º 14
0
 private void ActivateUnit(PlayableUnit unit)
 {
     unit.IsActive  = true;
     _waitCoroutine = StartCoroutine(WaitUnitTurn(unit));
 }
Ejemplo n.º 15
0
    public static void RemoveFromPlayerParty(PlayableUnit unit)
    {
        PlayableUnit unitToRemove = playerParty.Find(u => u.name == unit.name);

        playerParty.Remove(unitToRemove);
    }
Ejemplo n.º 16
0
    public static void UpdatePlayerUnit(PlayableUnit unit)
    {
        int index = playerParty.FindIndex(u => u.name == unit.name);

        playerParty[index] = unit;
    }
Ejemplo n.º 17
0
 public bool CanStandWithOtherUnit(PlayableUnit other)
 {
     return(false);
 }
Ejemplo n.º 18
0
 public static void AddToPlayerParty(PlayableUnit unit)
 {
     playerParty.Add(unit);
     SortPlayerParty();
 }
Ejemplo n.º 19
0
 public void Attack(PlayableUnit currUnit, PlayableUnit targetUnit)
 {
     targetUnit.Hp = Math.Max(0, targetUnit.Hp - currUnit.Damage);
 }