Exemplo n.º 1
0
 public void Harvest(int x, int y)
 {
     TargeType = TragetType.Harvest;
     _pathFinder.MoveTo(x, y, true);
     HarvestTargetX = x;
     HarvestTargetY = y;
 }
Exemplo n.º 2
0
        public void Attack(UnitController unit)
        {
            TargeType        = TragetType.Combat;
            CombatUnitTarget = unit;

            var location = CordUtil.WorldToTile(unit.transform.position);

            _pathFinder.MoveTo(location.First, location.Second, true);
            _combatTargetX      = location.First;
            _combatTargetY      = location.Second;
            _pathFindCheckCount = 10f;
        }
Exemplo n.º 3
0
        public void FixedUpdate()
        {
            if (_currentcooldown > 0f)
            {
                _currentcooldown -= Time.fixedDeltaTime;
            }



            if (TargeType == TragetType.Harvest)
            {
                if (HarvestHP <= 0f)
                {
                    TargeType = TragetType.None;
                    var player = _playerManager.Players.First(p => p.ID == PlayerOwner);

                    switch (_map.Map[HarvestTargetX, HarvestTargetY].ResourceType)
                    {
                    case MinableResourceType.None:
                        break;

                    case MinableResourceType.Food:
                        player.Food += 10;
                        break;

                    case MinableResourceType.Rock:
                        player.Stone += 10;
                        break;

                    case MinableResourceType.Wood:
                        player.Wood += 10;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    _map.Map[HarvestTargetX, HarvestTargetY].Decorators.Clear();
                    _map.Map[HarvestTargetX, HarvestTargetY].Type = TileTypes.Dirt;
                    _map.RebuildTile(HarvestTargetX, HarvestTargetY);
                    _map.Apply();

                    HarvestHP = 10f;
                }
                else
                {
                    var playerloc = CordUtil.WorldToTile(transform.position);
                    var xdiff     = playerloc.First - HarvestTargetX;
                    var ydiff     = playerloc.Second - HarvestTargetY;

                    if (xdiff == -1)
                    {
                        xdiff = 1;
                    }
                    if (ydiff == -1)
                    {
                        ydiff = 1;
                    }

                    if (xdiff <= 1 && ydiff <= 1)
                    {
                        HarvestHP -= Time.fixedDeltaTime;
                    }
                }
            }

            if (CombatUnitTarget != null && _currentcooldown <= 0f)
            {
                var loc = CordUtil.WorldToTile(CombatUnitTarget.transform.position);

                if (loc.First != _combatTargetX || loc.Second != _combatTargetY)
                {
                    Attack(CombatUnitTarget);
                }


                if (Vector3.Distance(transform.position, CombatUnitTarget.transform.position) < CombatDistance)
                {
                    CombatUnitTarget.Hit(CombatDamage);
                    _currentcooldown = CombatCooldown;
                }
            }

            if (HP <= 0)
            {
                //Unit dies
                Destroy(gameObject);
            }
        }