Example #1
0
    void RetractBoomerang()
    {
        boomerangObj.position -= transform.forward * retractingSpeed;

        Vector3 retractPoint  = new Vector3(transform.position.x, transform.position.y, transform.position.z + shootingLength);
        float   distance      = Vector3.Distance(altweapons.altWeaponPos, boomerangObj.position);
        float   resetDistance = Vector3.Distance(retractPoint, boomerangObj.position);

        if (distance <= 1)
        {
            altweapons.canUseAltWeapon       = true;
            altweapons.swordAndShieldShowing = true;
            altweapons.tpc.canMove           = true;
            altweapons.tpc.canLookAround     = true;
            Destroy(boomerangObj.gameObject);
            currentState = BoomerangState.Idle;
        }
        else if (resetDistance >= 15f)
        {
            altweapons.canUseAltWeapon       = true;
            altweapons.swordAndShieldShowing = true;
            altweapons.tpc.canMove           = true;
            altweapons.tpc.canLookAround     = true;
            currentState = BoomerangState.Idle;
            Destroy(boomerangObj.gameObject);
        }
    }
Example #2
0
        private void MoveBack(Sprite sprite)
        {
            var ownerSprite = Owner.GetComponent <Sprite>();

            if (ownerSprite == null)
            {
                _currentState = BoomerangState.Stop;
                Active        = false;
            }

            if (ManagerFunction.Distance(sprite.Position, ownerSprite.Position) < 2)
            {
                _currentState = BoomerangState.Stop;
                Active        = false;
                return;
            }

            if (ownerSprite.Position.X < sprite.Position.X)
            {
                sprite.Move(-1 * _speed, 0);
            }
            if (ownerSprite.Position.X > sprite.Position.X)
            {
                sprite.Move(_speed, 0);
            }
            if (ownerSprite.Position.Y < sprite.Position.Y)
            {
                sprite.Move(0, -1 * _speed);
            }
            if (ownerSprite.Position.Y > sprite.Position.Y)
            {
                sprite.Move(0, _speed);
            }
        }
        public override void UpdateDelta(float delta)
        {
            switch (BoomerangAction)
            {
            case (BoomerangState.Prethrow):
                PrethrowTime -= delta;
                if (PrethrowTime < 0)
                {
                    BoomerangProjectile = new BoomerangProjectile(Human.World, new Vector2(Human.Box.Bounds.X + 8 * GetFacingVector(Human.Facing).X, Human.Box.Y + Human.Box.Height / 2), Lifetime, Weapon)
                    {
                        Shooter  = Human,
                        Velocity = AngleToVector(Angle) * 5
                    };
                    Weapon.BoomerProjectile = BoomerangProjectile;
                    BoomerangAction         = BoomerangState.Throw;
                }
                break;

            case (BoomerangState.Throw):
                if (BoomerangProjectile.Destroyed)
                {
                    Human.ResetState();
                }
                break;
            }
        }
Example #4
0
        public override void Update(double gameTime)
        {
            base.Update(gameTime);

            var sprite = GetComponent <Sprite>();

            if (sprite == null)
            {
                _currentState = BoomerangState.Stop;
                return;
            }

            _counter += gameTime;

            CheckCollision();

            switch (_currentState)
            {
            case BoomerangState.Forward:
                MoveForward(sprite);
                if (_counter > 300)
                {
                    _currentState = BoomerangState.Back;
                }
                break;

            case BoomerangState.Back:
                MoveBack(sprite);
                break;
            }
        }
Example #5
0
    void ShootBoomerang()
    {
        boomerangObj.position += transform.forward * shootingSpeed;
        float distance = Vector3.Distance(altweapons.altWeaponPos, boomerangObj.position);

        if (distance > shootingLength)
        {
            currentState = BoomerangState.Retract;
        }
    }
        void Start()
        {
            _actionState = BoomerangState.idle;

            if (transform.parent)
            {
                _oldParent   = transform.parent.gameObject;
                _oldPosition = transform.localPosition;
                _oldRotation = transform.localRotation;
            }

            _trail = GetComponent <TrailRenderer>();
        }
Example #7
0
        private void CheckCollision()
        {
            BaseObject outBaseObject;
            var        sprite = GetComponent <Sprite>();
            Animation  outAnimation;

            if (_entities.CheckCollision(sprite.Rectangle, out outAnimation, out outBaseObject, Owner.GetOwnerId()))
            {
                var statusEffect = outBaseObject.GetComponent <StatusEffect>();
                if (statusEffect != null)
                {
                    statusEffect.AddStatusEffect(new StatusEffectFreeze(outBaseObject));
                }
                _currentState     = BoomerangState.Back;
                _counter          = 0;
                _alreadyHitObject = true;
            }
        }
        void Update()
        {
            if (_isAttacking && _actionState == BoomerangState.idle)
            {
                _targetPos         = transform.position + _player.transform.forward * _maxRange;
                _actionState       = BoomerangState.flying;
                _flying            = true;
                transform.parent   = null;
                transform.rotation = Quaternion.Euler(_startRotation);
                _trail.enabled     = true;
            }

            if (_flying)
            {
                if (_actionState == BoomerangState.flyingBack)
                {
                    _targetPos = _oldParent.transform.position;
                }

                transform.position = Vector3.MoveTowards(transform.position, _targetPos, _speed * Time.deltaTime);
                transform.Rotate(0, _rotationSpeed * Time.deltaTime, 0, Space.World);

                if (Vector3.Distance(transform.position, _targetPos) <= 0.1f)
                {
                    if (_actionState == BoomerangState.flying)
                    {
                        _actionState = BoomerangState.flyingBack;
                    }
                    else
                    {
                        _flying                 = false;
                        _isAttacking            = false;
                        _actionState            = BoomerangState.idle;
                        transform.parent        = _oldParent.transform;
                        transform.localPosition = _oldPosition;
                        transform.localRotation = _oldRotation;

                        _trail.enabled = false;
                    }
                }
            }
        }
Example #9
0
 public override void Action()
 {
     var ownerAnimation = Owner.GetComponent<Animation>();
     var ownerSprite = Owner.GetComponent<Sprite>();
     if (ownerAnimation == null || ownerSprite == null)
         return;
     ownerAnimation.PlayAnimation(State.Special, ownerAnimation.CurrentDirection);
     var sprite = GetComponent<Sprite>();
     var animation = GetComponent<Animation>();
     if(sprite != null && animation != null)
     {
         sprite.Teleport(ownerSprite.Position);
         animation.CurrentDirection = Direction.Down;
         animation.LockDirection = true;
     }
     _currentDirection = ownerAnimation.CurrentDirection;
     _currentState = BoomerangState.Forward;
     Active = true;
     _counter = 0;
 }
Example #10
0
        private void MoveForward(Sprite sprite)
        {
            var x = 0f;
            var y = 0f;

            switch (_currentDirection)
            {
            case Direction.Up:
                y = -1 * _speed;
                break;

            case Direction.Down:
                y = _speed;
                break;

            case Direction.Left:
                x = -1 * _speed;
                break;

            case Direction.Right:
                x = _speed;
                break;

            default:
                return;
            }

            if (_currentState == BoomerangState.Forward)
            {
                var collision = GetComponent <Collision>();
                if (collision != null && collision.CheckCollisionWithTiles(new Rectangle((int)(sprite.Position.X + x), (int)(sprite.Position.Y + y), sprite.Width, sprite.Height)))
                {
                    _currentState = BoomerangState.Back;
                    _counter      = 0;
                }
                else
                {
                    sprite.Move(x, y);
                }
            }
        }
Example #11
0
    void Update()
    {
        if (active)
        {
            switch (currentState)
            {
            case BoomerangState.Idle:
                rb.useGravity  = true;
                rb.isKinematic = false;
                if (Input.GetButtonDown("AltWeapon") && altweapons.canUseAltWeapon)
                {
                    GameObject altWeaponInUse = Instantiate(altweapons.altWeapons[0], altweapons.altWeaponPos, Quaternion.identity) as GameObject;
                    boomerangObj = altWeaponInUse.transform;
                    altweapons.canUseAltWeapon       = false;
                    altweapons.swordAndShieldShowing = false;
                    altweapons.tpc.canMove           = false;
                    altweapons.tpc.canLookAround     = false;
                    currentState = BoomerangState.Shoot;
                }
                break;

            case BoomerangState.Shoot:
                rb.useGravity  = false;
                rb.isKinematic = true;
                ShootBoomerang();
                break;

            case BoomerangState.Retract:
                rb.useGravity  = false;
                rb.isKinematic = true;
                RetractBoomerang();
                break;

            default:
                break;
            }
        }
    }
Example #12
0
        public override void Action()
        {
            var ownerAnimation = Owner.GetComponent <Animation>();
            var ownerSprite    = Owner.GetComponent <Sprite>();

            if (ownerAnimation == null || ownerSprite == null)
            {
                return;
            }
            ownerAnimation.PlayAnimation(State.Special, ownerAnimation.CurrentDirection);
            var sprite    = GetComponent <Sprite>();
            var animation = GetComponent <Animation>();

            if (sprite != null && animation != null)
            {
                sprite.Teleport(ownerSprite.Position);
                animation.CurrentDirection = Direction.Down;
                animation.LockDirection    = true;
            }
            _currentDirection = ownerAnimation.CurrentDirection;
            _currentState     = BoomerangState.Forward;
            Active            = true;
            _counter          = 0;
        }
Example #13
0
 private void CheckCollision()
 {
     BaseObject outBaseObject;
     var sprite = GetComponent<Sprite>();
     Animation outAnimation;
     if (_entities.CheckCollision(sprite.Rectangle, out outAnimation, out outBaseObject, Owner.GetOwnerId()))
     {
         var statusEffect = outBaseObject.GetComponent<StatusEffect>();
         if(statusEffect != null)
             statusEffect.AddStatusEffect(new StatusEffectFreeze(outBaseObject));
         _currentState = BoomerangState.Back;
         _counter = 0;
         _alreadyHitObject = true;
     }
 }
        public override void Update(GameTime gameTime)
        {
            var   transform = entity.GetComponent <Transform>();
            float delta     = (float)gameTime.ElapsedGameTime.TotalMilliseconds;


            if (state == BoomerangState.Firing)
            {
                speed -= Constants.BOOMERANG_ACCEL; // Gets slower and slower then goes into the negatives to go back to where it started
                switch (direction)
                {
                case Constants.Direction.UP:
                    transform.position.Y -= speed * delta;
                    break;

                case Constants.Direction.RIGHT:
                    transform.position.X += speed * delta;
                    break;

                case Constants.Direction.DOWN:
                    transform.position.Y += speed * delta;
                    break;

                case Constants.Direction.LEFT:
                    transform.position.X -= speed * delta;
                    break;

                default:
                    Console.WriteLine("BoomerangMovement @ Update: Invalid direction!");
                    break;
                }
                if (speed <= 0)
                {
                    state    = BoomerangState.Returning;
                    currentX = transform.position.X;
                    currentY = transform.position.Y;
                }
            }
            else if (state == BoomerangState.Returning)
            {
                var   goal  = thrower.GetComponent <Transform>().position;
                float goalX = goal.X;
                float goalY = goal.Y;


                float newX = lerp(currentX, goalX, t);
                float newY = lerp(currentY, goalY, t);

                transform.position.X = newX;
                transform.position.Y = newY;

                t           += returnSpeed;
                returnSpeed *= 1.01f;


                if (t > 1)
                {
                    state = BoomerangState.Dead;
                }
            }
            else if (state == BoomerangState.Dead)
            {
                entity.State = EntityStates.Disabled;
                Scene.Find("link").GetComponent <LinkInventory>().AddUseableItem((int)ItemInventory.UseInventory.BOOMERANG); // add boomerang back to use
                Entity.Destroy(entity);
            }
        }
Example #15
0
        private void MoveBack(Sprite sprite)
        {
            var ownerSprite = Owner.GetComponent<Sprite>();
            if(ownerSprite == null)
            {
                _currentState = BoomerangState.Stop;
                Active = false;
            }

            if(ManagerFunction.Distance(sprite.Position,ownerSprite.Position) < 2)
            {
                _currentState = BoomerangState.Stop;
                Active = false;
                return;
            }

            if(ownerSprite.Position.X < sprite.Position.X)
                sprite.Move(-1*_speed,0);
            if (ownerSprite.Position.X > sprite.Position.X)
                sprite.Move(_speed, 0);
            if (ownerSprite.Position.Y < sprite.Position.Y)
                sprite.Move(0, -1*_speed);
            if (ownerSprite.Position.Y > sprite.Position.Y)
                sprite.Move(0, _speed);
        }
Example #16
0
        private void MoveForward(Sprite sprite)
        {
            var x = 0f;
            var y = 0f;

            switch (_currentDirection)
            {
                case Direction.Up:
                    y = -1*_speed;
                    break;

                case Direction.Down:
                    y = _speed;
                    break;

                case Direction.Left:
                    x = -1*_speed;
                    break;

                case Direction.Right:
                    x = _speed;
                    break;
                default:
                    return;

            }

            if (_currentState == BoomerangState.Forward)
            {
                var collision = GetComponent<Collision>();
                if(collision != null && collision.CheckCollisionWithTiles(new Rectangle((int) (sprite.Position.X + x), (int) (sprite.Position.Y + y),sprite.Width,sprite.Height)))
                {
                    _currentState = BoomerangState.Back;
                    _counter = 0;
                }
                else
                {
                    sprite.Move(x,y);
                }
            }
        }
Example #17
0
        public override void Update(double gameTime)
        {
            base.Update(gameTime);

            var sprite = GetComponent<Sprite>();
            if (sprite == null)
            {
                _currentState = BoomerangState.Stop;
                return;
            }

            _counter += gameTime;

            CheckCollision();

            switch (_currentState)
            {
                    case BoomerangState.Forward:
                        MoveForward(sprite);
                        if(_counter > 300)
                            _currentState = BoomerangState.Back;
                    break;

                    case BoomerangState.Back:
                        MoveBack(sprite);
                    break;
            }
        }