From f9c628b94c9f92d7e4bcf097fef84ad94c9d6742 Mon Sep 17 00:00:00 2001 From: Adam P Skawinski Date: Wed, 22 Apr 2020 22:33:03 -0400 Subject: [PATCH] Emergency Push Ive been working all day and havent pushed in a while --- Platformer/Assets/Scripts/Controller2D.cs | 134 - Platformer/Assets/Scripts/Items&HUD.meta | 8 + .../Scripts/{Level 1 => Items&HUD}/Door.cs | 0 .../{Level 1 => Items&HUD}/Door.cs.meta | 0 .../Scripts/{ => Items&HUD}/HealthBar.cs | 0 .../Scripts/{ => Items&HUD}/HealthBar.cs.meta | 0 Platformer/Assets/Scripts/Menus&Camera.meta | 8 + .../Camera_Controller.cs | 0 .../Camera_Controller.cs.meta | 0 .../Scripts/{ => Menus&Camera}/MainMenu.cs | 0 .../{ => Menus&Camera}/MainMenu.cs.meta | 0 .../{Level 1.meta => Player&Enemy.meta} | 0 .../{Level 1 => Player&Enemy}/Bullet.cs | 0 .../{Level 1 => Player&Enemy}/Bullet.cs.meta | 0 .../{Level 1 => Player&Enemy}/Enemy.cs | 0 .../{Level 1 => Player&Enemy}/Enemy.cs.meta | 0 .../Player_Controller.cs | 8 +- .../Player&Enemy/Player_Controller.cs.meta | 106 + .../{Level 1 => Player&Enemy}/Spawner1.cs | 0 .../Spawner1.cs.meta | 0 .../{Level 1 => Player&Enemy}/Weapon.cs | 0 .../{Level 1 => Player&Enemy}/Weapon.cs.meta | 0 Platformer/Assets/Scripts/Raycast.meta | 8 + .../Assets/Scripts/Raycast/Controller2D.cs | 222 + .../{ => Raycast}/Controller2D.cs.meta | 2 +- .../Scripts/Raycast/PlatformController.cs | 171 + .../PlatformController.cs.meta} | 2 +- .../Scripts/Raycast/RaycastController.cs | 57 + .../Scripts/Raycast/RaycastController.cs.meta | 11 + .../World Build/Enemies/Evil Wizard.meta | 8 + .../Enemies/Evil Wizard/License.txt | 2 + .../Enemies/Evil Wizard/License.txt.meta | 7 + .../Enemies/Evil Wizard/Sprites.meta | 8 + .../Enemies/Evil Wizard/Sprites/Attack.png | Bin 0 -> 6122 bytes .../Evil Wizard/Sprites/Attack.png.meta | 719 ++ .../Enemies/Evil Wizard/Sprites/Death.png | Bin 0 -> 5204 bytes .../Evil Wizard/Sprites/Death.png.meta | 88 + .../Enemies/Evil Wizard/Sprites/Idle.png | Bin 0 -> 5046 bytes .../Enemies/Evil Wizard/Sprites/Idle.png.meta | 88 + .../Enemies/Evil Wizard/Sprites/Move.png | Bin 0 -> 5464 bytes .../Enemies/Evil Wizard/Sprites/Move.png.meta | 88 + .../Enemies/Evil Wizard/Sprites/Take Hit.png | Bin 0 -> 3823 bytes .../Evil Wizard/Sprites/Take Hit.png.meta | 88 + Platformer/Assets/_Scenes/Level1.unity | 10521 ++++++++-------- 44 files changed, 6754 insertions(+), 5600 deletions(-) delete mode 100644 Platformer/Assets/Scripts/Controller2D.cs create mode 100644 Platformer/Assets/Scripts/Items&HUD.meta rename Platformer/Assets/Scripts/{Level 1 => Items&HUD}/Door.cs (100%) rename Platformer/Assets/Scripts/{Level 1 => Items&HUD}/Door.cs.meta (100%) rename Platformer/Assets/Scripts/{ => Items&HUD}/HealthBar.cs (100%) rename Platformer/Assets/Scripts/{ => Items&HUD}/HealthBar.cs.meta (100%) create mode 100644 Platformer/Assets/Scripts/Menus&Camera.meta rename Platformer/Assets/Scripts/{Level 1 => Menus&Camera}/Camera_Controller.cs (100%) rename Platformer/Assets/Scripts/{Level 1 => Menus&Camera}/Camera_Controller.cs.meta (100%) rename Platformer/Assets/Scripts/{ => Menus&Camera}/MainMenu.cs (100%) rename Platformer/Assets/Scripts/{ => Menus&Camera}/MainMenu.cs.meta (100%) rename Platformer/Assets/Scripts/{Level 1.meta => Player&Enemy.meta} (100%) rename Platformer/Assets/Scripts/{Level 1 => Player&Enemy}/Bullet.cs (100%) rename Platformer/Assets/Scripts/{Level 1 => Player&Enemy}/Bullet.cs.meta (100%) rename Platformer/Assets/Scripts/{Level 1 => Player&Enemy}/Enemy.cs (100%) rename Platformer/Assets/Scripts/{Level 1 => Player&Enemy}/Enemy.cs.meta (100%) rename Platformer/Assets/Scripts/{Level 1 => Player&Enemy}/Player_Controller.cs (96%) create mode 100644 Platformer/Assets/Scripts/Player&Enemy/Player_Controller.cs.meta rename Platformer/Assets/Scripts/{Level 1 => Player&Enemy}/Spawner1.cs (100%) rename Platformer/Assets/Scripts/{Level 1 => Player&Enemy}/Spawner1.cs.meta (100%) rename Platformer/Assets/Scripts/{Level 1 => Player&Enemy}/Weapon.cs (100%) rename Platformer/Assets/Scripts/{Level 1 => Player&Enemy}/Weapon.cs.meta (100%) create mode 100644 Platformer/Assets/Scripts/Raycast.meta create mode 100644 Platformer/Assets/Scripts/Raycast/Controller2D.cs rename Platformer/Assets/Scripts/{ => Raycast}/Controller2D.cs.meta (83%) create mode 100644 Platformer/Assets/Scripts/Raycast/PlatformController.cs rename Platformer/Assets/Scripts/{Level 1/Player_Controller.cs.meta => Raycast/PlatformController.cs.meta} (83%) create mode 100644 Platformer/Assets/Scripts/Raycast/RaycastController.cs create mode 100644 Platformer/Assets/Scripts/Raycast/RaycastController.cs.meta create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard.meta create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/License.txt create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/License.txt.meta create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites.meta create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Attack.png create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Attack.png.meta create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Death.png create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Death.png.meta create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Idle.png create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Idle.png.meta create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Move.png create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Move.png.meta create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Take Hit.png create mode 100644 Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Take Hit.png.meta diff --git a/Platformer/Assets/Scripts/Controller2D.cs b/Platformer/Assets/Scripts/Controller2D.cs deleted file mode 100644 index f299239..0000000 --- a/Platformer/Assets/Scripts/Controller2D.cs +++ /dev/null @@ -1,134 +0,0 @@ -using UnityEngine; -using System.Collections; - -[RequireComponent(typeof(BoxCollider2D))] //Require BoxCollider -public class Controller2D : MonoBehaviour -{ - public LayerMask collisionMask; //Objects we collide with - - const float skinWidth = .25f; //const so you cant change the value, and width - public int horizontalRayCount = 4; //Amount of rays shooting horizontally - public int verticalRayCount = 4;//Amount of rays shooting Vertically - - float horizontalRaySpacing; //Spacing between each horizontal ray - float verticalRaySpacing; //Spacing between each vertical ray - - BoxCollider2D collider; //Reference - RaycastOrigins raycastOrigins; //Reference to raycastorigins - public CollisionInfo collisions; //Reference to Collison Info - - void Start() - { - collider = GetComponent(); - CalculateRaySpacing(); //never changes - } - - public void Move(Vector3 velocity) //Actually Moving - { - UpdateRaycastOrigins(); //Everytime we move - collisions.Reset(); //Blank Slate - - if (velocity.x != 0)//Horizontal Axis - { - HorizontalCollisions(ref velocity); - } - if (velocity.y != 0) //Vertical Axis - { - VerticalCollisions(ref velocity); - } - - transform.Translate(velocity); //Actually modifies the velocity - } - - void HorizontalCollisions(ref Vector3 velocity) //reference to velocity vector (dont make a copy) - { - float directionX = Mathf.Sign(velocity.x); //depending on moving left or right - float rayLength = Mathf.Abs(velocity.x) + skinWidth; //length of the ray (always positve) - - for (int i = 0; i < horizontalRayCount; i++) - { - Vector2 rayOrigin = (directionX == -1) ? raycastOrigins.bottomLeft : raycastOrigins.bottomRight;// See if moving up or down, then choose corresponding - rayOrigin += Vector2.up * (horizontalRaySpacing * i);//cast rays from where we will be once moving - RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.right * directionX, rayLength, collisionMask);//raycast from origin and have it go up, length of the ray, layer mask - - Debug.DrawRay(rayOrigin, Vector2.right * directionX * rayLength, Color.red);//multiply to maintain direction - - if (hit) - { - velocity.x = (hit.distance - skinWidth) * directionX; //Multiply to maintain direction - rayLength = hit.distance; //length of ray is now the distance to hit - - collisions.left = directionX == -1; //if hit and going left, collison left is true - collisions.right = directionX == 1; //if hit and going right, collision right is true - } - } - } - - void VerticalCollisions(ref Vector3 velocity) //reference to velocity vector (dont make a copy) - { - float directionY = Mathf.Sign(velocity.y); //depending on moving up or done - float rayLength = Mathf.Abs(velocity.y) + skinWidth; //length of the ray (always positve) - - for (int i = 0; i < verticalRayCount; i++) - { - Vector2 rayOrigin = (directionY == -1) ? raycastOrigins.bottomLeft : raycastOrigins.topLeft; // See if moving up or down, then choose corresponding - rayOrigin += Vector2.right * (verticalRaySpacing * i + velocity.x); //cast rays from where we will be once moving - RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.up * directionY, rayLength, collisionMask); //raycast from origin and have it go up, length of the ray, layer mask - - Debug.DrawRay(rayOrigin, Vector2.up * directionY * rayLength, Color.red); - - if (hit) //if it hits - { - velocity.y = (hit.distance - skinWidth) * directionY; //multiply to maintain direction - rayLength = hit.distance; //length of ray is now the distance to hit - collisions.below = directionY == -1; //if hit and going down, below is true - collisions.above = directionY == 1; //if hit and going up, above is true - } - } - } - - - - void UpdateRaycastOrigins() //Update raycast origins - { - Bounds bounds = collider.bounds; //Getting bounds from the collider - bounds.Expand(skinWidth * -2); //Shrinks - - raycastOrigins.bottomLeft = new Vector2(bounds.min.x, bounds.min.y); //Bottom Left corner - raycastOrigins.bottomRight = new Vector2(bounds.max.x, bounds.min.y);//Bottom Right corner - raycastOrigins.topLeft = new Vector2(bounds.min.x, bounds.max.y); //Top Left corner - raycastOrigins.topRight = new Vector2(bounds.max.x, bounds.max.y);//Top Right corner - } - - void CalculateRaySpacing() //Calculates space between rays - { - Bounds bounds = collider.bounds; //set bounds - bounds.Expand(skinWidth * -2); //Shrink - - horizontalRayCount = Mathf.Clamp(horizontalRayCount, 2, int.MaxValue); //Need 1 in each corner - verticalRayCount = Mathf.Clamp(verticalRayCount, 2, int.MaxValue); //1 in each corner (vertical) - - horizontalRaySpacing = bounds.size.y / (horizontalRayCount - 1); //The size of bounds / n - 1 - verticalRaySpacing = bounds.size.x / (verticalRayCount - 1);//The size of bounds / n - 1 - } - - struct RaycastOrigins //Holds Vector 2's - { - public Vector2 topLeft, topRight; - public Vector2 bottomLeft, bottomRight; - } - - public struct CollisionInfo - { - public bool above, below; - public bool left, right; - - public void Reset() //Reset the Bools - { - above = below = false; - left = right = false; - } - } - -} - diff --git a/Platformer/Assets/Scripts/Items&HUD.meta b/Platformer/Assets/Scripts/Items&HUD.meta new file mode 100644 index 0000000..9580f91 --- /dev/null +++ b/Platformer/Assets/Scripts/Items&HUD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 55c80d7b3b79aba4b83d1d9ea347884e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/Scripts/Level 1/Door.cs b/Platformer/Assets/Scripts/Items&HUD/Door.cs similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Door.cs rename to Platformer/Assets/Scripts/Items&HUD/Door.cs diff --git a/Platformer/Assets/Scripts/Level 1/Door.cs.meta b/Platformer/Assets/Scripts/Items&HUD/Door.cs.meta similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Door.cs.meta rename to Platformer/Assets/Scripts/Items&HUD/Door.cs.meta diff --git a/Platformer/Assets/Scripts/HealthBar.cs b/Platformer/Assets/Scripts/Items&HUD/HealthBar.cs similarity index 100% rename from Platformer/Assets/Scripts/HealthBar.cs rename to Platformer/Assets/Scripts/Items&HUD/HealthBar.cs diff --git a/Platformer/Assets/Scripts/HealthBar.cs.meta b/Platformer/Assets/Scripts/Items&HUD/HealthBar.cs.meta similarity index 100% rename from Platformer/Assets/Scripts/HealthBar.cs.meta rename to Platformer/Assets/Scripts/Items&HUD/HealthBar.cs.meta diff --git a/Platformer/Assets/Scripts/Menus&Camera.meta b/Platformer/Assets/Scripts/Menus&Camera.meta new file mode 100644 index 0000000..0c59c5e --- /dev/null +++ b/Platformer/Assets/Scripts/Menus&Camera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c257225f395a074f95e8ead43326aaa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/Scripts/Level 1/Camera_Controller.cs b/Platformer/Assets/Scripts/Menus&Camera/Camera_Controller.cs similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Camera_Controller.cs rename to Platformer/Assets/Scripts/Menus&Camera/Camera_Controller.cs diff --git a/Platformer/Assets/Scripts/Level 1/Camera_Controller.cs.meta b/Platformer/Assets/Scripts/Menus&Camera/Camera_Controller.cs.meta similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Camera_Controller.cs.meta rename to Platformer/Assets/Scripts/Menus&Camera/Camera_Controller.cs.meta diff --git a/Platformer/Assets/Scripts/MainMenu.cs b/Platformer/Assets/Scripts/Menus&Camera/MainMenu.cs similarity index 100% rename from Platformer/Assets/Scripts/MainMenu.cs rename to Platformer/Assets/Scripts/Menus&Camera/MainMenu.cs diff --git a/Platformer/Assets/Scripts/MainMenu.cs.meta b/Platformer/Assets/Scripts/Menus&Camera/MainMenu.cs.meta similarity index 100% rename from Platformer/Assets/Scripts/MainMenu.cs.meta rename to Platformer/Assets/Scripts/Menus&Camera/MainMenu.cs.meta diff --git a/Platformer/Assets/Scripts/Level 1.meta b/Platformer/Assets/Scripts/Player&Enemy.meta similarity index 100% rename from Platformer/Assets/Scripts/Level 1.meta rename to Platformer/Assets/Scripts/Player&Enemy.meta diff --git a/Platformer/Assets/Scripts/Level 1/Bullet.cs b/Platformer/Assets/Scripts/Player&Enemy/Bullet.cs similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Bullet.cs rename to Platformer/Assets/Scripts/Player&Enemy/Bullet.cs diff --git a/Platformer/Assets/Scripts/Level 1/Bullet.cs.meta b/Platformer/Assets/Scripts/Player&Enemy/Bullet.cs.meta similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Bullet.cs.meta rename to Platformer/Assets/Scripts/Player&Enemy/Bullet.cs.meta diff --git a/Platformer/Assets/Scripts/Level 1/Enemy.cs b/Platformer/Assets/Scripts/Player&Enemy/Enemy.cs similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Enemy.cs rename to Platformer/Assets/Scripts/Player&Enemy/Enemy.cs diff --git a/Platformer/Assets/Scripts/Level 1/Enemy.cs.meta b/Platformer/Assets/Scripts/Player&Enemy/Enemy.cs.meta similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Enemy.cs.meta rename to Platformer/Assets/Scripts/Player&Enemy/Enemy.cs.meta diff --git a/Platformer/Assets/Scripts/Level 1/Player_Controller.cs b/Platformer/Assets/Scripts/Player&Enemy/Player_Controller.cs similarity index 96% rename from Platformer/Assets/Scripts/Level 1/Player_Controller.cs rename to Platformer/Assets/Scripts/Player&Enemy/Player_Controller.cs index 12b2137..2b20062 100644 --- a/Platformer/Assets/Scripts/Level 1/Player_Controller.cs +++ b/Platformer/Assets/Scripts/Player&Enemy/Player_Controller.cs @@ -3,14 +3,12 @@ using UnityEngine; using UnityEngine.UI; -[RequireComponent(typeof(Controller2D))] +[RequireComponent(typeof(Controller2D))] public class Player_Controller : MonoBehaviour { - Controller2D controller; //controller float moveSpeed = 10; //How Fast He moves - float gravity; //Gravity (No Rigid Body) float jumpVelocity; Vector3 velocity; //Velocity (Again since using raycasting need to create alll this) @@ -20,7 +18,9 @@ public class Player_Controller : MonoBehaviour public float jumpHeight = 4; //height public float timeToJumpApex = .4f; //time to get there float accelerationTimeAirborne = .2f; //acceleration time - float accelerationTimeGrounded = .05f; //time to ground + float accelerationTimeGrounded = .15f; //time to + + Controller2D controller; //controller public int currentHealth; //health diff --git a/Platformer/Assets/Scripts/Player&Enemy/Player_Controller.cs.meta b/Platformer/Assets/Scripts/Player&Enemy/Player_Controller.cs.meta new file mode 100644 index 0000000..95e769a --- /dev/null +++ b/Platformer/Assets/Scripts/Player&Enemy/Player_Controller.cs.meta @@ -0,0 +1,106 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +[RequireComponent(typeof(Controller2D))] +public class Player_Controller : MonoBehaviour +{ + Controller2D controller; //controller + + float moveSpeed = 10; //How Fast He moves + + + float gravity; //Gravity (No Rigid Body) + float jumpVelocity; + Vector3 velocity; //Velocity (Again since using raycasting need to create alll this) + float velocityXSmoothing; + + //Jumping + public float jumpHeight = 4; //height + public float timeToJumpApex = .4f; //time to get there + float accelerationTimeAirborne = .2f; //acceleration time + float accelerationTimeGrounded = .15f; //time to + + + public int currentHealth; //health + private int maxHealth = 100; //max health + public HealthBar healthbar; //Healthbar + + public GameObject door; //Public so I could drag door in + + void Start() + { + controller = GetComponent(); //Get Components controller2d + + gravity = -(2 * jumpHeight) / Mathf.Pow(timeToJumpApex, 2); //Derived from equation + jumpVelocity = Mathf.Abs(gravity) * timeToJumpApex; //Derived from equation + print("Gravity: " + gravity + " Jump Velocity: " + jumpVelocity); + + door.SetActive(false); // Turn off the door + currentHealth = maxHealth; //Reset to max health + healthbar.SetMaxHealth(maxHealth); //Health bar to max + } + + void Update() + { + if (controller.collisions.above || controller.collisions.below) //if true reset y + { + velocity.y = 0; + } + + Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); + + if (Input.GetKeyDown(KeyCode.Space) && controller.collisions.below) //Jumping (and on something) + { + velocity.y = jumpVelocity; + } + + float targetVelocityX = input.x * moveSpeed; + + velocity.x = Mathf.SmoothDamp(velocity.x, targetVelocityX, ref velocityXSmoothing, (controller.collisions.below) ? accelerationTimeGrounded : accelerationTimeAirborne); //Movement in the x direction + velocity.y += gravity * Time.deltaTime; //Movement in the y Direction + controller.Move(velocity * Time.deltaTime); //How to actually move, in controller script + } + + + //Damage Function + void TakeDamage(int damage) + { + currentHealth -= damage; //take damage + healthbar.SetHealth(currentHealth); //modify health bar + if (currentHealth < 1) + { + Time.timeScale = 0f; + } + } + + + + //Ontrigger Enter (AKA TAGS) + void OnTriggerEnter2D(Collider2D other) //Pickups + { + if (other.gameObject.CompareTag("Key")) //If you got the key + { + other.gameObject.SetActive(false); //key is not actice + door.SetActive(true); // Door is accessible + } + + if (other.gameObject.CompareTag("Heart")) + { + other.gameObject.SetActive(false); // heart dissapears + currentHealth = maxHealth; // Full Health + healthbar.SetHealth(currentHealth); //Full HealthBar + } + + if (other.gameObject.CompareTag("Enemy")) + { + TakeDamage(20); + } + + //Ninja star is in the weapon script (easier that way for some reason ) + } + + + +} diff --git a/Platformer/Assets/Scripts/Level 1/Spawner1.cs b/Platformer/Assets/Scripts/Player&Enemy/Spawner1.cs similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Spawner1.cs rename to Platformer/Assets/Scripts/Player&Enemy/Spawner1.cs diff --git a/Platformer/Assets/Scripts/Level 1/Spawner1.cs.meta b/Platformer/Assets/Scripts/Player&Enemy/Spawner1.cs.meta similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Spawner1.cs.meta rename to Platformer/Assets/Scripts/Player&Enemy/Spawner1.cs.meta diff --git a/Platformer/Assets/Scripts/Level 1/Weapon.cs b/Platformer/Assets/Scripts/Player&Enemy/Weapon.cs similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Weapon.cs rename to Platformer/Assets/Scripts/Player&Enemy/Weapon.cs diff --git a/Platformer/Assets/Scripts/Level 1/Weapon.cs.meta b/Platformer/Assets/Scripts/Player&Enemy/Weapon.cs.meta similarity index 100% rename from Platformer/Assets/Scripts/Level 1/Weapon.cs.meta rename to Platformer/Assets/Scripts/Player&Enemy/Weapon.cs.meta diff --git a/Platformer/Assets/Scripts/Raycast.meta b/Platformer/Assets/Scripts/Raycast.meta new file mode 100644 index 0000000..bca0175 --- /dev/null +++ b/Platformer/Assets/Scripts/Raycast.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76ecf0fbc7f95e64eb715b2f13ee9ab3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/Scripts/Raycast/Controller2D.cs b/Platformer/Assets/Scripts/Raycast/Controller2D.cs new file mode 100644 index 0000000..880006f --- /dev/null +++ b/Platformer/Assets/Scripts/Raycast/Controller2D.cs @@ -0,0 +1,222 @@ +using UnityEngine; +using System.Collections; + + +public class Controller2D : RaycastController +{ + //derives from raycast controller + float maxClimbAngle = 80; //Highest angle to climb at + float maxDescendAngle = 80; //descend angle + + public CollisionInfo collisions; //Reference to Collison Info + + public override void Start() + { + base.Start(); //calls raycast controller start method + } + + public void Move(Vector3 velocity, bool standingOnPlatform = false) //Actually Moving + { + UpdateRaycastOrigins(); //Everytime we move + collisions.Reset(); //Blank Slate + + collisions.velocityOld = velocity; // + + if (velocity.y < 0) + { + DescendSlope(ref velocity); + } + + if (velocity.x != 0)//Horizontal Axis + { + HorizontalCollisions(ref velocity); + } + if (velocity.y != 0) //Vertical Axis + { + VerticalCollisions(ref velocity); + } + + transform.Translate(velocity); //Actually modifies the velocity + if (standingOnPlatform) + { + collisions.below = true; + } + + } + + void HorizontalCollisions(ref Vector3 velocity) //reference to velocity vector (dont make a copy) + { + float directionX = Mathf.Sign(velocity.x); //depending on moving left or right + float rayLength = Mathf.Abs(velocity.x) + skinWidth; //length of the ray (always positve) + + for (int i = 0; i < horizontalRayCount; i++) + { + Vector2 rayOrigin = (directionX == -1) ? raycastOrigins.bottomLeft : raycastOrigins.bottomRight;// See if moving up or down, then choose corresponding + rayOrigin += Vector2.up * (horizontalRaySpacing * i);//cast rays from where we will be once moving + RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.right * directionX, rayLength, collisionMask);//raycast from origin and have it go up, length of the ray, layer mask + + Debug.DrawRay(rayOrigin, Vector2.right * directionX * rayLength, Color.red);//multiply to maintain direction + + if (hit) + { + if(hit.distance == 0) + { + continue; //next ray determines collisions + } + float slopeAngle = Vector2.Angle(hit.normal, Vector2.up); + + if (i == 0 && slopeAngle <= maxClimbAngle) + { + if (collisions.descendingSlope) + { + collisions.descendingSlope = false; + velocity = collisions.velocityOld; //velocity is what it was before + } + + float distanceToSlopeStart = 0; //at the slope + + if (slopeAngle != collisions.slopeAngleOld) + { + distanceToSlopeStart = hit.distance - skinWidth; + velocity.x -= distanceToSlopeStart * directionX; // + } + ClimbSlope(ref velocity, slopeAngle); + velocity.x += distanceToSlopeStart * directionX; + } + + if (!collisions.climbingSlope || slopeAngle > maxClimbAngle) + { + velocity.x = (hit.distance - skinWidth) * directionX; //Multiply to maintain direction + rayLength = hit.distance; //length of ray is now the distance to hit + + if (collisions.climbingSlope) + { + velocity.y = Mathf.Tan(collisions.slopeAngle * Mathf.Deg2Rad) * Mathf.Abs(velocity.x); + } + + collisions.left = directionX == -1;//if hit and going left, collison left is true + collisions.right = directionX == 1;//if hit and going right, collision right is true + } + } + + } + } + + void VerticalCollisions(ref Vector3 velocity) //reference to velocity vector (dont make a copy) + { + float directionY = Mathf.Sign(velocity.y); //depending on moving up or done + float rayLength = Mathf.Abs(velocity.y) + skinWidth; //length of the ray (always positve) + + for (int i = 0; i < verticalRayCount; i++) + { + Vector2 rayOrigin = (directionY == -1) ? raycastOrigins.bottomLeft : raycastOrigins.topLeft; // See if moving up or down, then choose corresponding + rayOrigin += Vector2.right * (verticalRaySpacing * i + velocity.x); //cast rays from where we will be once moving + RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.up * directionY, rayLength, collisionMask); //raycast from origin and have it go up, length of the ray, layer mask + + Debug.DrawRay(rayOrigin, Vector2.up * directionY * rayLength, Color.red); + + if (hit) //if it hits + { + velocity.y = (hit.distance - skinWidth) * directionY; //multiply to maintain direction + rayLength = hit.distance; //length of ray is now the distance to hit + + if (collisions.climbingSlope) //if climbing the slope + { + velocity.x = velocity.y / Mathf.Tan(collisions.slopeAngle * Mathf.Deg2Rad) * Mathf.Sign(velocity.x); + } + collisions.below = directionY == -1; //if hit and going down, below is true + collisions.above = directionY == 1; //if hit and going up, above is true + } + } + //here fir curved slopes + if (collisions.climbingSlope) + { + float directionX = Mathf.Sign(velocity.x); + rayLength = Mathf.Abs(velocity.x) + skinWidth; //length of ray + Vector2 rayOrigin = ((directionX == -1) ? raycastOrigins.bottomLeft : raycastOrigins.bottomRight) + Vector2.up * velocity.y; //casting from new height + RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.right * directionX, rayLength, collisionMask); //hit + + if (hit) + { + float slopeAngle = Vector2.Angle(hit.normal, Vector2.up); //get angle + if (slopeAngle != collisions.slopeAngle) //collided with new slope + { + velocity.x = (hit.distance - skinWidth) * directionX; + collisions.slopeAngle = slopeAngle; + } + } + } + } + + void ClimbSlope(ref Vector3 velocity, float slopeAngle) //Climb that slope + { + float moveDistance = Mathf.Abs(velocity.x); //new values + float climbVelocityY = Mathf.Sin(slopeAngle * Mathf.Deg2Rad) * moveDistance; //new values (trig) + + if (velocity.y <= climbVelocityY) + { + velocity.y = climbVelocityY; //up + velocity.x = Mathf.Cos(slopeAngle * Mathf.Deg2Rad) * moveDistance * Mathf.Sign(velocity.x); //side + collisions.below = true; //on a slope + collisions.climbingSlope = true; //true + collisions.slopeAngle = slopeAngle; // + } + } + + void DescendSlope(ref Vector3 velocity) + { + float directionX = Mathf.Sign(velocity.x); + Vector2 rayOrigin = (directionX == -1) ? raycastOrigins.bottomRight : raycastOrigins.bottomLeft; //cast downwards + RaycastHit2D hit = Physics2D.Raycast(rayOrigin, -Vector2.up, Mathf.Infinity, collisionMask); //hit, infinty because we dint know distance + + if (hit) + { + float slopeAngle = Vector2.Angle(hit.normal, Vector2.up); //get angle + if (slopeAngle != 0 && slopeAngle <= maxDescendAngle) //not flat surface + { + if (Mathf.Sign(hit.normal.x) == directionX) //going down the slope + { + if (hit.distance - skinWidth <= Mathf.Tan(slopeAngle * Mathf.Deg2Rad) * Mathf.Abs(velocity.x)) //how far we have to move based on velocity x + { + float moveDistance = Mathf.Abs(velocity.x); //distance to move + float descendVelocityY = Mathf.Sin(slopeAngle * Mathf.Deg2Rad) * moveDistance; + velocity.x = Mathf.Cos(slopeAngle * Mathf.Deg2Rad) * moveDistance * Mathf.Sign(velocity.x); + velocity.y -= descendVelocityY; + + collisions.slopeAngle = slopeAngle; + collisions.descendingSlope = true; //descending the slope + collisions.below = true; //something is below + } + } + } + } + } + + + + public struct CollisionInfo + { + public bool above, below; //aboce and below bools + public bool left, right; //left and right bools + + public bool climbingSlope; //are you climbing + public bool descendingSlope; + public float slopeAngle, slopeAngleOld; //angle and old angle + public Vector3 velocityOld; + + public void Reset() //Reset the Bools + { + above = below = false; + left = right = false; + + climbingSlope = false; + descendingSlope = false; + + slopeAngleOld = slopeAngle; + slopeAngle = 0; + } + } + + +} + diff --git a/Platformer/Assets/Scripts/Controller2D.cs.meta b/Platformer/Assets/Scripts/Raycast/Controller2D.cs.meta similarity index 83% rename from Platformer/Assets/Scripts/Controller2D.cs.meta rename to Platformer/Assets/Scripts/Raycast/Controller2D.cs.meta index 788446b..763c066 100644 --- a/Platformer/Assets/Scripts/Controller2D.cs.meta +++ b/Platformer/Assets/Scripts/Raycast/Controller2D.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 36a1c430d51a93146afc47044561b487 +guid: 286b6eb439ce6f64eb66300c4a4fade8 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Platformer/Assets/Scripts/Raycast/PlatformController.cs b/Platformer/Assets/Scripts/Raycast/PlatformController.cs new file mode 100644 index 0000000..ad87b46 --- /dev/null +++ b/Platformer/Assets/Scripts/Raycast/PlatformController.cs @@ -0,0 +1,171 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +public class PlatformController : RaycastController +{ + + public LayerMask passengerMask; //layer used for passengers + public Vector3 move; + + public Vector3[] localWaypoints;//relative to platform + Vector3[] globalWaypoints; + + List passengerMovement; //store all the bools + Dictionary passengerDictionary = new Dictionary(); //to be able to jump + + public override void Start() + { + base.Start(); + + globalWaypoints = new Vector3[localWaypoints.Length]; //set global waypoints so you actually go between + for (int i = 0; i < localWaypoints.Length; i++) //every local way point must be changed + { + globalWaypoints[i] = localWaypoints[i] + transform.position; + } + } + + void Update() + { + + UpdateRaycastOrigins(); //never changes + Vector3 velocity = move * Time.deltaTime; + + CalculatePassengerMovement(velocity); //Move the passangers + + MovePassengers(true);//Move + transform.Translate(velocity);//Trasnform + MovePassengers(false);//Dont move + } + + void MovePassengers(bool beforeMovePlatform) //before we move the platform + { + foreach (PassengerMovement passenger in passengerMovement) //for every movement + { + if (!passengerDictionary.ContainsKey(passenger.transform)) //if passanger not on + { + passengerDictionary.Add(passenger.transform, passenger.transform.GetComponent()); + } + + if (passenger.moveBeforePlatform == beforeMovePlatform) //we on + { + passengerDictionary[passenger.transform].Move(passenger.velocity, passenger.standingOnPlatform); + } + } + } + + void CalculatePassengerMovement(Vector3 velocity) //Refers to any controller 2d affected by the platform + { + HashSet movedPassengers = new HashSet(); //use because fast at adding things and checking whats contained + passengerMovement = new List(); + + float directionX = Mathf.Sign(velocity.x); //left/right + float directionY = Mathf.Sign(velocity.y); //up + + // Vertically moving platform + if (velocity.y != 0) + { + float rayLength = Mathf.Abs(velocity.y) + skinWidth; //ray length + + for (int i = 0; i < verticalRayCount; i++) //similar to controller2D + { + Vector2 rayOrigin = (directionY == -1) ? raycastOrigins.bottomLeft : raycastOrigins.topLeft; + rayOrigin += Vector2.right * (verticalRaySpacing * i); + RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.up * directionY, rayLength, passengerMask); + + if (hit) //there is a passenger on + { + if (!movedPassengers.Contains(hit.transform)) //if it doesnt contain hit. transform + { + movedPassengers.Add(hit.transform); //add to list so moved once per frame + float pushX = (directionY == 1) ? velocity.x : 0; //if its moving up, otherwise set to 0 + float pushY = velocity.y - (hit.distance - skinWidth) * directionY; //close distance + + passengerMovement.Add(new PassengerMovement(hit.transform, new Vector3(pushX, pushY), directionY == 1, true)); //update list + } + } + } + } + + // Horizontally moving platform + if (velocity.x != 0) + { + float rayLength = Mathf.Abs(velocity.x) + skinWidth; + + for (int i = 0; i < horizontalRayCount; i++) + { + Vector2 rayOrigin = (directionX == -1) ? raycastOrigins.bottomLeft : raycastOrigins.bottomRight; + rayOrigin += Vector2.up * (horizontalRaySpacing * i); + RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.right * directionX, rayLength, passengerMask); + + if (hit) + { + if (!movedPassengers.Contains(hit.transform)) + { + movedPassengers.Add(hit.transform); + float pushX = velocity.x - (hit.distance - skinWidth) * directionX; + float pushY = -skinWidth; + + passengerMovement.Add(new PassengerMovement(hit.transform, new Vector3(pushX, pushY), false, true)); //update list + } + } + } + } + + // Passenger on top of a horizontally or downward moving platform + if (directionY == -1 || velocity.y == 0 && velocity.x != 0) + { + float rayLength = skinWidth * 2; + + for (int i = 0; i < verticalRayCount; i++) + { + Vector2 rayOrigin = raycastOrigins.topLeft + Vector2.right * (verticalRaySpacing * i); //origin of rays + RaycastHit2D hit = Physics2D.Raycast(rayOrigin, Vector2.up, rayLength, passengerMask); //raycast hit + + if (hit) + { + if (!movedPassengers.Contains(hit.transform)) //passanger is on + { + movedPassengers.Add(hit.transform); + float pushX = velocity.x; + float pushY = velocity.y; + + passengerMovement.Add(new PassengerMovement(hit.transform, new Vector3(pushX, pushY),true , false)); //update list + } + } + } + } + } + + struct PassengerMovement //relevent info + { + public Transform transform; //transform of passenger + public Vector3 velocity; //desired velocity + public bool standingOnPlatform; //is he on plantform + public bool moveBeforePlatform; //move before platform? + + public PassengerMovement(Transform _transform, Vector3 _velocity, bool _standingOnPlatform, bool _moveBeforePlatform) + { + transform = _transform; + velocity = _velocity; + standingOnPlatform = _standingOnPlatform; + moveBeforePlatform = _moveBeforePlatform; + } + } + + void OnDrawGizmos() + { + if (localWaypoints != null) //only if its not equal to null + { + Gizmos.color = Color.red; + float size = .3f; //size we want to draw "gizmos" at + + for (int i = 0; i < localWaypoints.Length; i++) //iterate through each waypoints + { + Vector3 globalWaypointPos = (Application.isPlaying) ? globalWaypoints[i] : localWaypoints[i] + transform.position; //check if the games on first + Gizmos.DrawLine(globalWaypointPos - Vector3.up * size, globalWaypointPos + Vector3.up * size); + Gizmos.DrawLine(globalWaypointPos - Vector3.left * size, globalWaypointPos + Vector3.left * size); + } + } + } +} \ No newline at end of file diff --git a/Platformer/Assets/Scripts/Level 1/Player_Controller.cs.meta b/Platformer/Assets/Scripts/Raycast/PlatformController.cs.meta similarity index 83% rename from Platformer/Assets/Scripts/Level 1/Player_Controller.cs.meta rename to Platformer/Assets/Scripts/Raycast/PlatformController.cs.meta index 8dc9d13..e25595e 100644 --- a/Platformer/Assets/Scripts/Level 1/Player_Controller.cs.meta +++ b/Platformer/Assets/Scripts/Raycast/PlatformController.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b742c51ec22ca1d44b0b78d4bf07cd32 +guid: 2972f97baab0e18479470d5746e83b25 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Platformer/Assets/Scripts/Raycast/RaycastController.cs b/Platformer/Assets/Scripts/Raycast/RaycastController.cs new file mode 100644 index 0000000..35ba521 --- /dev/null +++ b/Platformer/Assets/Scripts/Raycast/RaycastController.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using System.Collections; + +[RequireComponent(typeof(BoxCollider2D))] +public class RaycastController : MonoBehaviour +{ + + public LayerMask collisionMask; //collison mask + + public const float skinWidth = .015f; //width + public int horizontalRayCount = 4; //how many rays horizontally + public int verticalRayCount = 4; //how many rays vertically + + [HideInInspector] + public float horizontalRaySpacing; //spacing horizontally + [HideInInspector] + public float verticalRaySpacing; //spacing vertically + + [HideInInspector] + public BoxCollider2D collider; //reference + public RaycastOrigins raycastOrigins; //reference + + public virtual void Start() + { + collider = GetComponent(); //get component + CalculateRaySpacing(); //never changes + } + + public void UpdateRaycastOrigins() + { + Bounds bounds = collider.bounds; //bounds reference + bounds.Expand(skinWidth * -2); //shrink + + raycastOrigins.bottomLeft = new Vector2(bounds.min.x, bounds.min.y); //bottom left + raycastOrigins.bottomRight = new Vector2(bounds.max.x, bounds.min.y); //bottom right + raycastOrigins.topLeft = new Vector2(bounds.min.x, bounds.max.y); //top left + raycastOrigins.topRight = new Vector2(bounds.max.x, bounds.max.y); //top right + } + + public void CalculateRaySpacing() //calculate space between rays + { + Bounds bounds = collider.bounds; //bounds + bounds.Expand(skinWidth * -2); //shrink + + horizontalRayCount = Mathf.Clamp(horizontalRayCount, 2, int.MaxValue); //horizontal count + verticalRayCount = Mathf.Clamp(verticalRayCount, 2, int.MaxValue); //vertical # + + horizontalRaySpacing = bounds.size.y / (horizontalRayCount - 1); //spacing + verticalRaySpacing = bounds.size.x / (verticalRayCount - 1);//spacing + } + + public struct RaycastOrigins //Vector twos + { + public Vector2 topLeft, topRight; + public Vector2 bottomLeft, bottomRight; + } +} \ No newline at end of file diff --git a/Platformer/Assets/Scripts/Raycast/RaycastController.cs.meta b/Platformer/Assets/Scripts/Raycast/RaycastController.cs.meta new file mode 100644 index 0000000..97b5360 --- /dev/null +++ b/Platformer/Assets/Scripts/Raycast/RaycastController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2036d71f98be0534286b0c8c9bad0b45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard.meta b/Platformer/Assets/World Build/Enemies/Evil Wizard.meta new file mode 100644 index 0000000..3a72249 --- /dev/null +++ b/Platformer/Assets/World Build/Enemies/Evil Wizard.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 296b2f9b3859e4a4c99a662124a5ea64 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/License.txt b/Platformer/Assets/World Build/Enemies/Evil Wizard/License.txt new file mode 100644 index 0000000..b0fffee --- /dev/null +++ b/Platformer/Assets/World Build/Enemies/Evil Wizard/License.txt @@ -0,0 +1,2 @@ +This pack - Evil Wizard Asset Pack is Creative Commons Zero (CC-0). +Can be used in commercial and non-commercial projects. \ No newline at end of file diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/License.txt.meta b/Platformer/Assets/World Build/Enemies/Evil Wizard/License.txt.meta new file mode 100644 index 0000000..7d9a13b --- /dev/null +++ b/Platformer/Assets/World Build/Enemies/Evil Wizard/License.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4a3459dca327009459f8b86494ee7645 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites.meta b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites.meta new file mode 100644 index 0000000..b40bb84 --- /dev/null +++ b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e2f42ff5c03e4c24f8b8c8b3b563281b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Attack.png b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Attack.png new file mode 100644 index 0000000000000000000000000000000000000000..533fe37cda9ee9e46e72287763cb0987a65fcfea GIT binary patch literal 6122 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 literal 0 HcmV?d00001 diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Attack.png.meta b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Attack.png.meta new file mode 100644 index 0000000..93a1d68 --- /dev/null +++ b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Attack.png.meta @@ -0,0 +1,719 @@ +fileFormatVersion: 2 +guid: f3fc7c9f5caae194892a86a73873fee8 +TextureImporter: + fileIDToRecycleName: + 21300000: Attack_0 + 21300002: Attack_1 + 21300004: Attack_2 + 21300006: Attack_3 + 21300008: Attack_4 + 21300010: Attack_5 + 21300012: Attack_6 + 21300014: Attack_7 + 21300016: Attack_8 + 21300018: Attack_9 + 21300020: Attack_10 + 21300022: Attack_11 + 21300024: Attack_12 + 21300026: Attack_13 + 21300028: Attack_14 + 21300030: Attack_15 + 21300032: Attack_16 + 21300034: Attack_17 + 21300036: Attack_18 + 21300038: Attack_19 + 21300040: Attack_20 + 21300042: Attack_21 + 21300044: Attack_22 + 21300046: Attack_23 + 21300048: Attack_24 + 21300050: Attack_25 + 21300052: Attack_26 + 21300054: Attack_27 + 21300056: Attack_28 + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Attack_0 + rect: + serializedVersion: 2 + x: 59 + y: 48 + width: 95 + height: 51 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: cbd933befba3a744198aed6aad7f44ec + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_1 + rect: + serializedVersion: 2 + x: 86 + y: 59 + width: 40 + height: 32 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 7c2ba22de7333f9498c8e8a80bde6e54 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_2 + rect: + serializedVersion: 2 + x: 121 + y: 76 + width: 15 + height: 14 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 9e464b1026e36d9439aa2a9909b4d9c5 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_3 + rect: + serializedVersion: 2 + x: 125 + y: 86 + width: 13 + height: 10 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: f49e55fcb01848b4fa1851b38ea30964 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_4 + rect: + serializedVersion: 2 + x: 209 + y: 49 + width: 80 + height: 50 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: df6936d97a2aafc49bd0831feade70f4 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_5 + rect: + serializedVersion: 2 + x: 359 + y: 49 + width: 90 + height: 50 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 0f783b9169092204596a5a54498e3ba2 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_6 + rect: + serializedVersion: 2 + x: 386 + y: 62 + width: 51 + height: 26 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: bf4eb6207a7593c43828505b29826425 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_7 + rect: + serializedVersion: 2 + x: 509 + y: 49 + width: 76 + height: 50 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 89826e1a114e4ba49a53ee840d0527e4 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_8 + rect: + serializedVersion: 2 + x: 659 + y: 50 + width: 92 + height: 49 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 8e1f865cbb92d76418e498f0f21f0a7b + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_9 + rect: + serializedVersion: 2 + x: 686 + y: 59 + width: 40 + height: 29 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 81ad8e56433f1624e85093eeca498239 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_10 + rect: + serializedVersion: 2 + x: 721 + y: 76 + width: 15 + height: 14 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: e0ff14dc4072b724cac496e900807a0a + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_11 + rect: + serializedVersion: 2 + x: 725 + y: 86 + width: 13 + height: 10 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 3cf24d8a34ee3ca48aba96080492785a + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_12 + rect: + serializedVersion: 2 + x: 809 + y: 49 + width: 80 + height: 50 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 3a46ed515939f8e4fb388025e030de17 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_13 + rect: + serializedVersion: 2 + x: 959 + y: 49 + width: 90 + height: 50 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 1e1c8aef18e29204590a5b58909888cb + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_14 + rect: + serializedVersion: 2 + x: 986 + y: 62 + width: 51 + height: 26 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: db5d27f85df18924d8217f377c32d4f4 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_15 + rect: + serializedVersion: 2 + x: 1109 + y: 49 + width: 76 + height: 50 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 972ae3ed308e7b4419f90dad0504299d + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_16 + rect: + serializedVersion: 2 + x: 122 + y: 58 + width: 10 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 787ee18401e56354abe9c8ab4367e14c + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_17 + rect: + serializedVersion: 2 + x: 136 + y: 75 + width: 4 + height: 8 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 8b76a5ef12d85574fbb44143ac82e1bd + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_18 + rect: + serializedVersion: 2 + x: 281 + y: 73 + width: 8 + height: 12 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: ced86c60beb6fbd4399fe55d392a3bd3 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_19 + rect: + serializedVersion: 2 + x: 578 + y: 71 + width: 5 + height: 7 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 6aaea8b6465942e48ad971cdc1954052 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_20 + rect: + serializedVersion: 2 + x: 722 + y: 58 + width: 10 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: e0acd702bd6cb9e45afd36a0a184e280 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_21 + rect: + serializedVersion: 2 + x: 736 + y: 75 + width: 4 + height: 8 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: a5396111b08e2f949aabb5c32da1213a + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_22 + rect: + serializedVersion: 2 + x: 881 + y: 73 + width: 8 + height: 12 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 22d0bc4ed9ba8834481fcff2f4f74c43 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_23 + rect: + serializedVersion: 2 + x: 1178 + y: 71 + width: 5 + height: 7 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: f0a3c682eaff90c4db3e942acdeb797b + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_24 + rect: + serializedVersion: 2 + x: 280 + y: 56 + width: 9 + height: 11 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: e7bf8e18d0f25b345a39cb8879730ff9 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_25 + rect: + serializedVersion: 2 + x: 418 + y: 59 + width: 10 + height: 10 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 4df760bc5851ffe45b702209af0220a7 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_26 + rect: + serializedVersion: 2 + x: 880 + y: 56 + width: 9 + height: 11 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 586fd9b2a8266184e860b902b05b73f2 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_27 + rect: + serializedVersion: 2 + x: 1018 + y: 59 + width: 10 + height: 10 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: b3e953fae9afa6943866fa825caa8a1c + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Attack_28 + rect: + serializedVersion: 2 + x: 617 + y: 16 + width: 98 + height: 15 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 405c6dcbbdb305642a1e31f4f3a78280 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: b99ef71aa3a478648880f6bfeca543a6 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Death.png b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Death.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9ab693c7a3f9381762b7985061440727511892 GIT binary patch literal 5204 zcmdT|`8!na{~m9ZEval-qU>9VLX08Vk}Wht#umvo=uM1_p%ltmmP!cOhr!sHtYyi* zZ)2(K%#wzg7{>SXy{^x1pMT(UuIrrZoadb9Irr;1ulv4V&v|vn!kC*=m=gp7ahu#S zum*wtAp_@c*-rq+XH;%W5QtC2#6a(ENG56C*)wx0y?cAH%m!)uAxJT!$JHDDsV_0Z z=+++zm5%&z^?*u#XTGC$^E)?c5E_w{GD=FZQB~@^dzXtz5=GMOrt$C!tb-D6S*jzT zy7Rn)^D!>Ui8!TOzm4o}J6ys_HQoMB?ELdNaCL$)C=QQUI}E?!c}@5mFXO?g#*p@! z=2-yK|Md10>LCa9fbHvmKu-&(f{JLi{}1Qoi^M`s3<(5E)l?w22~UmOz5fA@vEBCr z9+NhD#5VaJxUa7Z27yNOfveLIre?VULjN#lRU7pWP%J>dxSU^NeBWcNgYK?QfjYE6 zId-_T7S_^lYVIFzAa%bk_T9k@5;sIwD7>bB$Dl`8>QN z)&X0LQ=8W1--pcd_kQvA_Id<&V{R=WJaw}^#?2)0;{)wfOTD=N0lgJ(cbs`mjt+{z zo0aH^t#}kD67|e57UJseH^Gt@`;6^wI4Ag=233ZM!8gE_XXj4)5l-&>D^oU9gm0!` z{X-{E$^BFGkN#ENKq$+lU2eXdoOh1vv zW^zi3qNUxlrRInI8h=2+rSe#3(^9F=Ov>y^8Zu6J2wWLZ_D#aAEo-TDLa$cCnj7JP!?)SF0kouB z6l%;jq~2G>Mz`N=?{$FUZ?m`e2nQrs-qI=E zzAyYJ4BH(zakz@Rf4JCMw`p&l(B$oHw#lYT?PxmG4lkWR_-G5BOGbnQ@HF9a=bij5 zD;_-GoQ0XWAKo|G9Vo&l9QGi=^`jP^Nis5U7Ldf5xomCid}V*JlvIx8V7E;_`8w>j z1F>8D+7_^zCSMk7{T@XdDSsB(N*L^~%dj!WSja%v(EgPX3Y2(c8MXEzLUJO6V2`2P-7Frb8>^8jfU+!5JIJ6Jol=$da<8@{7FE!+eVZX zeQ!M^adn$l)!92Um?r+pQGD8+#d#$ipMUX0tf3wIDF7K)ipmtpOcftXF|kp9=f-t3 z+FZ3_t_3>)h0Z!a3%;;L?=YK!LL=t2vOZ)@{9x7p+xmQWR~mYqgS6sH?T&5Coe!IE znQH?&GV7wZ;n>2`LYcLuH@K3_VRD_v%oZ`O-MO~4diqG{MzQN`JqXlSLF93Xg{X^C zlQ!azlbd;4*%*cN@sgQ)8+x7SKq&M(<brc-S0#qR*%1>1x6Cf3lQ!{a^=4`8J@ zl3nuSnzi@HMy8!50%*{r(kY=+q^8zRyf!*4MXID0GB6wa`Y%=X-5@Fir&`gZO9ge| zETFf>QsS?Nq|Q3^oZ_Ou7Td(Q#T(E3K?z?bjc4E)yJ3{L1-Wl;aPpU?QWRm?IfBu8 zKOB?mvpb^cBjqe=4zuzibMwRD$cIMBJELEZZ7D>GN#DX7M!AZ;n;RH<5e%|(>}~3X z#EXO@E>r=rOlZ8G`8xZs%JA_K$)VLd!dTMHhReuABGjHRhD#rRpHKYIm}wTuwc&zp z)(msG1*Fc3nQB$;;jd>GfpDUR6Gi>L>!jRzU#b7&;DB;WV61*HoD*c%+}qL(={M!& zRe?XLZ|}jj)C*PT2vc|{V^g}jm$Q#Hl%;Vh{9IF$lOYc8QcS3EyIa!kaNH^JbIFs~ z6scxiup(so-AQe0Vf8E$pe45ah3t7}M+?gKOC4)7se=SS&StwU!KUbj9 z=)mOW%32e44ZInyi$S0^$yh|^{0i(A*Zk$RSQ-b#HAdlFRcE2 zt0k@6hxmZf`(|l+I)7b^Fs&i&{v7qCAZy_s3oW4KOUr2p*)6`WTw0zUm6PRiZO=tK zs&D?-C9ig)b;AZc;J+QKce9@*h)A2n_ziC8>V(<)%Gw9fb_0)xD?A@g3`6`8t~gxG zY&*{9Dh@wjS#UHB-YHJyCX%~6rt)3{qr^i#vsQ{;PuCH|swS`MTBcup^+Hpm&yj19 zfV`DF9{edtnk>-!qSbijgxLNoE6mtN<9o(M_YV9DIm`2^5gYSY%yB4^5mb^p@7Vp< zsBce<=&-w3y-29ujR`*0kpHtBp#AE?*Yk(#F#Py*X*JKs@dXlEFJ^YgXZ=8JLI!!l z!WG1so4{!*k1t%6lJ`&^oD7-cTJsB`h)gflK1`bx9-FhqLbCF3V;dvJjRZNH`?6G{ z=9{q{kzF&lXY`ln+QfFX1vX+)!xyFMtlhKM_m#88r+c{3%bCfXsS3`XJhLacwND<& zc%p)D3@?AOzKJrniSqI*aeCx9JT8(d3qQjRURIQ=Ns2eOx@b6Zu!JDlQ!8@iVuIy6 z`00B?HUR#t&-EMV!>9RXArwqm{6VR9s*JO8CF=SZKqWV-<9^p(KfP;Jx}*Wkf8$*J znxp;oMmaeI8y1Sfw=?BQrb8H56K+GA|RApYZUOWmKN1XHgc)kDvg>g@;M zL#KM3(LAN)yt7tH;6YgOzK$oYgE1zeu5`{r1p4MM`&-MWQWFHdobhN1?DVJ}l4DJ7 z&^daqBct^FKI9PVF9hCQx`Qg5V`^AJZ}sYi^T~Aq08+IAt|>KW)ZbN{)KoCpC!Z?W zpRy)`N6<{Wz7A%B>626VOf%v70t(iHOk!Yr1CM(J8H%w~DBV)*}o(-*%Jt!s{VG5o}VXFRRfoE4@w>j`E{XlUmUy=G5$>{{3z+ zhoK#mcvr|PR-j$=bg<5i;h>_iKpbGQT_0Ioe9JMt+TmFEnj@V_EPL$I!{x+QiZRRO zl&3f?0p>3dxG1m9|46J8P_vyJv?fMEXwKIk&rMN#MGD2^GqmeaeGAAky|1%i*TR;Kf&;9UZke=7ip*9=1C{lB-&0*BhCZX5 z0e`G1FDY9?@WvMwu`1>n6OQZw$>c`Ny|2Hyxk#Lw>i}z7ttR3~vE4!5!Rke4kAA=M zZORaam*DFa3{)Ek2_>{DFyovZr(T}1&sl<6S$|xIz_-#SBoyXt|7kPP5XYAiXHm4~ z`d70mBVvC!MI&CfW}00NnG4_{S3MU&<|cRZa_kE8C=OL~jkn zBo;Zj8nzhG_O1`6PrB$_*F5g$x*Ise_A)537t*6RrfOsEnREp?Fs-&s2FI&LqS*0z zYT^$YB*p2D=ObL|Culjc*L-AtqQm5z>=a?P?gcVMMQWN5EE47XT8cZXweYA#vna6H zTsyq|YBpJ&EE-JT?mj^SM4Q9=QZ0pVmeb4jhEM#Z&^^o9pdq%(XO2I^Ko1(WIECK$ zrpd#G392-f^(LlA6q$dLGa_hyQG!()a}#TaW<`wy4A2N2x466?93V|mgQWmv5=yTL zD5cb|)LXt_#uH-7o?@E7_<3#yp6oxeYo5L~xcb&x9-?6KVL!KqF_o9ebJ|KznVs}l z7jTnfNEegiq=HH;?EVBT3>wnL$w_p5j{z2hI`kRHC!vyGwt57ogcY&#H2P?`C9%y zU*~m9*|?c^e6WyqGIl$}!evNEL-@kNy;2P%eQR$)P})RxaXnS4A{$*9aT{3IJkyO^ z-zyzdTrk?V));?xH4<-WS35Qsp!^to;iQ`}Zknjcr(PrI-MJ|;ox=MaP8j1mf9EXy z&P~Ou-ZhJia~Tx-Ux7?>Y+bevG3;q)>zWRDpY)5lfpNtZI7#TAilI>bPOj7r3Dx#-2O3P#kh%M*d^u9Erh}cTL1nTOqA4P;-otef>&pA@{!0XRkM`EKo`2@=I`+wXH?k|oQFFvnfPYjjH zH;#kUF3i7MYDsa^M?o!D+oX~D=+D(Kwd2xTAQ?q*2-NY>5`QmAB@uKJ;7S7oI}ew=re5!T z8M{0B)gWFi=H_MDlrHg6s`>V#)^6r2&rMH^+&(GIkzT(XcD|-gUHjifybi)V3#ju= z_X8aVE~N)&)_%VD;rl6&&z*J!8NKs{Rm%Se)y5Q5`Vupe^YQk3yY7~&Bu~s0qSdkg i>0ej>1^k7rBbMLO%?*#zt3Up|ZDMF)P=3=T^8Wx|V8`zO literal 0 HcmV?d00001 diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Death.png.meta b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Death.png.meta new file mode 100644 index 0000000..da69f91 --- /dev/null +++ b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Death.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: e1fc17c7cfcc876478a46dbe411a96d0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: ca38b21ebe4de27478fde1075fa72ee2 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Idle.png b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Idle.png new file mode 100644 index 0000000000000000000000000000000000000000..0abf6369cd5c4c94a5d02c753e62937499630a5f GIT binary patch literal 5046 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 literal 0 HcmV?d00001 diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Idle.png.meta b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Idle.png.meta new file mode 100644 index 0000000..21bf9bd --- /dev/null +++ b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Idle.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 2c293c531536e2e46bd1438b15dffb7d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 6a6b0de2ee206b24e9978dd721cf0acd + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Move.png b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Move.png new file mode 100644 index 0000000000000000000000000000000000000000..9998ea0bd06552bf43b92dd58488c94afd84a7af GIT binary patch literal 5464 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 literal 0 HcmV?d00001 diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Move.png.meta b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Move.png.meta new file mode 100644 index 0000000..ea52b71 --- /dev/null +++ b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Move.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 580254f1ce4e0564aad001162229a2e3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: d470e25361f5f2043a52d720fadee3ff + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Take Hit.png b/Platformer/Assets/World Build/Enemies/Evil Wizard/Sprites/Take Hit.png new file mode 100644 index 0000000000000000000000000000000000000000..1b48cee0ffc4606dc489c676549254aef718ea55 GIT binary patch literal 3823 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