diff options
Diffstat (limited to 'marching/Assets/Scripts')
20 files changed, 465 insertions, 4 deletions
diff --git a/marching/Assets/Scripts/EntityBase.cs b/marching/Assets/Scripts/EntityBase.cs new file mode 100644 index 0000000..c1beb42 --- /dev/null +++ b/marching/Assets/Scripts/EntityBase.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class EntityBase : MonoBehaviour +{ + public SpriteRenderer m_Shadow; + + private SpriteRenderer m_SpriteRenderer; + + protected virtual void Awake() + { + m_SpriteRenderer = GetComponent<SpriteRenderer>(); + + GameObject shadow = new GameObject("shadow"); + shadow.transform.parent = transform; + shadow.transform.localPosition = Vector3.zero; + shadow.transform.localScale = new Vector3(1, 0.5f, 1); + SpriteRenderer sr = shadow.AddComponent<SpriteRenderer>(); + sr.material = new Material(Shader.Find("UI/SpriteSkewShader")); + sr.material.SetFloat("_HorizontalSkew", 0.4f); + sr.color = new Color(0, 0, 0, 0.4f); + sr.sortingOrder = short.MinValue; + m_Shadow = sr; + } + + protected virtual void Update() + { + if (m_SpriteRenderer != null) + { + float y = transform.position.y; + int order = -(int)(y * 100); + if (order != m_SpriteRenderer.sortingOrder) + { + m_SpriteRenderer.sortingOrder = order; + } + } + } + + protected virtual void LateUpdate() + { + if (m_Shadow != null) + { + m_Shadow.sprite = m_SpriteRenderer.sprite; + m_Shadow.flipX = m_SpriteRenderer.flipX; + } + } + +} diff --git a/marching/Assets/Scripts/EntityBase.cs.meta b/marching/Assets/Scripts/EntityBase.cs.meta new file mode 100644 index 0000000..bea4770 --- /dev/null +++ b/marching/Assets/Scripts/EntityBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cba851b7bdff1446b87fa2ce86ea799 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Items.meta b/marching/Assets/Scripts/Items.meta new file mode 100644 index 0000000..240e859 --- /dev/null +++ b/marching/Assets/Scripts/Items.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9dd7c45b04c11bb41bb362f89e93c0d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Items/ItemBase.cs b/marching/Assets/Scripts/Items/ItemBase.cs new file mode 100644 index 0000000..98f3c2a --- /dev/null +++ b/marching/Assets/Scripts/Items/ItemBase.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ItemBase : EntityBase +{ + protected virtual void Awake() + { + base.Awake(); + } + + protected virtual void Update() + { + base.Update(); + } + + protected virtual void LateUpdate() + { + base.LateUpdate(); + } + +} diff --git a/marching/Assets/Scripts/Items/ItemBase.cs.meta b/marching/Assets/Scripts/Items/ItemBase.cs.meta new file mode 100644 index 0000000..0893db8 --- /dev/null +++ b/marching/Assets/Scripts/Items/ItemBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbf68306c31144f44a34335479353692 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/ProjectileBase.cs b/marching/Assets/Scripts/ProjectileBase.cs new file mode 100644 index 0000000..5721c58 --- /dev/null +++ b/marching/Assets/Scripts/ProjectileBase.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ProjectileBase : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/marching/Assets/Scripts/ProjectileBase.cs.meta b/marching/Assets/Scripts/ProjectileBase.cs.meta new file mode 100644 index 0000000..92b6448 --- /dev/null +++ b/marching/Assets/Scripts/ProjectileBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74df58658557802489ed9f3e15541e6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Projectiles.meta b/marching/Assets/Scripts/Projectiles.meta new file mode 100644 index 0000000..20b505d --- /dev/null +++ b/marching/Assets/Scripts/Projectiles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16b65d64de8db1740a3397412410487c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Projectiles/BladeScript.cs b/marching/Assets/Scripts/Projectiles/BladeScript.cs new file mode 100644 index 0000000..f5f613c --- /dev/null +++ b/marching/Assets/Scripts/Projectiles/BladeScript.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class BladeScript : ProjectileBase +{ + [NonSerialized] public float life; + + + private SpriteRenderer sr + { + get + { + return this.gameObject.GetComponent<SpriteRenderer>(); + } + } + + public void Start() + { + Invoke("DestroySelf", life); + } + + void DestroySelf() + { + Destroy(this.gameObject); + } + + public void Update() + { + Color c = sr.color; + c.a *= 0.99f; + sr.color = c; + } + + public void SetFlip(bool flip) + { + sr.flipX = flip; + } + +} diff --git a/marching/Assets/Scripts/Projectiles/BladeScript.cs.meta b/marching/Assets/Scripts/Projectiles/BladeScript.cs.meta new file mode 100644 index 0000000..11f43ed --- /dev/null +++ b/marching/Assets/Scripts/Projectiles/BladeScript.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4c0b0adacc6e3148aab9ce0f1c0cca1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Unit.meta b/marching/Assets/Scripts/Unit.meta new file mode 100644 index 0000000..27611bc --- /dev/null +++ b/marching/Assets/Scripts/Unit.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f7d86c9dd803498419020ec35ef24b6a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Unit/Characters.meta b/marching/Assets/Scripts/Unit/Characters.meta new file mode 100644 index 0000000..3fdf467 --- /dev/null +++ b/marching/Assets/Scripts/Unit/Characters.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8cf6de6efdd45544187236b496a10b60 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Unit/Characters/Samurai.meta b/marching/Assets/Scripts/Unit/Characters/Samurai.meta new file mode 100644 index 0000000..0900ff5 --- /dev/null +++ b/marching/Assets/Scripts/Unit/Characters/Samurai.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a0f49eb0a90f474e8dc4f85f08e20fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs b/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs new file mode 100644 index 0000000..29b182c --- /dev/null +++ b/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs @@ -0,0 +1,155 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using static UnityEditor.PlayerSettings; + +namespace MH +{ + + public class SamuraiScript : UnitBase + { + [SerializeField] private WaypointScript m_Waypoint; + [SerializeField] private float m_Speed; + [SerializeField] private BladeScript m_Blade; + + private SpriteRenderer m_Sprite; + private bool m_Moving; + private Camera m_Camera; + private float m_TimeSinceLastMove; + private const float kKeepMovingThreshold = 0.4f; + private bool m_IsKeepMoving = false; + private Coroutine m_CoWaypoint; + private bool m_Attacking = false; + private bool m_IsKeepAttacking = false; + + void Start() + { + m_Camera = Camera.main; + m_Moving = true; + m_Sprite = GetComponent<SpriteRenderer>(); + m_TimeSinceLastMove = float.MaxValue; + StartCoroutine(CoAttack(1f)); + } + + protected override void Update() + { + base.Update(); + Move(); + LookAt(); + } + + private void LookAt() + { + Vector3 pos = transform.position; + Vector3 camPos = m_Camera.transform.position; + camPos.x = pos.x; + camPos.y = pos.y; + m_Camera.transform.position = camPos; + } + + private void Move() + { + if(Input.GetMouseButtonDown(0)) + { + float dt = Time.time - m_TimeSinceLastMove; + if(dt > 0 && dt < kKeepMovingThreshold) + { + m_IsKeepMoving = true; + } + else + { + m_IsKeepMoving = false; + } + } + + m_Attacking = Input.GetMouseButton(1); + + if (Input.GetMouseButton(0) || m_IsKeepMoving) + { + m_Moving = true; + + Vector3 mousePos = Input.mousePosition; + Vector3 mousePos3D = m_Camera.ScreenToWorldPoint(mousePos); + mousePos3D.z = 0; + + Vector3 pos = transform.position; + pos.z = 0; + + Vector3 toward = mousePos3D - pos; + toward.z = 0; + + if (toward.magnitude < 0.1f) + { + return; + } + + Vector3 dir = (mousePos3D - pos).normalized; + dir.z = 0; + + //pos.x += Time.deltaTime; + transform.position += dir * Time.deltaTime * m_Speed; + + m_Sprite.flipX = dir.x <= 0; + + if(m_CoWaypoint == null) + { + m_CoWaypoint = StartCoroutine(CoShowWaypoint(0.05f)); + } + } + else + { + if(m_CoWaypoint != null) + { + StopCoroutine(m_CoWaypoint); + m_CoWaypoint = null; + } + + m_Moving = false; + } + + GetComponent<Animator>().speed = m_Moving ? 1 : 0; + + if(Input.GetMouseButtonUp(0)) + { + m_TimeSinceLastMove = Time.time; + } + } + + IEnumerator CoShowWaypoint(float dt) + { + while (true) + { + WaypointScript waypoint = Instantiate(m_Waypoint) as WaypointScript; + Vector3 mousePos = Input.mousePosition; + Vector3 mousePos3D = m_Camera.ScreenToWorldPoint(mousePos); + mousePos3D.z = 0; + waypoint.transform.position = mousePos3D; + waypoint.life = 1; + yield return new WaitForSeconds(dt); + } + } + + IEnumerator CoAttack(float interval) + { + int fac = 1; + while (true) + { + if (!m_Attacking) + { + yield return null; + } + else + { + BladeScript blade = Instantiate(m_Blade); + blade.life = 0.5f; + blade.transform.position = transform.position + new Vector3(1 * fac, 1f, 0); + blade.SetFlip(fac == -1); + fac *= -1; + yield return new WaitForSeconds(interval); + } + } + } + + } + +} diff --git a/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs.meta b/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs.meta new file mode 100644 index 0000000..9f84435 --- /dev/null +++ b/marching/Assets/Scripts/Unit/Characters/Samurai/SamuraiScript.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aebd1bb3a775f7748832acc6222117cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/Unit/UnitBase.cs b/marching/Assets/Scripts/Unit/UnitBase.cs new file mode 100644 index 0000000..9c5f0d0 --- /dev/null +++ b/marching/Assets/Scripts/Unit/UnitBase.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class UnitBase : EntityBase +{ + protected virtual void Awake() + { + base.Awake(); + } + + protected virtual void Update() + { + base.Update(); + } + + protected virtual void LateUpdate() + { + base.LateUpdate(); + } + +} diff --git a/marching/Assets/Scripts/Unit/UnitBase.cs.meta b/marching/Assets/Scripts/Unit/UnitBase.cs.meta new file mode 100644 index 0000000..8552c51 --- /dev/null +++ b/marching/Assets/Scripts/Unit/UnitBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fab9edfa070295e4b832f046b18f279b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/marching/Assets/Scripts/VampireScript.cs b/marching/Assets/Scripts/VampireScript.cs index 87fdd7a..2f993d3 100644 --- a/marching/Assets/Scripts/VampireScript.cs +++ b/marching/Assets/Scripts/VampireScript.cs @@ -5,7 +5,7 @@ using UnityEngine; namespace MH { - public class VampireScript : MonoBehaviour + public class VampireScript : UnitBase { public Camera m_Camera; @@ -13,21 +13,23 @@ namespace MH private bool m_Moving; - // Start is called before the first frame update void Start() { m_Moving = true; m_Sprite = GetComponent<SpriteRenderer>(); } - // Update is called once per frame - void Update() + protected override void Update() { + base.Update(); + if (Input.GetMouseButtonDown(1)) { m_Moving = !m_Moving; } + GetComponent<Animator>().speed = m_Moving ? 1 : 0; + if (!m_Moving) return; diff --git a/marching/Assets/Scripts/WaypointScript.cs b/marching/Assets/Scripts/WaypointScript.cs new file mode 100644 index 0000000..1012bc2 --- /dev/null +++ b/marching/Assets/Scripts/WaypointScript.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class WaypointScript : MonoBehaviour +{ + public float life; + + // Start is called before the first frame update + void Start() + { + StartCoroutine(CoUpdate()); + } + + + IEnumerator CoUpdate() { + float t = 0; + while (true) + { + Color c = this.gameObject.GetComponent<SpriteRenderer>().color; + c.a *= 0.99f; + this.gameObject.GetComponent<SpriteRenderer>().color = c; + this.transform.localScale *= 1.002f; + t+= Time.deltaTime; + if(t > life) + { + Destroy(this.gameObject); + yield break; + } + yield return null; + } + } + + +} diff --git a/marching/Assets/Scripts/WaypointScript.cs.meta b/marching/Assets/Scripts/WaypointScript.cs.meta new file mode 100644 index 0000000..f58f668 --- /dev/null +++ b/marching/Assets/Scripts/WaypointScript.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f30c6188a9717a44a8a44c46bfd45a1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |