aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'nGJ2019/Assets')
-rw-r--r--nGJ2019/Assets/Scripts/DragonMovement.cs677
1 files changed, 339 insertions, 338 deletions
diff --git a/nGJ2019/Assets/Scripts/DragonMovement.cs b/nGJ2019/Assets/Scripts/DragonMovement.cs
index 850ea2a..69be151 100644
--- a/nGJ2019/Assets/Scripts/DragonMovement.cs
+++ b/nGJ2019/Assets/Scripts/DragonMovement.cs
@@ -5,342 +5,343 @@ using UnityEngine.SceneManagement;
public class DragonMovement : MonoBehaviour
{
- public List<Renderer> solids;
-
- public GameObject hurtPrefab;
-
- public float horizontalSpeed = 0.1f;
- public float verticalSpeed = 0.2f;
-
- private Vector3 direcV = Vector3.zero;
- private Vector3 deltaV = Vector3.zero;
-
- public float horizontalBound = 6f;
- public float verticalBound = 4f;
-
- private float slitherPhase = 0;
-
- public HealthBar healthBar;
-
- private float hurtCooldown = 0;
-
- private SwarmSystem swarm;
-
- private enum State {normal, swirl, slim, spread};
- private State state = State.normal;
-
- private void applyMotion(Vector3 direc)
- {
- direcV = direcV + direc;
- }
-
- private void moveUp()
- {
- applyMotion(Vector3.up * verticalSpeed);
- }
-
- private void moveDown()
- {
- applyMotion(Vector3.down * verticalSpeed);
- }
-
- private void moveLeft()
- {
- applyMotion(Vector3.left * horizontalSpeed);
- }
-
- private void moveRight()
- {
- applyMotion(Vector3.right * horizontalSpeed);
- }
-
- private void turnVisible(bool visible)
- {
- foreach(Renderer solid in solids)
- {
- solid.enabled = visible;
- }
- }
-
- private IEnumerator transformSlim()
- {
- while(state == State.slim && swarm.Collapse < 0.8f)
- {
- swarm.Collapse += 0.05f;
- yield return new WaitForSeconds(0.01f);
- }
- }
-
- private IEnumerator transformSpread()
- {
- while(state == State.spread && swarm.Noise < 3)
- {
- swarm.Noise += 0.05f;
- yield return new WaitForSeconds(0.01f);
- }
- }
-
- private IEnumerator transformAntiSlim()
- {
- while(state == State.normal && swarm.Collapse > 0)
- {
- swarm.Collapse -= 0.07f;
- yield return new WaitForSeconds(0.01f);
- }
- if(state == State.normal)
- {
- turnVisible(true);
- swarm.activate(false);
- }
- }
-
- private IEnumerator transformAntiSpread()
- {
- while(state == State.normal && swarm.Noise > 0)
- {
- swarm.Noise -= 0.12f;
- yield return new WaitForSeconds(0.01f);
- }
- if(state == State.normal)
- {
- turnVisible(true);
- swarm.activate(false);
- }
- }
-
- private void turnSwirl()
- {
- resetTurn();
- turnVisible(false);
- swarm.activate(true);
- state = State.swirl;
- }
-
- private void turnSlim()
- {
- resetTurn();
- turnVisible(false);
- swarm.activate(true);
- state = State.slim;
- StartCoroutine("transformSlim");
- }
-
- private void turnSpread()
- {
- resetTurn();
- turnVisible(false);
- swarm.activate(true);
- state = State.spread;
- StartCoroutine("transformSpread");
- }
-
- private void turnAntiSwirl()
- {
- if(state == State.swirl)
- {
- state = State.normal;
- turnVisible(true);
- swarm.activate(false);
- }
- }
-
- private void turnAntiSlim()
- {
- if(state == State.slim)
- {
- state = State.normal;
- StartCoroutine("transformAntiSlim");
- }
- }
-
- private void turnAntiSpread()
- {
- if(state == State.spread)
- {
- state = State.normal;
- StartCoroutine("transformAntiSpread");
- }
- }
-
- private void resetTurn()
- {
- swarm.Collapse = 0;
- swarm.Noise = 0;
- }
-
- void Start()
- {
- swarm = GetComponent<SwarmSystem>();
- swarm.activate(false);
- }
-
- void FixedUpdate()
- {
- transform.Translate(deltaV);
- deltaV = 0.6f*deltaV + 0.4f*direcV;
- direcV = Vector3.zero;
-
- if(transform.position.y > verticalBound)
- transform.position = new Vector3(transform.position.x, verticalBound, transform.position.z);
-
- if(transform.position.y < -verticalBound)
- transform.position = new Vector3(transform.position.x, -verticalBound, transform.position.z);
-
- if(transform.position.x < -horizontalBound)
- transform.position = new Vector3(-horizontalBound, transform.position.y, transform.position.z);
-
- if(transform.position.x > horizontalBound)
- transform.position = new Vector3(horizontalBound, transform.position.y, transform.position.z);
-
- slitherPhase += 0.1f;
- foreach(Transform t in swarm.meshRender.bones)
- {
- t.Translate(new Vector3(0, Mathf.Sin(t.position.x-transform.position.x+slitherPhase)*0.002f, 0), Space.World);
- }
- foreach(Renderer r in solids)
- {
- r.transform.Translate(new Vector3(0, Mathf.Sin(r.transform.position.x-transform.position.x+slitherPhase+0.2f)*-0.008f, 0), Space.World);
- }
- }
-
- void Update()
- {
- if(hurtCooldown > 0)
- hurtCooldown -= Time.deltaTime;
-
- if(healthBar.health <= 0)
- return;
-
- // keyboard scheme
- if(Input.GetKey("w"))
- moveUp();
- if(Input.GetKey("a"))
- moveLeft();
- if(Input.GetKey("s"))
- moveDown();
- if(Input.GetKey("d"))
- moveRight();
-
- if(Input.GetKeyDown("i"))
- turnSwirl();
- if(Input.GetKeyUp("i"))
- turnAntiSwirl();
-
- if(Input.GetKeyDown("j"))
- turnSlim();
- if(Input.GetKeyUp("j"))
- turnAntiSlim();
-
- if(Input.GetKeyDown("k"))
- turnSpread();
- if(Input.GetKeyUp("k"))
- turnAntiSpread();
-
-
- // xbox scheme
- if(Input.GetAxis("JoystickY") < -0.5f)
- moveUp();
- if(Input.GetAxis("JoystickX") < -0.5f)
- moveLeft();
- if(Input.GetAxis("JoystickY") > 0.5f)
- moveDown();
- if(Input.GetAxis("JoystickX") > 0.5f)
- moveRight();
-
- if(Input.GetButtonDown("X"))
- turnSwirl();
- if(Input.GetButtonUp("X"))
- turnAntiSwirl();
-
- if(Input.GetButtonDown("A"))
- turnSlim();
- if(Input.GetButtonUp("A"))
- turnAntiSlim();
-
- if(Input.GetButtonDown("Y"))
- turnSpread();
- if(Input.GetButtonUp("Y"))
- turnAntiSpread();
- }
-
- void OnDrawGizmosSelected()
- {
- Gizmos.color = Color.cyan;
- Gizmos.DrawWireCube(Vector3.zero, new Vector3(2*horizontalBound, 2*verticalBound, 0));
- }
-
- private IEnumerator makeGoAway(Transform t, float spread)
- {
- Vector3 delta = Random.onUnitSphere * Random.Range(0.03f, 0.1f);
- Vector3 start = t.position;
- while((start-t.position).magnitude < spread)
- {
- t.Translate(delta);
- yield return new WaitForSeconds(0.01f);
- }
- Destroy(t.gameObject);
- }
-
- private IEnumerator eventuallyStartOver()
- {
- for(int i=0; i<400; i++)
- yield return new WaitForSeconds(0.01f);
- SceneManager.LoadScene("Titlescreen");
- }
-
- private void getHurt()
- {
- if(hurtCooldown <= 0)
- {
- GetComponent<AudioSource>().Play();
- healthBar.health--;
- if(healthBar.health == 0)
- {
- for(int i=0; i<200; i++)
- {
- Transform t = ((GameObject)Instantiate(hurtPrefab, transform.position + swarm.collapseCenter, Quaternion.identity)).transform;
- StartCoroutine(makeGoAway(t, 6));
- }
- StartCoroutine(eventuallyStartOver());
- turnVisible(false);
- swarm.activate(false);
- }
- else if(healthBar.health > 0)
- {
- hurtCooldown = 1.5f;
-
- for(int i=0; i<30; i++)
- {
- Transform t = ((GameObject)Instantiate(hurtPrefab, transform.position + swarm.collapseCenter, Quaternion.identity)).transform;
- StartCoroutine(makeGoAway(t, 3));
- }
- }
- }
- }
-
- void OnTriggerEnter(Collider other)
- {
- EnemyCollider enemy = other.gameObject.GetComponent<EnemyCollider>();
- if(enemy != null)
- {
- switch(enemy.type)
- {
- case ObstacleType.caveWalls:
- case ObstacleType.rockTop:
- case ObstacleType.rockBottom:
- case ObstacleType.rockJaws:
- getHurt();
- break;
- case ObstacleType.narrowPassage:
- if(state != State.slim)
- getHurt();
- break;
- case ObstacleType.net:
- if(state != State.spread)
- getHurt();
- break;
- }
- }
- }
-
+ public List<Renderer> solids;
+
+ public GameObject hurtPrefab;
+
+ public float horizontalSpeed = 0.1f;
+ public float verticalSpeed = 0.2f;
+
+ private Vector3 direcV = Vector3.zero;
+ private Vector3 deltaV = Vector3.zero;
+
+ public float horizontalBound = 6f;
+ public float verticalBound = 4f;
+
+ private float slitherPhase = 0;
+
+ public HealthBar healthBar;
+
+ private float hurtCooldown = 0;
+
+ private SwarmSystem swarm;
+
+ private enum State { normal, swirl, slim, spread };
+ private State state = State.normal;
+
+ private void applyMotion(Vector3 direc)
+ {
+ direcV = direcV + direc;
+ }
+
+ private void moveUp()
+ {
+ applyMotion(Vector3.up * verticalSpeed);
+ }
+
+ private void moveDown()
+ {
+ applyMotion(Vector3.down * verticalSpeed);
+ }
+
+ private void moveLeft()
+ {
+ applyMotion(Vector3.left * horizontalSpeed);
+ }
+
+ private void moveRight()
+ {
+ applyMotion(Vector3.right * horizontalSpeed);
+ }
+
+ private void turnVisible(bool visible)
+ {
+ foreach (Renderer solid in solids)
+ {
+ solid.enabled = visible;
+ }
+ }
+
+ private IEnumerator transformSlim()
+ {
+ while (state == State.slim && swarm.Collapse < 0.8f)
+ {
+ swarm.Collapse += 0.05f;
+ yield return new WaitForSeconds(0.01f);
+ }
+ }
+
+ private IEnumerator transformSpread()
+ {
+ while (state == State.spread && swarm.Noise < 3)
+ {
+ swarm.Noise += 0.05f;
+ yield return new WaitForSeconds(0.01f);
+ }
+ }
+
+ private IEnumerator transformAntiSlim()
+ {
+ while (state == State.normal && swarm.Collapse > 0)
+ {
+ swarm.Collapse -= 0.07f;
+ yield return new WaitForSeconds(0.01f);
+ }
+ if (state == State.normal)
+ {
+ turnVisible(true);
+ swarm.activate(false);
+ }
+ }
+
+ private IEnumerator transformAntiSpread()
+ {
+ while (state == State.normal && swarm.Noise > 0)
+ {
+ swarm.Noise -= 0.12f;
+ yield return new WaitForSeconds(0.01f);
+ }
+ if (state == State.normal)
+ {
+ turnVisible(true);
+ swarm.activate(false);
+ }
+ }
+
+ private void turnSwirl()
+ {
+ resetTurn();
+ turnVisible(false);
+ swarm.activate(true);
+ state = State.swirl;
+ }
+
+ private void turnSlim()
+ {
+ resetTurn();
+ turnVisible(false);
+ swarm.activate(true);
+ state = State.slim;
+ StartCoroutine("transformSlim");
+ }
+
+ private void turnSpread()
+ {
+ resetTurn();
+ turnVisible(false);
+ swarm.activate(true);
+ state = State.spread;
+ StartCoroutine("transformSpread");
+ }
+
+ private void turnAntiSwirl()
+ {
+ if (state == State.swirl)
+ {
+ state = State.normal;
+ turnVisible(true);
+ swarm.activate(false);
+ }
+ }
+
+ private void turnAntiSlim()
+ {
+ if (state == State.slim)
+ {
+ state = State.normal;
+ StartCoroutine("transformAntiSlim");
+ }
+ }
+
+ private void turnAntiSpread()
+ {
+ if (state == State.spread)
+ {
+ state = State.normal;
+ StartCoroutine("transformAntiSpread");
+ }
+ }
+
+ private void resetTurn()
+ {
+ swarm.Collapse = 0;
+ swarm.Noise = 0;
+ }
+
+ void Start()
+ {
+ swarm = GetComponent<SwarmSystem>();
+ swarm.activate(false);
+ }
+
+ void FixedUpdate()
+ {
+ transform.Translate(deltaV);
+ deltaV = 0.6f * deltaV + 0.4f * direcV;
+ direcV = Vector3.zero;
+
+ if (transform.position.y > verticalBound)
+ transform.position = new Vector3(transform.position.x, verticalBound, transform.position.z);
+
+ if (transform.position.y < -verticalBound)
+ transform.position = new Vector3(transform.position.x, -verticalBound, transform.position.z);
+
+ if (transform.position.x < -horizontalBound)
+ transform.position = new Vector3(-horizontalBound, transform.position.y, transform.position.z);
+
+ if (transform.position.x > horizontalBound)
+ transform.position = new Vector3(horizontalBound, transform.position.y, transform.position.z);
+
+ slitherPhase += 0.1f;
+ foreach (Transform t in swarm.meshRender.bones)
+ {
+ t.Translate(new Vector3(0, Mathf.Sin(t.position.x - transform.position.x + slitherPhase) * 0.002f, 0), Space.World);
+ }
+ foreach (Renderer r in solids)
+ {
+ r.transform.Translate(new Vector3(0, Mathf.Sin(r.transform.position.x - transform.position.x + slitherPhase + 0.2f) * -0.008f, 0), Space.World);
+ }
+ }
+
+ void Update()
+ {
+ if (hurtCooldown > 0)
+ hurtCooldown -= Time.deltaTime;
+
+ if (healthBar.health <= 0)
+ return;
+
+ // keyboard scheme
+ if (Input.GetKey("w"))
+ moveUp();
+ if (Input.GetKey("a"))
+ moveLeft();
+ if (Input.GetKey("s"))
+ moveDown();
+ if (Input.GetKey("d"))
+ moveRight();
+
+ if (Input.GetKeyDown("i"))
+ turnSwirl();
+ if (Input.GetKeyUp("i"))
+ turnAntiSwirl();
+
+ if (Input.GetKeyDown("j"))
+ turnSlim();
+ if (Input.GetKeyUp("j"))
+ turnAntiSlim();
+
+ if (Input.GetKeyDown("k"))
+ turnSpread();
+ if (Input.GetKeyUp("k"))
+ turnAntiSpread();
+
+
+ // xbox scheme
+ if (Input.GetAxis("JoystickY") < -0.5f)
+ moveUp();
+ if (Input.GetAxis("JoystickX") < -0.5f)
+ moveLeft();
+ if (Input.GetAxis("JoystickY") > 0.5f)
+ moveDown();
+ if (Input.GetAxis("JoystickX") > 0.5f)
+ moveRight();
+
+ if (Input.GetButtonDown("X"))
+ turnSwirl();
+ if (Input.GetButtonUp("X"))
+ turnAntiSwirl();
+
+ if (Input.GetButtonDown("A"))
+ turnSlim();
+ if (Input.GetButtonUp("A"))
+ turnAntiSlim();
+
+ if (Input.GetButtonDown("Y"))
+ turnSpread();
+ if (Input.GetButtonUp("Y"))
+ turnAntiSpread();
+ }
+
+ void OnDrawGizmosSelected()
+ {
+ Gizmos.color = Color.cyan;
+ Gizmos.DrawWireCube(Vector3.zero, new Vector3(2 * horizontalBound, 2 * verticalBound, 0));
+ }
+
+ private IEnumerator makeGoAway(Transform t, float spread)
+ {
+ Vector3 delta = Random.onUnitSphere * Random.Range(0.03f, 0.1f);
+ Vector3 start = t.position;
+ while ((start - t.position).magnitude < spread)
+ {
+ t.Translate(delta);
+ yield return new WaitForSeconds(0.01f);
+ }
+ Destroy(t.gameObject);
+ }
+
+ private IEnumerator eventuallyStartOver()
+ {
+ for (int i = 0; i < 400; i++)
+ yield return new WaitForSeconds(0.01f);
+ SceneManager.LoadScene("Titlescreen");
+ }
+
+ private void getHurt()
+ {
+ if (hurtCooldown <= 0)
+ {
+ healthBar.health--;
+ if (healthBar.health == 0)
+ {
+ for (int i = 0; i < 200; i++)
+ {
+ Transform t = ((GameObject)Instantiate(hurtPrefab, transform.position + swarm.collapseCenter, Quaternion.identity)).transform;
+ StartCoroutine(makeGoAway(t, 6));
+ }
+ StartCoroutine(eventuallyStartOver());
+ turnVisible(false);
+ swarm.activate(false);
+ GetComponent<AudioSource>().Play();
+ }
+ else if (healthBar.health > 0)
+ {
+ hurtCooldown = 1.5f;
+
+ for (int i = 0; i < 30; i++)
+ {
+ Transform t = ((GameObject)Instantiate(hurtPrefab, transform.position + swarm.collapseCenter, Quaternion.identity)).transform;
+ StartCoroutine(makeGoAway(t, 3));
+ }
+ GetComponent<AudioSource>().Play();
+ }
+ }
+ }
+
+ void OnTriggerEnter(Collider other)
+ {
+ EnemyCollider enemy = other.gameObject.GetComponent<EnemyCollider>();
+ if (enemy != null)
+ {
+ switch (enemy.type)
+ {
+ case ObstacleType.caveWalls:
+ case ObstacleType.rockTop:
+ case ObstacleType.rockBottom:
+ case ObstacleType.rockJaws:
+ getHurt();
+ break;
+ case ObstacleType.narrowPassage:
+ if (state != State.slim)
+ getHurt();
+ break;
+ case ObstacleType.net:
+ if (state != State.spread)
+ getHurt();
+ break;
+ }
+ }
+ }
+
} \ No newline at end of file