コード例 #1
0
    // Use this for initialization
    public override bool Attack(Dirs dir)
    {
        // Shoot out a ray to check for a collision with the level layer.
        RaycastHit2D hit = Physics2D.Raycast(transform.position,                                // origin
                                             GridMovement.DirTable[dir],                        // Lookup table (direction)!
                                             1f,                                                // Only 1 unit Grid
                                             LayerMask.GetMask("Enemies"));                     // Only on this layer

        // If a collider exists, we found an enemy
        if (hit.collider != null)
        {
            // Debug.Log("FOUND AN ENEMY!!!");
            EnemyComponent ec = hit.collider.gameObject.GetComponent <EnemyComponent>();
            if (ec != null)
            {
                ec.Hit(damage);

                // Direction
                Vector2 vdir = GridMovement.DirTable[dir];

                // Make an arrow.
                GameObject swipe = Instantiate(Resources.Load("DaggerSwipe") as GameObject);

                // Set potision
                Transform trans = swipe.transform;
                trans.position = transform.position + (Vector3)vdir;

                // Rotate
                float angle = Mathf.Atan2(vdir.y, vdir.x) * Mathf.Rad2Deg;
                trans.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
            }
        }
        return(hit.collider != null);
    }
コード例 #2
0
    public override bool Attack(Dirs dir)
    {
        // Shoot out a ray to check for a collision with the level layer.
        RaycastHit2D hit = Physics2D.Raycast(transform.position,                                // origin
                                             GridMovement.DirTable[dir],                        // Lookup table (direction)!
                                             range,                                             // Only 1 unit Grid
                                             LayerMask.GetMask("Enemies", "Level"));            // Only on this layer

        // If hit, check layer
        if (hit.collider != null)
        {
            GameObject obj  = hit.collider.gameObject;
            LayerMask  mask = obj.layer;

            // Layer stuff
            if (mask == LayerMask.NameToLayer("Layer"))
            {
                return(false);
            }

            // Enemies and stuff
            if (mask == LayerMask.NameToLayer("Enemies"))
            {
                Vector2 vdir = GridMovement.DirTable[dir];

                // Make an arrow.
                GameObject arrow = Instantiate(Resources.Load("Arrowthing") as GameObject);
                arrow.GetComponent <Rigidbody2D>().velocity = ((Vector3)vdir) * speed;

                // Set potision
                Transform trans = arrow.transform;
                trans.position = transform.position;

                // Rotate
                float angle = Mathf.Atan2(vdir.y, vdir.x) * Mathf.Rad2Deg;
                trans.rotation = Quaternion.AngleAxis(angle, Vector3.forward);


                // Make a swipe.
                GameObject swipe = Instantiate(Resources.Load("ArrowSwipe") as GameObject);

                // Set potision
                trans          = swipe.transform;
                trans.position = transform.position + ((Vector3)vdir * 1f);

                // Rotate
                angle          = Mathf.Atan2(vdir.y, vdir.x) * Mathf.Rad2Deg;
                trans.rotation = Quaternion.AngleAxis(angle, Vector3.forward);

                return(true);
            }
        }

        return(false);
    }
コード例 #3
0
    // Update is called once per frame
    void Update()
    {
        Dirs dir = Dirs.NULL;

        // Rightwards Movement
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            dir = Dirs.RIGHT;
        }

        // Leftwards Movement
        else if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            dir = Dirs.LEFT;
        }

        // Upwards Movement
        else if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            dir = Dirs.UP;
        }

        // Downwards Movement
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            dir = Dirs.DOWN;
        }

        if (dir != Dirs.NULL)
        {
            // Fire off a world update
            smu.UpdateWorld();

            // Check for movement
            if (gm.CanMove(dir))
            {
                transform.position += (Vector3)GridMovement.DirTable[dir];
            }
        }
    }
コード例 #4
0
    // Update is called once per frame
    void Update()
    {
        Dirs dir = Dirs.NULL;

        // // TEST CODE
        // if(Input.GetKeyDown(KeyCode.D)) {
        //  Debug.Log("Equipped dagger!");
        //  SetWeapon<DaggerWeapon>();
        // }
        // if(Input.GetKeyDown(KeyCode.S)) {
        //  Debug.Log("Equipped Longsword!");
        //  SetWeapon<LongswordWeapon>();
        // }
        // if(Input.GetKeyDown(KeyCode.A)) {
        //  Debug.Log("Equipped GUN!");
        //  SetWeapon<GunWeapon>();
        // }
        // if(Input.GetKeyDown(KeyCode.D)) {
        //  GetComponent<PlayerHealthController>().DealDamage(1);
        // }
        // if(Input.GetKeyDown(KeyCode.E)) {
        //  pcc.AddCoins(20);
        // }

        // Rightwards Movement
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            dir = Dirs.RIGHT;
        }

        // Leftwards Movement
        else if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            dir = Dirs.LEFT;
        }

        // Upwards Movement
        else if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            dir = Dirs.UP;
        }

        // Downwards Movement
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            dir = Dirs.DOWN;
        }

        if (dir != Dirs.NULL)
        {
            // Reset the world timer so it doesn't prematurely fire off
            wt.Reset();

            bool attacked = weapon.Attack(dir);             // Attack in the given direction
            if (attacked)
            {
                eac.PlayAttack();
            }
            // returns false is there was no enemy to attack.
            else
            {
                if (gm.IsStones(dir))
                {
                    gst.StartTranslation();

                    transform.position += (Vector3)GridMovement.DirTable[dir];

                    // NOTE(clark): Testing hopping here. I really like hopping.
                    // gst.SetPosition(GridSpriteTranslate.MoveType.WALK);

                    gst.SetPosition(GridSpriteTranslate.MoveType.WALK);
                    anim.SetTrigger("Walk");
                    anim_head.SetTrigger("RESET");
                }

                // This is an ugly block. Really brute force. OH WELL
                else if (gm.IsWater(dir))
                {
                    // Shoot out a ray to check for a collision with the level layer.
                    RaycastHit2D hit = Physics2D.Raycast(transform.position + (Vector3)(GridMovement.DirTable[dir] * 2),                        // origin
                                                         Vector3.up,                                                                            // Lookup table (direction)!
                                                         0.1f,                                                                                  // Only 1 unit Grid
                                                         LayerMask.GetMask("Stones"));                                                          // Only on this layer

                    if (hit.collider != null)
                    {
                        gst.StartTranslation();

                        transform.position += ((Vector3)GridMovement.DirTable[dir] * 2);

                        // Play jump noise
                        int idx = Random.Range(0, jump_sounds.Count);
                        AudioSource.PlayClipAtPoint(jump_sounds[idx], transform.position, jump_vol);

                        // NOTE(clark): Testing hopping here. I really like hopping.
                        // gst.SetPosition(GridSpriteTranslate.MoveType.WALK);
                        gst.SetPosition(GridSpriteTranslate.MoveType.JUMP);
                        anim.SetTrigger("Jump");
                        anim_head.SetTrigger("RESET");
                    }
                    else
                    {
                        // Shoot out a ray to check for a collision with the level layer.
                        hit = Physics2D.Raycast(transform.position + (Vector3)(GridMovement.DirTable[dir] * 2),                                         // origin
                                                Vector3.up,                                                                                             // Lookup table (direction)!
                                                0.1f,                                                                                                   // Only 1 unit Grid
                                                LayerMask.GetMask("Water"));                                                                            // Only on this layer
                        // NO water
                        if (hit.collider == null)
                        {
                            gst.StartTranslation();

                            transform.position += ((Vector3)GridMovement.DirTable[dir] * 2);

                            // NOTE(clark): Testing hopping here. I really like hopping.
                            // gst.SetPosition(GridSpriteTranslate.MoveType.WALK);
                            gst.SetPosition(GridSpriteTranslate.MoveType.JUMP);
                            anim.SetTrigger("Jump");
                            anim_head.SetTrigger("RESET");
                        }
                    }
                }

                else if (gm.CanMovePlayer(dir))
                {
                    gst.StartTranslation();

                    transform.position += (Vector3)GridMovement.DirTable[dir];

                    // NOTE(clark): Testing hopping here. I really like hopping.
                    // gst.SetPosition(GridSpriteTranslate.MoveType.WALK);
                    gst.SetPosition(GridSpriteTranslate.MoveType.WALK);
                    anim.SetTrigger("Walk");
                    anim_head.SetTrigger("RESET");
                }
            }

            // NOTE(clark): Did stuff
            // Fire off a world update
            smu.UpdateWorld();
        }
    }
コード例 #5
0
    // Subscriber method.
    void SubUpdate()
    {
        //puts arms up after going right
        //if he is on step 0 currently, he just put his arms down (do nothing)
        if (step == 0)
        {
            dir = Dirs.NULL;
        }
        if (step == 1)
        {
            dir = Dirs.NULL;
            Vector2 distToPlayer = new Vector2(player.transform.position.x - transform.position.x, player.transform.position.y - transform.position.y);
            if (distToPlayer.magnitude < maxDist)
            {
                if (distToPlayer.magnitude > .5)
                {
                    if (Mathf.Abs(distToPlayer.x) >= Mathf.Abs(distToPlayer.y * 3))
                    {
                        if (distToPlayer.x >= 0)
                        {
                            dir = Dirs.RIGHT;
                        }
                        else
                        {
                            dir = Dirs.LEFT;
                        }
                    }
                    else if (distToPlayer.y >= 0)
                    {
                        dir = Dirs.UP;
                    }
                    else
                    {
                        dir = Dirs.DOWN;
                    }
                }
                else
                {
                    dir = Dirs.NULL;
                }
            }
        }

        if (dir != Dirs.NULL)
        {
            // returns false is there was no enemy to attack.
            if (!attacked)
            {
                step++;
                step %= stepCap;
                //step++;
                //step %= dirs.Length;
            }
            // NOTE(clark): If the slime attacked, backtrack to the previous step to keep slime within bounds.
            else              //NOTE(TJ): I removed this because it makes the gold slime go off pattern. Now the slime just keeps trying if he doesn't get to his new position

            {
                step++;
                step %= stepCap;
                //step += dirs.Length - 1;
                //step %= dirs.Length;
            }
        }
        // NOTE(clark): Added an else to fix update bug.
        else
        {
            step++;
            step %= stepCap;
            //step++;
            //step %= dirs.Length;
        }
    }
コード例 #6
0
    public bool AttackShoot(Dirs dir, float dist, GameObject player)
    {
        if (!dead)
        {
            if (dir == Dirs.UP || dir == Dirs.DOWN || player.transform.position.y != transform.position.y)
            {
                return(Attack(GridMovement.DirTable[dir]));
            }
            // Shoot out a ray to check for a collision with the level layer.
            RaycastHit2D hit = Physics2D.Raycast(transform.position,                    // origin
                                                 GridMovement.DirTable[dir],            // Lookup table (direction)!
                                                 7f,                                    // range
                                                 LayerMask.GetMask("Player", "Level")); // Only on this layer

            // If hit, check layer
            if (hit.collider != null)
            {
                GameObject obj  = hit.collider.gameObject;
                LayerMask  mask = obj.layer;

                // Layer stuff
                if (mask == LayerMask.NameToLayer("Layer"))
                {
                    return(false);
                }

                Vector2 vdir = GridMovement.DirTable[dir];

                // Make an arrow.
                GameObject arrow = Instantiate(Resources.Load("Arrowthing") as GameObject);
                arrow.GetComponent <Rigidbody2D>().velocity = ((Vector3)vdir) * 20f;                //speed
                arrow.GetComponent <ArrowScript>().SetLMask("Player");
                arrow.GetComponent <ArrowScript>().damage = 2;

                // Set potision
                Transform trans = arrow.transform;
                trans.position = transform.position;

                // Rotate
                float angle = Mathf.Atan2(vdir.y, vdir.x) * Mathf.Rad2Deg;
                trans.rotation = Quaternion.AngleAxis(angle, Vector3.forward);


                // Make a swipe.
                GameObject swipe = Instantiate(Resources.Load("ArrowSwipe") as GameObject);

                // Set potision
                trans          = swipe.transform;
                trans.position = transform.position + ((Vector3)vdir * 1f);

                // Rotate
                angle          = Mathf.Atan2(vdir.y, vdir.x) * Mathf.Rad2Deg;
                trans.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
            }

            return(hit.collider != null);
        }
        else
        {
            return(false);
        }
    }
コード例 #7
0
 public abstract bool Attack(Dirs dir);     // Attacks in a direction. False if no enemy.