Beispiel #1
0
    // ====================================================
    private IEnumerator SwapCoroutine(SwappableEntity swappableEntity)
    {
        SoundManager.instance.PlaySound(SoundManager.SoundType.Swap);

        Vector2 previousPos   = transform.position;
        Vector2 previousSpeed = currentSpeed;

        transform.position = VectorUtils.GetPosition3D(swappableEntity.GetPosition());

        bool wasSwappableEntityGrounded = swappableEntity.physicsController.isGrounded;

        swappableEntity.SetPosition(previousPos);
        swappableEntity.SetVelocity(previousSpeed);

        PatrollingEnemy patroller = swappableEntity as PatrollingEnemy;

        if (patroller != null)
        {
            patroller.SetDirectionAsForward();
        }
        swappableEntity.OnSwap();

        isSwapping = true;

        deathVfxAnimator.SetTrigger("deathTrigger");
        animator.gameObject.SetActive(false);
        yield return(new WaitForSeconds(0.2f));

        isSwapping = false;
        animator.gameObject.SetActive(true);
        currentSpeed = previousSpeed;

        Vector2 direction = joystickController.GetDirection();

        if (direction.x > 0.4f)
        {
            currentSpeed.x = maxHorizontalSpeed;
        }
        else if (direction.x < -0.4f)
        {
            currentSpeed.x = -maxHorizontalSpeed;
        }
        else
        {
            currentSpeed.x = 0f;
        }

        if (wasSwappableEntityGrounded)
        {
            currentSpeed.y = 0f;
        }
        else
        {
            currentSpeed.y = currentSpeed.y < 0f ? 0f : currentSpeed.y;
        }
        canDoubleJumped = true;

        prevPos = VectorUtils.GetPosition2D(transform.position);
    }
 public void KeepPatrolling()
 {
     if (gameOverEnemy != null)
     {
         PatrollingEnemy patrolEnemy = gameOverEnemy.GetComponent <PatrollingEnemy>();
         patrolEnemy.BackToPatrolling();
         gameOverEnemy = null;
     }
 }
Beispiel #3
0
    public override bool check(Controller c)
    {
        PatrollingEnemy p = State.cast <PatrollingEnemy> (c);

        PatrolNode n        = p.getPatrolTarget();
        float      dist     = Vector2.Distance(c.transform.position, n.transform.position);
        float      moveDist = c.getSelf().getMovespeed() * Time.deltaTime;

        return(dist < moveDist);
    }
Beispiel #4
0
    public override void perform(Controller c)
    {
        PatrollingEnemy pe = State.cast <PatrollingEnemy> (c);

        //move to origin
        if (Vector3.Distance(pe.transform.position, pe.getOrigin()) > originDistTolerance)
        {
            Vector3 navPos;
            if (c.getMap() != null)
            {
//				if (Vector2.Distance (pe.transform.position, pe.getOrigin ()) < pe.getMap ().cellDimension)
//					navPos = pe.getOrigin ();
                if (!c.currentPosition(out navPos))
                {
                    c.setPath(pe.getOrigin());

                    //throw out the first node in the path
                    Vector3 trash;
                    c.nextPosition(out trash);
                }
            }
            else
            {
                navPos = pe.getOrigin();
            }

            //turn to face move direction; wait until turning is done
            pe.facePoint(navPos, pe.getTurnSpeed() * Time.deltaTime);
            if (Vector3.Angle(pe.transform.position - navPos, -pe.transform.up) < turnTolerance)
            {
                float dist     = Vector2.Distance(c.transform.position, navPos);
                float moveDist = c.getSelf().getMovespeed() * Time.deltaTime;
                if (moveDist > dist)
                {
                    moveDist = dist;
                }

                //move
                c.transform.Translate(
                    (navPos - c.transform.position).normalized *
                    moveDist, Space.World);
            }
        }
        //reorienting idle behavior
        else
        {
            if (Quaternion.Angle(pe.transform.rotation, pe.getStartRotation()) > turnTolerance)
            {
                pe.facePoint(pe.getStartRotation() * Vector2.up, pe.getTurnSpeed());
            }
        }
    }
Beispiel #5
0
 private Tile LoadFlameTile(int x, int y, char enemyType)
 {
     GameObjectList enemies = this.Find("enemies") as GameObjectList;
     TileField tiles = this.Find("tiles") as TileField;
     GameObject enemy = null;
     switch (enemyType)
     {
         case 'A': enemy = new UnpredictableEnemy(); break;
         case 'B': enemy = new PlayerFollowingEnemy(); break;
         case 'C':
         default:         enemy = new PatrollingEnemy(); break;
     }
     enemy.Position = new Vector2(((float)x + 0.5f) * tiles.CellWidth, (y + 1) * tiles.CellHeight);
     enemies.Add(enemy);
     return new Tile();
 }
Beispiel #6
0
    //======================================================
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (player == null || player.isDead)
        {
            return;
        }
        SwappableEntityHitboxReference swappableEntityReference = other.GetComponent <SwappableEntityHitboxReference>();

        if (swappableEntityReference != null && swappableEntityReference.swappableEntity != null)
        {
            PatrollingEnemy patrollingEnemy = swappableEntityReference.swappableEntity as PatrollingEnemy;
            if (patrollingEnemy != null)
            {
                player.InstaDeath();
            }
        }
    }
Beispiel #7
0
    // ====================================================
    void Squash(PhysicsController other)
    {
        PlayerController player = other.GetComponent <PlayerController>();

        if (player != null)
        {
            player.InstaDeath();
            return;
        }
        PatrollingEnemy patroller = other.GetComponent <PatrollingEnemy>();

        if (patroller != null)
        {
            patroller.InstaDeath();
            return;
        }
        Destroy(other.gameObject);
    }
Beispiel #8
0
    private Tile LoadFlameTile(int x, int y, char enemyType)
    {
        GameObjectList enemies = this.Find("enemies") as GameObjectList;
        TileField      tiles   = this.Find("tiles") as TileField;
        GameObject     enemy   = null;

        switch (enemyType)
        {
        case 'A': enemy = new UnpredictableEnemy(); break;

        case 'B': enemy = new PlayerFollowingEnemy(); break;

        case 'C':
        default:         enemy = new PatrollingEnemy(); break;
        }
        enemy.Position = new Vector2(((float)x + 0.5f) * tiles.CellWidth, (y + 1) * tiles.CellHeight);
        enemies.Add(enemy);
        return(new Tile());
    }
Beispiel #9
0
    //======================================================
    void OnTriggerEnter2D(Collider2D other)
    {
        PlayerHitboxReference playerReference = other.GetComponent <PlayerHitboxReference>();

        if (playerReference != null && playerReference.player != null)
        {
            playerReference.player.InstaDeath();
        }

        SwappableEntityHitboxReference swappableEntityReference = other.GetComponent <SwappableEntityHitboxReference>();

        if (swappableEntityReference != null && swappableEntityReference.swappableEntity != null)
        {
            PatrollingEnemy patrollingEnemy = swappableEntityReference.swappableEntity as PatrollingEnemy;
            if (patrollingEnemy != null)
            {
                patrollingEnemy.InstaDeath();
            }
        }
    }
Beispiel #10
0
    void LoadFlameEnemy(int x, int y, char symbol)
    {
        Vector2 pos = GetCellBottomCenter(x, y);

        PatrollingEnemy enemy;

        if (symbol == 'A')
        {
            enemy = new PatrollingEnemy(this, pos);
        }
        else if (symbol == 'B')
        {
            enemy = new PlayerFollowingEnemy(this, pos);
        }
        else
        {
            enemy = new UnpredictableEnemy(this, pos);
        }

        AddChild(enemy);
    }
Beispiel #11
0
    //======================================================
    protected override void OnTriggerEnter2D(Collider2D other)
    {
        PlayerHitboxReference playerReference = other.GetComponent <PlayerHitboxReference>();

        if (playerReference != null && playerReference.player != null)
        {
            playerReference.player.InstaDeath();
        }

        SwappableEntityHitboxReference swappableEntityReference = other.GetComponent <SwappableEntityHitboxReference>();

        if (swappableEntityReference != null && swappableEntityReference.swappableEntity != null)
        {
            PatrollingEnemy patrollingEnemy = swappableEntityReference.swappableEntity as PatrollingEnemy;
            if (patrollingEnemy != null)
            {
                patrollingEnemy.InstaDeath();
            }
        }

        //Do something
        Destroy(gameObject);
    }
Beispiel #12
0
    // =====================================
    private void OnTriggerStay2D(Collider2D other)
    {
        PlayerHitboxReference playerReference = other.GetComponent <PlayerHitboxReference>();

        if (playerReference != null && playerReference.player != null && !playerReference.player.isDead)
        {
            PlayerController player    = playerReference.player;
            Vector2          direction = transform.TransformDirection(localSpikeDirection).normalized;
            if (Vector2.Dot(direction, player.currentSpeed - currentSpeed) >= -0.1f)
            {
                return;
            }

            SoundManager.instance.PlaySound(SoundManager.SoundType.Spikes);
            player.InstaDeath();
            return;
        }

        SwappableEntityHitboxReference swappableEntityReference = other.GetComponent <SwappableEntityHitboxReference>();

        if (swappableEntityReference != null && swappableEntityReference.swappableEntity != null)
        {
            PatrollingEnemy enemy = swappableEntityReference.swappableEntity as PatrollingEnemy;
            if (enemy != null)
            {
                Vector2 direction = transform.TransformDirection(localSpikeDirection).normalized;
                if (Vector2.Dot(direction, enemy.currentSpeed - currentSpeed) >= -0.1f)
                {
                    return;
                }

                SoundManager.instance.PlaySound(SoundManager.SoundType.Spikes);
                enemy.InstaDeath();
                return;
            }
        }
    }
Beispiel #13
0
    public override bool check(Controller c)
    {
        PatrollingEnemy pe = State.cast <PatrollingEnemy> (c);

        return(pe.getPatrolTarget() == null && pe.getPrevNode() == null);
    }
Beispiel #14
0
    public override void perform(Controller c)
    {
        PatrollingEnemy patroller = State.cast <PatrollingEnemy> (c);
        PatrolNode      n         = patroller.getPatrolTarget();

        //can't do anything without a patrol target
        if (n == null)
        {
            return;
        }

        Vector3 navPos;

        if (c.getMap() != null)
        {
            if (Vector2.Distance(patroller.transform.position, n.transform.position) <= c.getMap().cellDimension)
            {
                navPos = n.transform.position;
            }
            else if (!c.currentPosition(out navPos))
            {
                c.setPath(n.transform.position);

                //throw out the first node in the path
                Vector3 trash;
                c.nextPosition(out trash);
            }
        }
        else
        {
            navPos = n.transform.position;
        }

        //turn to face move direction; wait until turning is done
        patroller.facePoint(navPos, patroller.getTurnSpeed() * Time.deltaTime);
        if (Vector3.Angle(patroller.transform.position - navPos, -patroller.transform.up) < turnTolerance)
        {
            float dist     = Vector2.Distance(c.transform.position, navPos);
            float moveDist = c.getSelf().getMovespeed() * Time.deltaTime;
            if (moveDist > dist)
            {
                moveDist = dist;
            }

            //move
            Vector2      dir = navPos - c.transform.position;
            RaycastHit2D hit = Physics2D.Raycast(c.transform.position, dir, moveDist * 20, ~0);
            Door         d   = null;
            if (hit.collider != null)
            {
                d = hit.collider.GetComponent <Door> ();
                if (d == null || d.isOpen())
                {
                    c.transform.Translate(
                        dir.normalized *
                        moveDist, Space.World);
                }
            }


            //if near the next point in the path, look ahead
            if (c.getMap() != null && dist < c.getMap().cellDimension / 2f)
            {
                c.nextPosition(out navPos);
            }

//			float patrolTolerance = c.getMap () != null ? c.getMap ().cellDimension : moveTolerance;

            //if near the target patrol node, look to the next one
            if (Vector2.Distance(patroller.transform.position, n.transform.position) < moveTolerance)
            {
                patroller.nextPatrolNode();
                if (c.getMap() != null && patroller.getPatrolTarget() != null)
                {
                    c.setPath(patroller.getPatrolTarget().transform.position);

                    //throw out the first node in the path
                    Vector3 trash;
                    c.nextPosition(out trash);
                }
            }
        }
    }
 private void OnEnable()
 {
     targetObject = target as PatrollingEnemy;
 }