Beispiel #1
0
 public void OnSpawn(GameObject room)
 {
     CurrentRoomController = room.GetComponent<ResourceRoomController>();
     //Start Imp ai:
     _currentImpState = ImpState.SeekingResource;
     _target = CurrentRoomController.ResourceEnterance.transform.position;
     transform.parent = CurrentRoomController.Units.transform;
 }
Beispiel #2
0
    void FixedUpdate()
    {
        if (_fleeTimer > 0f)
        {
            _fleeTimer -= Time.fixedDeltaTime;
        }else if (_currentImpState == ImpState.Fleeing)
        {
            _currentImpState = ImpState.SeekingResource;
            _target = CurrentRoomController.ResourceEnterance.transform.position;
            _rigidbody2D.isKinematic = false;
            _collider2D.enabled = true;
            return;
        }

        if (_currentImpState == ImpState.Mining)
        {
            _currentMineTime -= Time.fixedDeltaTime;

            if (_currentMineTime <= 0f)
            {
                ReachedDestination();
                return;
            }
        }

        if (_currentSleepTime > 0f)
        {
            _currentSleepTime -= Time.fixedDeltaTime;
            _anim.SetFloat("Speed", 0f);
            return;
        }

        if (_target == Vector3.zero)
        {
            _anim.SetFloat("Speed", 0f);
            return;
        }

        if (Vector3.Distance(_target, transform.position) <= StopDistance)
        {
            ReachedDestination();
            return;
        }

        var movex = transform.position.x;
        var movey = transform.position.y;

        if (_currentImpState == ImpState.SeekingDropPoint || _currentImpState == ImpState.SeekingResource || _currentImpState == ImpState.Fleeing)
        {
            if (_clearKinematic)
            {
                if (_KinematicTimer > 0f)
                    _KinematicTimer -= Time.fixedDeltaTime;
                else
                {
                    _rigidbody2D.isKinematic = false;
                    _clearKinematic = false;
                    _KinematicTimer = 1f;
                }
            }

            if (_lastPosition != Vector3.zero && _lastPosition == transform.position)
            {
                _rigidbody2D.isKinematic = true;
                _clearKinematic = true;
                _KinematicTimer = 1f;
            }

            _lastPosition = transform.position;

            if (_target.x > transform.position.x)
            {
                if (_facingleft)
                {
                    transform.localScale = new Vector3(transform.localScale.x*-1, transform.localScale.y,
                        transform.localScale.z);

                    _facingleft = false;
                }

                movex = transform.position.x + (MoveSpeed*Time.fixedDeltaTime);
            }

            if (_target.x < transform.position.x)
            {
                if (!_facingleft)
                {
                    transform.localScale = new Vector3(transform.localScale.x*-1, transform.localScale.y,
                        transform.localScale.z);

                    _facingleft = true;
                }

                movex = transform.position.x - (MoveSpeed*Time.fixedDeltaTime);
            }

            _rigidbody2D.MovePosition(new Vector2(movex, movey));
            _anim.SetFloat("Speed", MoveSpeed);
        }

        if (_currentImpState == ImpState.GoingUpLadder || _currentImpState == ImpState.GoingDownLadder)
        {
            if (_target.y > transform.position.y)
            {
                movey = transform.position.y + (MoveSpeed * Time.fixedDeltaTime);
            }

            if (_target.y < transform.position.y)
            {
                movey = transform.position.y - (MoveSpeed * Time.fixedDeltaTime);
            }

            transform.position = new Vector2(movex, movey);
            _anim.SetFloat("Speed", 0f);
        }
    }
Beispiel #3
0
 public void TakeHit(int qty)
 {
     _currentImpState = ImpState.Fleeing;
     _target = LitchController.Instance.gameObject.transform.position;
     _fleeTimer = FleeTime;
 }
Beispiel #4
0
 void ReachedDestination()
 {
     switch (_currentImpState)
     {
         case ImpState.SeekingResource:
             _currentImpState = ImpState.GoingDownLadder;
             _rigidbody2D.isKinematic = true;
             _collider2D.enabled = false;
             _target = CurrentRoomController.BottomOfLadder.transform.position;
             break;
         case ImpState.GoingDownLadder:
             _currentMineTime = MiningTime;
             _currentImpState = ImpState.Mining;
             _renderer.enabled = false;
             _target = Vector3.zero;
             break;
         case ImpState.Mining:
             _currentImpState = ImpState.GoingUpLadder;
             _rigidbody2D.isKinematic = true;
             _collider2D.enabled = false;
             _target = CurrentRoomController.TopOfLadder.transform.position;
             _renderer.enabled = true;
             break;
         case ImpState.GoingUpLadder:
             _currentImpState = ImpState.SeekingDropPoint;
             _rigidbody2D.isKinematic = false;
             _collider2D.enabled = true;
             _target = CurrentRoomController.ResourceDrop.transform.position;
             break;
         case ImpState.SeekingDropPoint:
             _currentImpState = ImpState.SeekingResource;
             _target = CurrentRoomController.ResourceEnterance.transform.position;
             if(CurrentRoomController.ResourceType == ResourceRoomController.ResourceTypes.Gold)
                 GameManager.Instance.DropGold();
             if(CurrentRoomController.ResourceType == ResourceRoomController.ResourceTypes.Gems)
                 GameManager.Instance.DropGems();
             _currentSleepTime = SleepTime;
             break;
     }
 }