From 78771115b689d03baa1dc2439800f3ab89d065c3 Mon Sep 17 00:00:00 2001 From: KerelOlivier Date: Sat, 2 Apr 2022 15:32:55 +0200 Subject: [PATCH] add: bullet and states --- Assets/Scenes/test.unity | 78 ++++++++++++++++++- Assets/Scripts/Bullet.cs | 4 +- Assets/Scripts/Enemies.meta | 8 ++ Assets/Scripts/Enemies/BaseEnemy.cs | 28 +++++++ Assets/Scripts/Enemies/BaseEnemy.cs.meta | 3 + Assets/Scripts/Enemies/Enemy.cs | 30 +++++++ Assets/Scripts/Enemies/Enemy.cs.meta | 11 +++ Assets/Scripts/Enemies/States.meta | 3 + Assets/Scripts/Enemies/States/AttackState.cs | 27 +++++++ .../Enemies/States/AttackState.cs.meta | 3 + Assets/Scripts/Enemies/States/DieState.cs | 26 +++++++ .../Scripts/Enemies/States/DieState.cs.meta | 3 + Assets/Scripts/Enemies/States/FollowState.cs | 27 +++++++ .../Enemies/States/FollowState.cs.meta | 3 + Assets/Scripts/Enemies/States/IState.cs | 9 +++ Assets/Scripts/Enemies/States/IState.cs.meta | 11 +++ Assets/Scripts/Enemies/States/IdleState.cs | 28 +++++++ .../Scripts/Enemies/States/IdleState.cs.meta | 3 + Assets/Scripts/Enemies/States/PathState.cs | 27 +++++++ .../Scripts/Enemies/States/PathState.cs.meta | 3 + .../Scripts/Enemies/States/TargetingState.cs | 28 +++++++ .../Enemies/States/TargetingState.cs.meta | 3 + Assets/Scripts/PlayerController.cs | 13 +++- 23 files changed, 374 insertions(+), 5 deletions(-) create mode 100644 Assets/Scripts/Enemies.meta create mode 100644 Assets/Scripts/Enemies/BaseEnemy.cs create mode 100644 Assets/Scripts/Enemies/BaseEnemy.cs.meta create mode 100644 Assets/Scripts/Enemies/Enemy.cs create mode 100644 Assets/Scripts/Enemies/Enemy.cs.meta create mode 100644 Assets/Scripts/Enemies/States.meta create mode 100644 Assets/Scripts/Enemies/States/AttackState.cs create mode 100644 Assets/Scripts/Enemies/States/AttackState.cs.meta create mode 100644 Assets/Scripts/Enemies/States/DieState.cs create mode 100644 Assets/Scripts/Enemies/States/DieState.cs.meta create mode 100644 Assets/Scripts/Enemies/States/FollowState.cs create mode 100644 Assets/Scripts/Enemies/States/FollowState.cs.meta create mode 100644 Assets/Scripts/Enemies/States/IState.cs create mode 100644 Assets/Scripts/Enemies/States/IState.cs.meta create mode 100644 Assets/Scripts/Enemies/States/IdleState.cs create mode 100644 Assets/Scripts/Enemies/States/IdleState.cs.meta create mode 100644 Assets/Scripts/Enemies/States/PathState.cs create mode 100644 Assets/Scripts/Enemies/States/PathState.cs.meta create mode 100644 Assets/Scripts/Enemies/States/TargetingState.cs create mode 100644 Assets/Scripts/Enemies/States/TargetingState.cs.meta diff --git a/Assets/Scenes/test.unity b/Assets/Scenes/test.unity index 8de9ec1..e7bc8b9 100644 --- a/Assets/Scenes/test.unity +++ b/Assets/Scenes/test.unity @@ -152,9 +152,10 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 394882245} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] + m_Children: + - {fileID: 1731621445} m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -308,6 +309,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ff7058e4b6f609474b877ecc3d8c9e62, type: 3} m_Name: m_EditorClassIdentifier: + nuzzleFlash: {fileID: 1731621446} bulletPrefab: {fileID: 409730934181383827, guid: ccfd7dba07a17d1c0845ca0004f9c5fe, type: 3} --- !u!1 &519420028 GameObject: @@ -542,6 +544,78 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1731621444 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1731621445} + - component: {fileID: 1731621446} + m_Layer: 0 + m_Name: Point Light 2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1731621445 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1731621444} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.5, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 394882246} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1731621446 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1731621444} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_LightType: 3 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 + m_Color: {r: 1, g: 0.3056656, b: 0, a: 1} + m_Intensity: 0 + m_LightVolumeOpacity: 0 + m_ApplyToSortingLayers: 00000000 + m_LightCookieSprite: {fileID: 0} + m_UseNormalMap: 0 + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_ShadowIntensity: 0 + m_ShadowVolumeIntensity: 0 + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 0.7 + m_PointLightDistance: 3 + m_PointLightQuality: 1 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} --- !u!1 &2065747229 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Bullet.cs b/Assets/Scripts/Bullet.cs index 01a7c40..7e5a85b 100644 --- a/Assets/Scripts/Bullet.cs +++ b/Assets/Scripts/Bullet.cs @@ -6,8 +6,8 @@ using UnityEngine; public class Bullet : MonoBehaviour { - float lifeTime = 3f; - float speed = 10f; + float lifeTime = 1f; + float speed = 15f; // Start is called before the first frame update void Start() { diff --git a/Assets/Scripts/Enemies.meta b/Assets/Scripts/Enemies.meta new file mode 100644 index 0000000..b1aa545 --- /dev/null +++ b/Assets/Scripts/Enemies.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 70818c4860429eaa189725cc9bb46cfc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/BaseEnemy.cs b/Assets/Scripts/Enemies/BaseEnemy.cs new file mode 100644 index 0000000..6dba192 --- /dev/null +++ b/Assets/Scripts/Enemies/BaseEnemy.cs @@ -0,0 +1,28 @@ +using System; +using Enemies.States; + +namespace Enemies +{ + public class BaseEnemy :Enemy + { + private void Awake() + { + state = new IdleState(this); + } + + private void Update() + { + HandleStates(); + state.Execute(); + } + + private void HandleStates() + { + if (health <= 0) + { + state = new DieState(this); + return; + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Enemies/BaseEnemy.cs.meta b/Assets/Scripts/Enemies/BaseEnemy.cs.meta new file mode 100644 index 0000000..9a30af8 --- /dev/null +++ b/Assets/Scripts/Enemies/BaseEnemy.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 637e76a880a1496a9bd4bb5256bc41a2 +timeCreated: 1648903519 \ No newline at end of file diff --git a/Assets/Scripts/Enemies/Enemy.cs b/Assets/Scripts/Enemies/Enemy.cs new file mode 100644 index 0000000..eac1fe2 --- /dev/null +++ b/Assets/Scripts/Enemies/Enemy.cs @@ -0,0 +1,30 @@ +using Enemies.States; +using UnityEngine; + +namespace Enemies +{ + public class Enemy : MonoBehaviour + { + public float health = 10f; + public float attackPower = 1; + + public GameObject target { get; set; } + private float speed = 2f; + + public IState state { get; set; } + + + // Start is called before the first frame update + void Start() + { + Destroy(gameObject, 10f); + + } + + // Update is called once per frame + void Update() + { + + } + } +} diff --git a/Assets/Scripts/Enemies/Enemy.cs.meta b/Assets/Scripts/Enemies/Enemy.cs.meta new file mode 100644 index 0000000..7df79de --- /dev/null +++ b/Assets/Scripts/Enemies/Enemy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24e36874f702ad7eeb7b31559803fa68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/States.meta b/Assets/Scripts/Enemies/States.meta new file mode 100644 index 0000000..8f2b884 --- /dev/null +++ b/Assets/Scripts/Enemies/States.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ff96e8a80d18490aa2d832b89efc879b +timeCreated: 1648900365 \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/AttackState.cs b/Assets/Scripts/Enemies/States/AttackState.cs new file mode 100644 index 0000000..d7e3ca2 --- /dev/null +++ b/Assets/Scripts/Enemies/States/AttackState.cs @@ -0,0 +1,27 @@ +using Enemies.States; + +namespace Enemies +{ + public class AttackState: IState + { + private Enemy context; + public AttackState(Enemy context) + { + this.context = context; + } + public void Enter() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + throw new System.NotImplementedException(); + } + + public void Exit() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/AttackState.cs.meta b/Assets/Scripts/Enemies/States/AttackState.cs.meta new file mode 100644 index 0000000..fa4731b --- /dev/null +++ b/Assets/Scripts/Enemies/States/AttackState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b599a154939544318719e918c1119e69 +timeCreated: 1648900308 \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/DieState.cs b/Assets/Scripts/Enemies/States/DieState.cs new file mode 100644 index 0000000..3fb82cf --- /dev/null +++ b/Assets/Scripts/Enemies/States/DieState.cs @@ -0,0 +1,26 @@ +using UnityEngine; +namespace Enemies.States +{ + public class DieState:IState + { + private Enemy context; + public DieState(Enemy context) + { + this.context = context; + } + public void Enter() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + Object.Destroy(context.gameObject); + } + + public void Exit() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/DieState.cs.meta b/Assets/Scripts/Enemies/States/DieState.cs.meta new file mode 100644 index 0000000..7ee4640 --- /dev/null +++ b/Assets/Scripts/Enemies/States/DieState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 12afa5570dd440a089cd2e73d7657ff6 +timeCreated: 1648905635 \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/FollowState.cs b/Assets/Scripts/Enemies/States/FollowState.cs new file mode 100644 index 0000000..d592121 --- /dev/null +++ b/Assets/Scripts/Enemies/States/FollowState.cs @@ -0,0 +1,27 @@ +using Enemies.States; + +namespace Enemies +{ + public class FollowState: IState + { + private Enemy context; + public FollowState(Enemy context) + { + this.context = context; + } + public void Enter() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + throw new System.NotImplementedException(); + } + + public void Exit() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/FollowState.cs.meta b/Assets/Scripts/Enemies/States/FollowState.cs.meta new file mode 100644 index 0000000..e0bd53b --- /dev/null +++ b/Assets/Scripts/Enemies/States/FollowState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bf69b9658d394c9c865d69a41522240a +timeCreated: 1648903253 \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/IState.cs b/Assets/Scripts/Enemies/States/IState.cs new file mode 100644 index 0000000..b81f275 --- /dev/null +++ b/Assets/Scripts/Enemies/States/IState.cs @@ -0,0 +1,9 @@ +namespace Enemies.States +{ + public interface IState + { + public void Enter(); + public void Execute(); + public void Exit(); + } +} diff --git a/Assets/Scripts/Enemies/States/IState.cs.meta b/Assets/Scripts/Enemies/States/IState.cs.meta new file mode 100644 index 0000000..41a6782 --- /dev/null +++ b/Assets/Scripts/Enemies/States/IState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5015856b4dd585466a0d6d0a0e3d1661 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/States/IdleState.cs b/Assets/Scripts/Enemies/States/IdleState.cs new file mode 100644 index 0000000..8e142f6 --- /dev/null +++ b/Assets/Scripts/Enemies/States/IdleState.cs @@ -0,0 +1,28 @@ +using Enemies.States; + +namespace Enemies +{ + public class IdleState: IState + { + private Enemy context; + public IdleState(Enemy context) + { + this.context = context; + } + + public void Enter() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + throw new System.NotImplementedException(); + } + + public void Exit() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/IdleState.cs.meta b/Assets/Scripts/Enemies/States/IdleState.cs.meta new file mode 100644 index 0000000..3bea5ab --- /dev/null +++ b/Assets/Scripts/Enemies/States/IdleState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 26eeda0ae91e421f94c4453960894cea +timeCreated: 1648900414 \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/PathState.cs b/Assets/Scripts/Enemies/States/PathState.cs new file mode 100644 index 0000000..50462f7 --- /dev/null +++ b/Assets/Scripts/Enemies/States/PathState.cs @@ -0,0 +1,27 @@ +using Enemies.States; + +namespace Enemies +{ + public class PathState: IState + { + private Enemy context; + public PathState(Enemy context) + { + this.context = context; + } + public void Enter() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + throw new System.NotImplementedException(); + } + + public void Exit() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/PathState.cs.meta b/Assets/Scripts/Enemies/States/PathState.cs.meta new file mode 100644 index 0000000..ca0bfe6 --- /dev/null +++ b/Assets/Scripts/Enemies/States/PathState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b85849d4caf94ce9888c4c34a07ef1bc +timeCreated: 1648900334 \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/TargetingState.cs b/Assets/Scripts/Enemies/States/TargetingState.cs new file mode 100644 index 0000000..9a98a8f --- /dev/null +++ b/Assets/Scripts/Enemies/States/TargetingState.cs @@ -0,0 +1,28 @@ +using Enemies.States; + +namespace Enemies +{ + public class TargetingState: IState + { + private Enemy context; + public TargetingState(Enemy context) + { + this.context = context; + } + + public void Enter() + { + throw new System.NotImplementedException(); + } + + public void Execute() + { + throw new System.NotImplementedException(); + } + + public void Exit() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Enemies/States/TargetingState.cs.meta b/Assets/Scripts/Enemies/States/TargetingState.cs.meta new file mode 100644 index 0000000..ac3caed --- /dev/null +++ b/Assets/Scripts/Enemies/States/TargetingState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c0d6af1e1a6143d9ad5b7fac796bda71 +timeCreated: 1648900434 \ No newline at end of file diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index b9916e4..d87f7c0 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -2,14 +2,18 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.Experimental.Rendering.Universal; using UnityEngine.InputSystem; public class PlayerController : MonoBehaviour { + public Light2D nuzzleFlash; + private Rigidbody2D rb; private SpriteRenderer sr; private Camera main; + //Input private PlayerInput input; private InputAction moveAction; @@ -22,7 +26,7 @@ public class PlayerController : MonoBehaviour public GameObject bulletPrefab; private bool isShooting = false; private float lastShot = 0f; - private float shootSpeed = 0.5f; + private float shootSpeed = 0.25f; // Start is called before the first frame update @@ -62,6 +66,9 @@ public class PlayerController : MonoBehaviour { lastShot = Time.time; Instantiate(bulletPrefab, transform.position, transform.rotation); + nuzzleFlash.intensity = 2f; + Invoke(nameof(disableNuzzleFlash), 0.025f); + } } @@ -73,4 +80,8 @@ public class PlayerController : MonoBehaviour { isShooting = !stop; } + void disableNuzzleFlash() + { + nuzzleFlash.intensity = 0f; + } } \ No newline at end of file