private Vector2 GenerateRelictVelocity()
    {
        Vector2 normal   = Vector2Helpers.DegreeToVector2(RandomHelpers.Range(relicAngle));
        float   velocity = TileHelpers.TileToWorld(RandomHelpers.Range(relicTileVelocity));

        return(normal * velocity);
    }
Exemple #2
0
    private void AttackPlayer(PlayerUnitController player)
    {
        PlayerVulnerability vulnerability = player.di.vulnerability;
        Vector2             lookVector    = new Vector2(physics.flip.Direction.ToFloat(), 1);

        if (vulnerability.IsGuardingInOpposingDirection(physics.flip.Direction))
        {
            float recoilTileForce;
            if (IsFullAssembly(player))
            {
                stateMachine.attack.StartStagger();
                recoilTileForce = data.guardFullAssemblyRecoilTileForce;
                // TODO: short stagger?
            }
            else
            {
                recoilTileForce = data.guardPartialAssemblyRecoilTileForce;
                Vector2 playerRecoil = RecoilHelpers.GetRecoilFromTo(player.transform, controller.transform, recoilTileForce);
                player.di.stateMachine.SetRecoilState(playerRecoil);
            }
        }
        else if (vulnerability.IsVulnerable())
        {
            PlayerDamageModule damage          = player.di.damage;
            Vector2            collisionRecoil = RecoilHelpers.GetRecoilNormalFromTo(player.transform, controller.transform);
            if (IsFullAssembly(player))
            {
                damage.TakeDamage(data.attackDamage, TileHelpers.TileToWorld(data.attackFullAssemblyRecoilTileForce) * collisionRecoil);
            }
            else
            {
                damage.TakeDamage(data.attackDamage, TileHelpers.TileToWorld(data.attackPartialAssemblyRecoilTileForce) * collisionRecoil);
            }
        }
    }
Exemple #3
0
 private void CheckForSpriteRotation()
 {
     if (rotationFrames > 0 && rotationFramesLeft == 0)
     {
         Vector2 deltaMoveCheckForRotation = TileHelpers.TileToWorld(edgeMoveTileSpeed) * rotation.GetFrontVector() * Time.deltaTime * 0.5f * rotationFrames;
         if (raycaster.HasNoColliderBelow(deltaMoveCheckForRotation))
         {
             rotationFramesLeft = rotationFrames;
             float t = 1 - (float)rotationFramesLeft / rotationFrames;
             spriteRenderer.transform.localRotation = Quaternion.Lerp(noRotation, counterClockwise90Rotation, t);
         }
     }
 }
Exemple #4
0
    private void OnTriggerStay2D(Collider2D collision)
    {
        PlayerUnitController unit = InteractiveHelpers.GetPlayer(collision);

        if (!unit)
        {
            return;
        }
        if (unit.di.vulnerability.IsVulnerable())
        {
            float   randomSign      = Random.Range(0, 2) == 1 ? 1 : -1;
            Vector2 randomPushForce = TileHelpers.TileToWorld(new Vector2(randomSign * pushTileForce.x, pushTileForce.y));
            unit.di.damage.TakeFullDamage(randomPushForce);
        }
    }
    public void TileOnMoveInto(PhysicsMove move)
    {
        // TODO: use PlayerCollider or move.movement.controller
        PlayerUnitController unit = move.hit.rigidbody.GetComponent <PlayerUnitController>();

        if (!unit)
        {
            return;
        }

        if (unit.di.vulnerability.IsVulnerable())
        {
            float   randomSign      = RandomHelpers.OneOrMinusOne();
            Vector2 randomPushForce = TileHelpers.TileToWorld(new Vector2(randomSign * pushTileForce.x, pushTileForce.y));
            unit.di.damage.TakeFullDamage(randomPushForce);
        }
    }
Exemple #6
0
    public void UpdateState()
    {
        selectUnit.WallSlideUpdate();
        if (stateMachine.ChangedState)
        {
            return;
        }
        if (physics.IsGrounded)
        {
            stateMachine.SetControlState();
            return;
        }
        float wallSlideYVelocity = TileHelpers.TileToWorld(wallSlideYTileVelocity);

        if (physics.velocity.Y < -wallSlideYVelocity)
        {
            physics.velocity.Y = -wallSlideYVelocity;
        }
        wallSlide.WallSlideUpdate();
        jump.WallSlideUpdate();
        physics.WalSlideUpdate();
    }
Exemple #7
0
    private void MoveForwardUpdate()
    {
        float   forwardTileSpeed = rotationFramesLeft == 0 ? moveTileSpeed : edgeMoveTileSpeed;
        Vector2 forwardDeltaMove = TileHelpers.TileToWorld(forwardTileSpeed) * rotation.GetFrontVector() * Time.deltaTime;
        Vector2 moveAmount       = movement.TryToMove(forwardDeltaMove);

        if (raycaster.HasWallInFront())
        {
            ReverseSnail();
        }
        else if (raycaster.HasNoColliderBelow())
        {
            if (goAround)
            {
                RotateSnail90();
            }
            else
            {
                ReverseSnail();
            }
        }
    }
Exemple #8
0
    void FixedUpdate()
    {
        Vector2 moveAmount = transform.right * TileHelpers.TileToWorld(tileMoveAmount) * Time.deltaTime;

        rigidbody.position = rigidbody.position + moveAmount;
    }
Exemple #9
0
 internal void WalkInDirection(Direction2H direction)
 {
     flip.Direction = direction;
     physics.MoveUpdate(direction.ToVector2() * TileHelpers.TileToWorld(walkTileVelocity));
 }
Exemple #10
0
 public void RunInDirection(Direction2H direction)
 {
     flip.Direction = direction;
     physics.MoveUpdate(direction.ToVector2() * TileHelpers.TileToWorld(runTileVelocity));
 }