コード例 #1
0
    private void AttackWithAdditionalDamage(UnitCombatSystem unitCombatSystem)
    {
        var attackedUnitStats = unitCombatSystem.GetUnitStats();
        var attackedUnitName  = attackedUnitStats.unitName;

        var attackedCounter = attackedUnitStats.counterType;

        if (attackedUnitStats.ability == AbilitiesEnum.Counter)
        {
            if (attackedCounter == unitStats.unitType)
            {
                _healthSystem.Damage(attackedUnitStats.counterDamage);
            }
        }
        foreach (var attackingTag in unitStats.attackTags)
        {
            if (attackingTag.tagName != attackedUnitName)
            {
                return;
            }
            unitCombatSystem._healthSystem.Damage(unitStats.damage + attackingTag.tagDamage);
            Debug.Log(
                $"Attack unit {unitCombatSystem.name}, normal damage: {unitStats.damage}, tag damage: {attackingTag.tagDamage}, overall dmg: {unitStats.damage + attackingTag.tagDamage}");
            return;
        }
    }
コード例 #2
0
 public bool CanDistanceAttack(UnitCombatSystem unitGridCombat)
 {
     // Number depends on grid tile size
     Debug.Log(Vector3.Distance(GetPosition() / 2, unitGridCombat.GetPosition() / 2));
     Debug.Log($"Range {unitStats.attackRange * 18f / 2}");
     return(Vector3.Distance(GetPosition() / 2f, unitGridCombat.GetPosition() / 2f) <
            (unitStats.attackRange) * 18f / 2);
 }
コード例 #3
0
 private void CombatSystemUnitDebugLogger(UnitCombatSystem unit)
 {
     if (unit == null)
     {
         return;
     }
     Debug.Log(
         $"Unit name: {unit.name}, team: {unit.GetTeam()}, POSITION: X:{unit.transform.position.x} Y:{unit.transform.position.y} ");
 }
コード例 #4
0
    public void PickUnit(GameObject element)
    {
        var elementCombatSystem = element.GetComponent <UnitCombatSystem>();

        _pickedPosition     = false;
        _pickButtonSelected = EventSystem.current.currentSelectedGameObject;
        _unitStatsControllerUI.ViewClickedUnitStatsDraftPick(elementCombatSystem.GetUnitStats(),
                                                             _teamPicking);
        _pickedUnit = element.GetComponent <UnitCombatSystem>();
    }
コード例 #5
0
    private void PlaceUnitOnMap()
    {
        var pickedUnit = Instantiate(_pickedUnit, CursorUtils.GetMouseWorldPosition(), Quaternion.identity);

        pickedUnit.transform.localScale = _unitScale;
        pickedUnit.transform.position   = GridUtils.SetUnitOnTileCenter(pickedUnit.gameObject);
        GameController_GridCombatSystem
        .Instance
        .GetGrid()
        .GetGridObject(pickedUnit.GetPosition())
        .SetUnitGridCombat(pickedUnit);
        _pickedUnit = null;
    }
コード例 #6
0
    public void AttackUnit(UnitCombatSystem unitCombatSystem, Action onAttackComplete)
    {
        _state = State.Attacking;

        AttackWithAdditionalDamage(unitCombatSystem);
        unitCombatSystem._healthSystem.Damage(unitStats.damage);
        if (unitCombatSystem.IsDead())
        {
            var grid = GameController_GridCombatSystem.Instance.GetGrid();
            grid.SetGridObject(transform.position, null);
        }
        Debug.Log(
            $"Attack unit {unitCombatSystem.name}, normal damage: {unitStats.damage}, tag damage: none, overall dmg: {unitStats.damage}");
        onAttackComplete();
    }
コード例 #7
0
    private void SelectNextActiveUnit()
    {
        if (_unitCombatSystem == null || _unitCombatSystem.GetTeam() == UnitCombatSystem.Team.Right)
        {
            _unitCombatSystem = GetNextActiveUnit(UnitCombatSystem.Team.Left);
            Debug.Log($"Next unit is: {_unitCombatSystem}");
        }
        else
        {
            _unitCombatSystem = GetNextActiveUnit(UnitCombatSystem.Team.Right);
            Debug.Log($"Next unit is: {_unitCombatSystem}");
        }

        _unitCombatSystem.SetActive();
        _canMoveThisTurn   = true;
        _canAttackThisTurn = true;
    }
コード例 #8
0
    private void Start()
    {
        _grid                     = GameController_GridCombatSystem.Instance.GetGrid();
        _pickedUnit               = null;
        _numberOfUnitsInTeam      = 5;
        _draftPickPoint           = 0;
        _unitScale                = new Vector3(5, 5, 1);
        _teamsState.areTeamsReady = false;

        _rightTeamRespawn.SetActive(false);

        _teamsState.leftTeam.Clear();
        _teamsState.rightTeam.Clear();
        _teamsState.allUnitsInBothTeams.Clear();

        _unitStatsControllerUI.HideGamePanels();
        _teamPicking = UnitCombatSystem.Team.Left;
        _unitStatsControllerUI.HidePanelPlayerPanel(_teamPicking, GameModeEnum.DraftPick);
        Debug.LogWarning($"START INIT: TEAM PICKING : {_teamPicking}");
        if (_debug)
        {
            _numberOfUnitsInTeam = 1;
        }
    }
コード例 #9
0
 public void SetUnitGridCombat(UnitCombatSystem unit)
 {
     _unitCombatSystem = unit;
 }
コード例 #10
0
 public bool CanMeleeAttack(UnitCombatSystem unitGridCombat)
 {
     // Number depends on grid tile size
     return(Vector3.Distance(GetPosition(), unitGridCombat.GetPosition()) < 18f);
 }
コード例 #11
0
 public bool IsEnemy(UnitCombatSystem unitGridCombat)
 {
     return(unitGridCombat.GetTeam() != team);
 }
コード例 #12
0
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hit;
            var        ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out hit))
            {
                Debug.Log($"RAYCAST HIT: {hit.transform.name}");
            }
        }

        if (!Input.GetMouseButtonDown(0) || _pickedUnit == null)
        {
            return;
        }
        var gridObject = _grid.GetGridObject(CursorUtils.GetMouseWorldPosition());

        if (_pickedUnit == null || gridObject == null || gridObject.GetRespawn() == null)
        {
            return;
        }

        // TODO nice to have removed duplicates
        if (_teamPicking == UnitCombatSystem.Team.Left)
        {
            if (gridObject.GetRespawn().CompareTag("RightRespawn"))
            {
                return;
            }
            var pickedUnit = Instantiate(_pickedUnit, CursorUtils.GetMouseWorldPosition(), Quaternion.identity);
            pickedUnit.transform.localScale = _unitScale;
            pickedUnit.transform.position   = GridUtils.SetUnitOnTileCenter(pickedUnit.gameObject);
            _unitStatsControllerUI.HidePanelPlayerPanel(_teamPicking, GameModeEnum.DraftPick);

            _teamsState.leftTeam.Add(pickedUnit);
            _teamsState.allUnitsInBothTeams.Add(pickedUnit);

            _pickButtonSelected.SetActive(false);
            _pickedUnit = null;
            _draftPickPoint++;

            if (
                _draftPickPoint == 1 ||
                _draftPickPoint == 5 ||
                _draftPickPoint == 9
                )
            {
                HideRespawn();
                _teamPicking = UnitCombatSystem.Team.Right;
                _unitStatsControllerUI.HidePanelPlayerPanel(_teamPicking, GameModeEnum.DraftPick);
                Debug.Log($"DRAFT PICK POINT: {_draftPickPoint} NEXT PICK: {_teamPicking}");
                return;
            }
        }

        if (_teamPicking == UnitCombatSystem.Team.Right)
        {
            if (gridObject.GetRespawn().CompareTag("LeftRespawn"))
            {
                return;
            }
            var pickedUnit = Instantiate(_pickedUnit, CursorUtils.GetMouseWorldPosition(), Quaternion.identity);
            pickedUnit.transform.localScale = _unitScale;
            pickedUnit.transform.position   = GridUtils.SetUnitOnTileCenter(pickedUnit.gameObject);

            _teamsState.rightTeam.Add(pickedUnit);
            _teamsState.allUnitsInBothTeams.Add(pickedUnit);

            _pickedUnit = null;
            _pickButtonSelected.SetActive(false);

            if (_teamsState.rightTeam.Count == _numberOfUnitsInTeam)
            {
                Debug.Log($"{_teamsState.rightTeam} is FULL");

                _leftTeamRespawn.SetActive(false);
                _rightTeamRespawn.SetActive(false);
                _gridCombatSystem._teamsState = _teamsState;
                _gridCombatSystem.SetupGame();
                return;
            }

            _draftPickPoint++;
            if (_draftPickPoint == 3 || _draftPickPoint == 7)
            {
                HideRespawn();
                _teamPicking = UnitCombatSystem.Team.Left;
                _unitStatsControllerUI.HidePanelPlayerPanel(_teamPicking, GameModeEnum.DraftPick);
                Debug.Log($"DRAFT PICK POINT: {_draftPickPoint} NEXT PICK: {_teamPicking}");
            }
        }
    }