public InteractableBase FindUsableInteractable()
    {
        Collider2D[]     closeColliders            = GetCloseColliders();
        InteractableBase closestInteractable       = null;
        float            angleToClosestInteractble = Mathf.Infinity;

        for (int i = 0; i < closeColliders.Length; ++i)
        {
            InteractableBase colliderInteractable = closeColliders[i].GetComponent <InteractableBase>();

            if (colliderInteractable == null)
            {
                continue;
            }

            Vector3 directionToInteractble = closeColliders[i].transform.position - transform.position;

            float angleToInteractable = Vector3.Angle(m_MovementModel.GetFacingDirection(), directionToInteractble);

            if (angleToInteractable < 40)
            {
                if (angleToInteractable < angleToClosestInteractble)
                {
                    closestInteractable       = colliderInteractable;
                    angleToClosestInteractble = angleToInteractable;
                }
            }
        }

        return(closestInteractable);
    }
    //public void DoRangeProjectile()
    //{
    //    playerStats.DeductProjectiletNumber();

    //    Vector2 facingDirection = m_movementModel.GetFacingDirection();

    //    GameObject cloneObject = null;

    //    cloneObject = Instantiate(projectileObject);

    //    cloneObject.transform.position = gameObject.transform.parent.position;

    //    if (facingDirection == new Vector2(0, 1))
    //    {
    //        cloneObject.transform.position = new Vector2(transform.position.x, transform.position.y + 0.25f);
    //        cloneObject.transform.position = new Vector2(transform.position.x + 0.25f, transform.position.y + 0.25f);
    //        cloneObject.transform.position = new Vector2(transform.position.x - 0.25f, transform.position.y + 0.25f);
    //    }

    //    else if (facingDirection == new Vector2(0, -1))
    //        cloneObject.transform.position = new Vector2(transform.position.x, transform.position.y - 0.25f);
    //    else if (facingDirection == new Vector2(1, 0))
    //        cloneObject.transform.position = new Vector2(transform.position.x + 0.25f, transform.position.y);
    //    else
    //        cloneObject.transform.position = new Vector2(transform.position.x - 0.25f, transform.position.y);

    //    Projectile projectile = cloneObject.GetComponent<Projectile>();

    //    projectile.SetDirectionTowardsPlayerFacing();
    //    cloneObject.SetActive(true);
    //}

    public void DoPorjectile()
    {
        playerStats.DeductProjectiletNumber();

        projectileFacingDirection = m_movementModel.GetFacingDirection();

        cloneObject = Instantiate(projectileObject);

        if (projectileFacingDirection == new Vector2(0, 1))
        {
            cloneObject.transform.position = new Vector2(transform.position.x, transform.position.y + 0.25f);
        }
        else if (projectileFacingDirection == new Vector2(0, -1))
        {
            cloneObject.transform.position = new Vector2(transform.position.x, transform.position.y - 0.25f);
        }
        else if (projectileFacingDirection == new Vector2(1, 0))
        {
            cloneObject.transform.position = new Vector2(transform.position.x + 0.25f, transform.position.y);
        }
        else
        {
            cloneObject.transform.position = new Vector2(transform.position.x - 0.25f, transform.position.y);
        }

        Projectile projectile = cloneObject.GetComponent <Projectile>();

        projectile.SetDirectionTowardsPlayerFacing();
        cloneObject.SetActive(true);
    }
Exemplo n.º 3
0
    //Find the closest object that which we may push (similar to closest interactable)
    private Pushable FindClosestPushable()
    {
        Collider2D[] closeColliders = m_InteractionModel.GetCloseColliders();

        Pushable closestPushable        = null;
        float    angleToClosestPushable = Mathf.Infinity;

        for (int i = 0; i < closeColliders.Length; ++i)
        {
            Pushable colliderPushable = closeColliders[i].GetComponent <Pushable>();

            if (colliderPushable == null)
            {
                continue;
            }

            Vector3 directionToPushable = closeColliders[i].transform.position - transform.position;

            float angleToPushable = Vector3.Angle(m_MovementModel.GetFacingDirection(), directionToPushable);

            Debug.Log(i + ": " + angleToPushable);
            if (angleToPushable < 40)
            {
                if (angleToPushable < angleToClosestPushable)
                {
                    closestPushable        = colliderPushable;
                    angleToClosestPushable = angleToPushable;
                }
            }
        }

        return(closestPushable);
    }
Exemplo n.º 4
0
    private void Update()
    {
        m_movementModel = PlayerInstant.Instance.GetComponent <CharacterMovementModel>();
        Vector2 facingDirection = m_movementModel.GetFacingDirection();

        if (facingDirection.x == 1)
        {
            m_collider2D.offset = new Vector2(0.4f, 0f);
        }

        else if (facingDirection.x == -1)
        {
            m_collider2D.offset = new Vector2(-0.4f, 0f);
        }

        else if (facingDirection.y == -1)
        {
            m_collider2D.offset = new Vector2(0f, -0.4f);
        }

        else if (facingDirection.y == 1)
        {
            m_collider2D.offset = new Vector2(0f, 0.4f);
        }
    }
    public override void OnSpawn()
    {
        foreach (ProjectilePrefab projectile in ProjectilePrefabs)
        {
            /*
             * Okay so to get the component from an object in the list, I need to take it from the name I assign it in the foreach loop
             */
            Vector3 startingPosition = transform.position + projectile.SpawnPosition; //The position where the projectile spawns
            Vector3 facingDirection  = m_MovementModel.GetFacingDirection();
            projectile.TargetDirection = facingDirection;
            if (facingDirection.x == 0 && facingDirection.y == -1)
            {
                startingPosition = new Vector3(startingPosition.x, startingPosition.y - 1);
            }
            else if (facingDirection.x == 0 && facingDirection.y == 1)
            {
                startingPosition = new Vector3(startingPosition.x, startingPosition.y + 1);
            }
            else if (facingDirection.x == 1 && facingDirection.y == 0)
            {
                startingPosition = new Vector3(startingPosition.x + 1, startingPosition.y);
            }
            else if (facingDirection.x == -1 && facingDirection.y == 0)
            {
                startingPosition = new Vector3(startingPosition.x - 1, startingPosition.y);
            }

            projectile.Prefab.GetComponent <ProjectileMovement>().startingPosition = startingPosition;
            projectile.Prefab.GetComponent <ProjectileMovement>().targetDirection  = projectile.TargetDirection;
            projectile.Prefab.GetComponent <ProjectileMovement>().Speed            = projectile.Speed;

            GameObject prefabInstance = Instantiate(projectile.Prefab, startingPosition, Quaternion.identity); //First we make the projectile appear
            prefabInstance.GetComponent <ProjectileMovement>().OnSpawn();
        }
    }
Exemplo n.º 6
0
    InteractableBase FindUsableInteractable()
    {
        var              closeColliders             = Physics2D.OverlapCircleAll(transform.position, 1f);
        float            angleToClosestInteractable = Mathf.Infinity;
        InteractableBase closestInteractable        = null;

        foreach (var collider in closeColliders)
        {
            InteractableBase interactable = collider.GetComponent <InteractableBase>();
            if (interactable == null)
            {
                continue;
            }

            Vector3 directionToInteractable = collider.transform.position - transform.position;
            var     angleToInteractable     = Vector3.Angle(_movementModel.GetFacingDirection(), directionToInteractable);
            if (angleToInteractable < 40)
            {
                if (angleToInteractable < angleToClosestInteractable)
                {
                    angleToClosestInteractable = angleToInteractable;
                    closestInteractable        = interactable;
                }
            }
        }
        return(closestInteractable);
    }
Exemplo n.º 7
0
    //This method is used to find the closest interactable to the player
    public InteractableBase FindUsableInteractable()
    {
        Collider2D[] closeColliders = GetCloseColliders();                                               //Gets an array of the closest interactable to the player

        InteractableBase closestInteractable       = null;                                               //Which is closest found one
        float            angleToClosestInteractble = Mathf.Infinity;                                     //Facing the interactable

        for (int i = 0; i < closeColliders.Length; ++i)                                                  //Loop through our interactables
        {
            InteractableBase colliderInteractable = closeColliders[i].GetComponent <InteractableBase>(); //Get the parent component of the collider

            if (colliderInteractable == null)
            {
                continue;
            }

            Vector3 directionToInteractble = closeColliders[i].transform.position - transform.position; //The vector between us and the interactable

            float angleToInteractable = Vector3.Angle(m_MovementModel.GetFacingDirection(), directionToInteractble);

            if (angleToInteractable < 40) //if deg is less than fourty, then we are facing it enough
            {
                if (angleToInteractable < angleToClosestInteractble)
                {
                    closestInteractable       = colliderInteractable;
                    angleToClosestInteractble = angleToInteractable;
                }
            }
        }

        return(closestInteractable);
    }
Exemplo n.º 8
0
    private void CreateInstantiatePikcup()
    {
        GameObject tempDecoy = Instantiate(tempInstantiateObject);

        tempDecoy.SetActive(true);

        CharacterMovementModel m_movementModel = playerInstance.GetComponent <CharacterMovementModel>();
        Vector2 facingDirection = m_movementModel.GetFacingDirection();

        if (facingDirection.x == 1)
        {
            tempDecoy.transform.position = new Vector3
                                               (playerInstance.transform.position.x + 0.5f, playerInstance.transform.position.y, 0);
        }
        else if (facingDirection.x == -1)
        {
            tempDecoy.transform.position = new Vector3
                                               (playerInstance.transform.position.x - 0.5f, playerInstance.transform.position.y, 0);
        }
        else if (facingDirection.y == 1)
        {
            tempDecoy.transform.position = new Vector3
                                               (playerInstance.transform.position.x, playerInstance.transform.position.y + 0.5f, 0);
        }
        else
        {
            tempDecoy.transform.position = new Vector3
                                               (playerInstance.transform.position.x, playerInstance.transform.position.y - 0.5f, 0);
        }
    }
    InteractableBase FindUsableInteractable()
    {
        Collider2D[]     closeColliders             = Physics2D.OverlapCircleAll(transform.position, 0.8f);
        InteractableBase clostestInteractable       = null;
        float            angleToclosestInteractable = Mathf.Infinity;

        for (int i = 0; i < closeColliders.Length; i++)
        {
            InteractableBase colliderInteractable = closeColliders[i].GetComponent <InteractableBase>();
            if (colliderInteractable == null)
            {
                continue;
            }
            Vector3 directionToInteractable = closeColliders[i].transform.position - transform.position;


            float angleToInteractable = Vector3.Angle(m_MovementModel.GetFacingDirection(), directionToInteractable);
            if (angleToInteractable < 45)
            {
                if (angleToInteractable < angleToclosestInteractable)
                {
                    clostestInteractable = colliderInteractable;
                }
            }
        }
        return(clostestInteractable);
    }
Exemplo n.º 10
0
    protected virtual void OnTriggerEnter2D(Collider2D collider2D)
    {
        if (aiBase != null && aiBase.GetEnemyAction() == enumEnemyActions.defend)
        {
            return;
        }

        if (collider2D.tag == "Punch" && m_movementModel.GetPushBackSpeed() == 0f)
        {
            if (GetComponentInChildren <Attackable>() == null)
            {
                Debug.Log(transform.parent.name);
            }

            int damage = playerStats.GetComponentInChildren <Attackable>().GetDamage();

            attackerMovementModel = collider2D.GetComponentInParent <CharacterMovementModel>();

            DoHit(damage, attackerMovementModel.GetFacingDirection());
        }

        if (collider2D.tag == "PlayerProjectile" && m_movementModel.GetPushBackSpeed() == 0f)
        {
            if (health <= 0)
            {
                return;
            }

            Destroy(collider2D.gameObject);

            DoHit(1, collider2D.GetComponent <Projectile>().GetMovementDirection());
        }

        if (collider2D.tag == "PlayerHazard" && m_movementModel.GetPushBackSpeed() == 0f)
        {
            if (health <= 0)
            {
                return;
            }

            Vector2 movementDirection = transform.parent.GetComponent <CharacterMovementModel>().GetReverseFacingDirection();
            Debug.Log(movementDirection);
            DoHit(1, movementDirection);
        }

        if (collider2D.tag == "PlayerBombRing" && m_movementModel.GetPushBackSpeed() == 0f)
        {
            if (health <= 0)
            {
                return;
            }

            Vector2 hitDirection = collider2D.GetComponentInParent <PlayerBomb>().GetHitDirection(transform);

            DoHit(1, hitDirection);
        }
    }
Exemplo n.º 11
0
    private void UpdateDirection()
    {
        Vector2 direction = m_MovementModel.GetFacingDirection();

        if (direction != Vector2.zero)
        {
            if (direction.x != 1 || direction.y != 1)
            {
                animator.SetFloat("DirX", direction.x);
                animator.SetFloat("DirY", direction.y);
            }
        }

        animator.SetBool("IsMoving", m_MovementModel.IsMoving());
    }
Exemplo n.º 12
0
    protected void UpdateDirection()
    {
        Vector3 direction = m_MovementModel.GetFacingDirection();

        if (direction != Vector3.zero)
        {
            if (direction.x != 1 || direction.y != 1)
            {
                Animator.SetFloat("DirectionX", direction.x);
                Animator.SetFloat("DirectionY", direction.y);
            }
        }

        Animator.SetBool("IsMoving", m_MovementModel.IsMoving());
    }
Exemplo n.º 13
0
    //Update our direction
    private void UpdateDirection()
    {
        Vector3 direction = m_MovementModel.GetFacingDirection(); //Where we are facing

        if (direction != Vector3.zero)
        {
            if (direction.x != 1 || direction.y != 1)
            {
                Animator.SetFloat("DirectionX", direction.x);
                Animator.SetFloat("DirectionY", direction.y);
            }
        }

        Animator.SetBool("IsMoving", m_MovementModel.IsMoving()); //Set that we are moving
    }
    virtual public void UpdateDirection()
    {
        Vector3 direction = m_MovementModel.GetFacingDirection();

        if (direction != Vector3.zero)
        {
            if (direction.x != 1 || direction.y != 1)
            {
                Animator.SetFloat("DirectionX", direction.x);
                Animator.SetFloat("DirectionY", direction.y);
            }
        }
        if (m_MovementModel.m_IsRunning == false)
        {
            Animator.SetBool("IsMoving", m_MovementModel.IsMoving());
        }
    }
Exemplo n.º 15
0
    protected IEnumerator DoProjectile()
    {
        float waitBeforeShoot = 3;
        float waitForAni      = 1;

        yield return(new WaitForSeconds(waitBeforeShoot - waitForAni));

        m_Animator.SetBool("Shoot", true);

        yield return(new WaitForSeconds(waitForAni));

        m_Animator.SetBool("Shoot", false);

        Vector2 facingDirection = m_movementModel.GetFacingDirection();

        GameObject cloneObject = Instantiate(projectileObject);

        cloneObject.transform.position = gameObject.transform.parent.position;

        if (facingDirection == new Vector2(0, 1))
        {
            cloneObject.transform.position =
                new Vector2(transform.position.x, transform.position.y + 0.25f);
        }
        else if (facingDirection == new Vector2(0, -1))
        {
            cloneObject.transform.position =
                new Vector2(transform.position.x, transform.position.y - 0.25f);
        }
        else if (facingDirection == new Vector2(1, 0))
        {
            cloneObject.transform.position =
                new Vector2(transform.position.x + 0.25f, transform.position.y);
        }
        else
        {
            cloneObject.transform.position =
                new Vector2(transform.position.x - 0.25f, transform.position.y);
        }

        cloneObject.SetActive(true);
        cloneObject.GetComponent <Projectile>().SetDirectionTowardsPlayer();
        yield return(new WaitForSeconds(3));

        StartCoroutine(DoProjectile());
    }
Exemplo n.º 16
0
    override protected void OnTriggerEnter2D(Collider2D collider2D)
    {
        if (m_movementModel.IsInPushBack())
        {
            return;
        }

        if (collider2D.tag == "EnemyProjectile" && m_movementModel.GetPushBackSpeed() == 0f)
        {
            DoDoHit(1, collider2D.GetComponent <Projectile>().GetHitDirection());

            collider2D.GetComponent <Projectile>().DestroyOnHit();
        }

        if (collider2D.tag == "Enemy" && m_movementModel.GetPushBackSpeed() == 0f)
        {
            Attackable attackerAttackable = collider2D.transform.parent.gameObject.
                                            GetComponentInChildren <Attackable>();

            if (attackerAttackable != null)
            {
                if (attackerAttackable.GetHealth() <= 0)
                {
                    return;
                }
            }

            CharacterMovementModel attackerMovementModel = collider2D.GetComponentInParent <CharacterMovementModel>();

            attackerMovementModel.SetTemporaryFrozen(1);
            DoDoHit(1, attackerMovementModel.GetFacingDirection());
        }

        if (collider2D.tag == "Hazard" && m_movementModel.GetPushBackSpeed() == 0f)
        {
            DoDoHit(1, GetComponentInParent <CharacterMovementModel>().GetReverseFacingDirection());
        }

        if (collider2D.tag == "BombRing" && m_movementModel.GetPushBackSpeed() == 0f)
        {
            DoBombHit(collider2D, collider2D.gameObject.GetComponentInParent <BombExplosion>().GetDamage());
        }
    }
Exemplo n.º 17
0
    private void OnTriggerStay2D(Collider2D collider)
    {
        if (warping)
        {
            return;
        }

        if (collider.gameObject.tag == "Player")
        {
            colliderMovementModel = collider.GetComponentInParent <CharacterMovementModel>();
            Vector2 facingDirection = colliderMovementModel.GetFacingDirection();

            if (facingDirection == new Vector2(0, 1))
            {
                warping            = true;
                spriteDoor.enabled = true;
                StartCoroutine(Warp());
            }
        }
    }
    InteractableBase FindUsableInteracable()
    {
        //Debug.Log("List of Interactables: ");

        Collider2D[]     closeColliders            = Physics2D.OverlapCircleAll(transform.position, 0.8f);
        InteractableBase closestInteractable       = null;
        float            angleToClosestInteractble = Mathf.Infinity;

        for (int i = 0; i < closeColliders.Length; ++i)
        {
            //Debug.Log(i + ": " + closeColliders[i].name);

            InteractableBase colliderInteractable = closeColliders[i].GetComponent <InteractableBase>();
            if (colliderInteractable == null)
            {
                continue;
            }

            Vector3 directionToInteractble = closeColliders[i].transform.position - transform.position;
            float   angleToInteractable    = Vector3.Angle(m_MovementModel.GetFacingDirection(), directionToInteractble);

            //Debug.Log(i + ": " + closeColliders[i].name + " - " + angleToInteractable);
            //Debug.Log(m_MovementModel.GetDirection() + " - " + directionToInteractble);

            if (angleToInteractable < 40)
            {
                if (angleToInteractable < angleToClosestInteractble)
                {
                    closestInteractable       = colliderInteractable;
                    angleToClosestInteractble = angleToInteractable;
                }
            }
        }

        return(closestInteractable);
    }
Exemplo n.º 19
0
 protected void DoPushBack(Vector2 hitDirection)
 {
     m_movementModel.DoPushBack(attackerMovementModel.GetFacingDirection(), pushBackTime, pushBackSpeed);
 }