// 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); }
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); }
// 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]; } } }
// 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(); } }
// 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; } }
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); } }
public abstract bool Attack(Dirs dir); // Attacks in a direction. False if no enemy.