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); } }
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; } }
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; } }
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>(); }
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; } } } }
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; }
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); } } }
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; } } }
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; }
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); } }
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); }
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); } } }
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; } }