Exemplo n.º 1
0
 //Mechanics//
 /// <summary>
 /// Starts blocking, and prevents other movements
 /// </summary>
 protected void startBlocking()
 {
     state        = Utilities.state.Blocking;
     rbd.velocity = new Vector2(0, 0);
     anim.Play("Block");
     anim.SetBool("holdAnimation", true);
 }
Exemplo n.º 2
0
 /// <summary>
 /// Full process of getting hit.
 /// </summary>
 /// <param name="hitDamage"></param>
 /// <param name="knockBack"></param>
 /// <param name="hit"></param>
 /// <returns></returns>
 public IEnumerator receiveHit(float hitDamage, float knockBack, Hitter hit)
 {
     hitEffect();
     rbd.gravityScale = gravityAmount;
     if (attackEffect)
     {
         Destroy(attackEffect);
     }
     state = Utilities.state.Hit;
     if (!(hit is Item))
     {
         if (hitlag != null)
         {
             StopCoroutine(hitlag);
         }
         yield return(hitlag = StartCoroutine(hitLag(hitDamage, true)));
     }
     if (hitstun != null)
     {
         StopCoroutine(hitstun);
     }
     hit.knockBackEntity(this, knockBack);
     hitstun = StartCoroutine(hitStun(knockBack));
     yield return(0);
 }
Exemplo n.º 3
0
 /// <summary>
 /// Makes the entity stop Attacking and changes state.
 /// </summary>
 public virtual void stopAttacking()
 {
     rbd.gravityScale = gravityAmount;
     anim.speed       = 1;
     chargeAmount     = 0;
     if (attackEffect)
     {
         Destroy(attackEffect);
     }
     if (attacks.currentAttack != Utilities.attackType.None)
     {
         attacks.attacks[(int)attacks.currentAttack].resetHittedEntities();
     }
     if (state == Utilities.state.Ultimate)
     {
         speciality.endUltimate();
     }
     attacks.currentAttack = Utilities.attackType.None;
     if (isGrounded)
     {
         state = Utilities.state.Idle;
     }
     else
     {
         state = Utilities.state.Air;
     }
 }
Exemplo n.º 4
0
 virtual protected void OnCollisionExit2D(Collision2D collider)
 {
     //Platform
     if (collider.gameObject.layer == 15 && state != Utilities.state.Attacking && state != Utilities.state.Throwing && state != Utilities.state.Ultimate)
     {
         isOnPlatform = false;
         if (state != Utilities.state.Hit)
         {
             state = Utilities.state.Air;
         }
     }
 }
Exemplo n.º 5
0
    /// <summary>
    /// Throws the grabbed item.
    /// </summary>
    /// <param name="dir">direction of throw</param>
    protected virtual void throwItem()
    {
        if (grabbedItem != null)
        {
            grabbedItem.transform.parent = null;
            grabbedItem.getRigidBody().isKinematic = false;
            grabbedItem.setIsPicked(false);
            grabbedItem.setIsUsed(true);
            grabbedItem.GetComponent <ThrowableItem>().onThrow();

            float throwForce;
            if (chargeAmount > 0)
            {
                throwForce   = grabbedItem.getVelocity() + (chargeAmount * maxThrowForce / 2);
                chargeAmount = 0;
            }
            else
            {
                throwForce = grabbedItem.getVelocity();
            }

            switch (throwDirection)
            {
            case Utilities.direction.Up: grabbedItem.getRigidBody().AddForce(new Vector2(0, throwForce), ForceMode2D.Impulse); break;

            case Utilities.direction.Down: grabbedItem.getRigidBody().AddForce(new Vector2(0, -throwForce), ForceMode2D.Impulse); break;

            case Utilities.direction.Left: grabbedItem.getRigidBody().AddForce(new Vector2(-throwForce, 0), ForceMode2D.Impulse); break;

            case Utilities.direction.Right: grabbedItem.getRigidBody().AddForce(new Vector2(throwForce, 0), ForceMode2D.Impulse); break;

            case Utilities.direction.UpLeft: grabbedItem.getRigidBody().AddForce(new Vector2(-throwForce, throwForce), ForceMode2D.Impulse); break;

            case Utilities.direction.UpRight: grabbedItem.getRigidBody().AddForce(new Vector2(throwForce, throwForce), ForceMode2D.Impulse); break;

            case Utilities.direction.DownLeft: grabbedItem.getRigidBody().AddForce(new Vector2(-throwForce, -throwForce), ForceMode2D.Impulse); break;

            case Utilities.direction.DownRight: grabbedItem.getRigidBody().AddForce(new Vector2(throwForce, -throwForce), ForceMode2D.Impulse); break;
            }
            grabbedItem.GetComponent <ThrowableItem>().setDirection(throwDirection);
            grabbedItem = null;
            hasItem     = false;
        }
        if (isGrounded)
        {
            state = Utilities.state.Idle;
        }
        else
        {
            state = Utilities.state.Air;
        }
    }
Exemplo n.º 6
0
    /// <summary>
    /// Checks the item type, and does action according to it.
    /// </summary>
    /// <param name="dir"></param>
    protected virtual void useItem()
    {
        if (isGrounded)
        {
            rbd.velocity = new Vector2(0, 0);
        }

        if (grabbedItem is ThrowableItem)
        {
            state = Utilities.state.Throwing;
            anim.Play("Throw");
            anim.SetBool("holdAnimation", true);
        }
        if (grabbedItem is OnUseItem)
        {
            grabbedItem.setIsUsed(true);
            grabbedItem.setIsPicked(false);
            grabbedItem.itemAction(this);
        }
    }
Exemplo n.º 7
0
    //Coroutines
    /// <summary>
    /// Stuns Entity for duration of knockback.
    /// </summary>
    /// <param name="knockBack"></param>
    /// <returns></returns>
    virtual public IEnumerator hitStun(float knockBack)
    {
        if (attackEffect)
        {
            Destroy(attackEffect);
        }
        int frames             = Mathf.FloorToInt(knockBack * 1.2f);
        int passedFrames       = 0;
        int passedeffectFrames = 0;

        while (frames != passedFrames)
        {
            if (passedeffectFrames > 5)
            {
                if (!isGrounded && rbd.velocity.magnitude > 25)
                {
                    Instantiate(effects[3], groundChecker.position, Quaternion.identity);
                    passedeffectFrames = 0;
                }
            }
            yield return(0);

            passedFrames++;
            passedeffectFrames++;
        }

        if (isGrounded)
        {
            anim.Play("Ground_Movement");
            state = Utilities.state.Idle;
        }
        else
        {
            anim.Play("Falling");
            state = Utilities.state.Air;
        }
    }
Exemplo n.º 8
0
    //Start//
    /// <summary>
    /// gives value to the different components.
    /// </summary>
    protected virtual void initializeComponents()
    {
        audioSource         = GetComponent <AudioSource>();
        rbd                 = GetComponent <Rigidbody2D>();
        anim                = GetComponent <Animator>();
        boxCollider         = GetComponent <BoxCollider2D>();
        hurtBox             = transform.GetChild(2).GetComponent <BoxCollider2D>();
        hitbox              = transform.GetChild(3).GetComponent <BoxCollider2D>();
        statusSpot          = transform.GetChild(5).transform;
        sprite              = GetComponent <SpriteRenderer>();
        gravityAmount       = rbd.gravityScale;
        totalJumps          = maxJumps;
        hasItem             = false;
        charging            = false;
        maxThrowForce       = 10f;
        isOnPlatform        = false;
        isIgnoringPlatforms = false;
        state               = Utilities.state.Idle;
        hittedBy            = -1;
        cam                 = Camera.main;

        groundChecker = transform.GetChild(0).transform;
        pickUpSpot    = transform.GetChild(1).transform;
    }
Exemplo n.º 9
0
 /// <summary>
 /// Stops blocking, allowing other movements
 /// </summary>
 protected void stopBlocking()
 {
     state = Utilities.state.Idle;
     anim.SetBool("holdAnimation", false);
 }
Exemplo n.º 10
0
 /////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////Collisions///////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////
 //Collision//
 /// <summary>
 /// Check different possible collision with the Character body.
 /// </summary>
 /// <param name="collider">the external collider</param>
 virtual protected void OnCollisionEnter2D(Collision2D collider)
 {
     // Touch floor.
     if (collider.gameObject.layer == 8)
     {
         if (collider.transform.position.y < transform.position.y && state != Utilities.state.Ultimate)
         {
             if (rbd.velocity.y <= 0)
             {
                 totalJumps = maxJumps;
             }
             if (state == Utilities.state.Hit)
             {
                 rbd.velocity = new Vector2(rbd.velocity.x, -lastVelocityY * 0.85f);
             }
             if (state == Utilities.state.Throwing)
             {
                 rbd.velocity = new Vector2(0, 0);
             }
             if (state == Utilities.state.Air)
             {
                 if (rbd.velocity.x != 0)
                 {
                     state = Utilities.state.Moving;
                 }
                 else
                 {
                     state = Utilities.state.Idle;
                 }
             }
         }
     }
     //Platform
     if (collider.gameObject.layer == 15)
     {
         if (rbd.velocity.y <= 0 && state != Utilities.state.Ultimate)
         {
             isOnPlatform = true;
             totalJumps   = maxJumps;
             if (state == Utilities.state.Hit)
             {
                 rbd.velocity = new Vector2(rbd.velocity.x, -lastVelocityY * 0.85f);
             }
             if (state == Utilities.state.Throwing)
             {
                 rbd.velocity = new Vector2(0, 0);
             }
             if (state == Utilities.state.Air)
             {
                 if (rbd.velocity.x != 0)
                 {
                     state = Utilities.state.Moving;
                 }
                 else
                 {
                     state = Utilities.state.Idle;
                 }
             }
         }
     }
 }