diff --git a/Assets/Enemy/FastFucker.prefab b/Assets/Enemy/FastFucker.prefab new file mode 100644 index 0000000..7268060 --- /dev/null +++ b/Assets/Enemy/FastFucker.prefab @@ -0,0 +1,181 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7192111562784377269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7306069853192956541} + - component: {fileID: 6956675740950355391} + - component: {fileID: 3724765237708177526} + - component: {fileID: 8790759452092966400} + - component: {fileID: 6076434776385846704} + m_Layer: 0 + m_Name: FastFucker + m_TagString: Ratbot + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7306069853192956541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7192111562784377269} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.45, y: 0.45, z: 0.45} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &6956675740950355391 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7192111562784377269} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: -3751497128136096670, guid: 520c934c186517356929c5948597af6f, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 5.12, y: 5.12} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &3724765237708177526 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7192111562784377269} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07603fdf7ab38f05493e2a22ef5cae06, type: 3} + m_Name: + m_EditorClassIdentifier: + moveSpeed: 1500 + damageStrength: 10 + damageTimeoutSeconds: 0.5 + health: 10 +--- !u!61 &8790759452092966400 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7192111562784377269} + m_Enabled: 1 + serializedVersion: 3 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_CompositeOperation: 0 + m_CompositeOrder: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0.5, y: 0.5} + oldSize: {x: 3.53, y: 4.2} + newSize: {x: 5.12, y: 5.12} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Size: {x: 3.53, y: 4.2} + m_EdgeRadius: 0 +--- !u!50 &6076434776385846704 +Rigidbody2D: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7192111562784377269} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 0.2 + m_LinearDamping: 15 + m_AngularDamping: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 4 diff --git a/Assets/Enemy/FastFucker.prefab.meta b/Assets/Enemy/FastFucker.prefab.meta new file mode 100644 index 0000000..c6a89ff --- /dev/null +++ b/Assets/Enemy/FastFucker.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2c67a9ffe3cbdc6989fcabe398ffd2dc +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index a32a66c..976fa32 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -684,6 +684,7 @@ MonoBehaviour: shop: {fileID: 6569104281457075541, guid: c0d23b24c9c882ef89013998dab29dea, type: 3} ratbot: {fileID: 398740452138961375, guid: 5887eeeb7c78eb5c7bf46c5893fd4846, type: 3} gunThrower: {fileID: 398740452138961375, guid: b1e1e6378fb12d47e989565896a737ef, type: 3} + fastFucker: {fileID: 7192111562784377269, guid: 2c67a9ffe3cbdc6989fcabe398ffd2dc, type: 3} --- !u!4 &745837569 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts C#/GameState.cs b/Assets/Scripts C#/GameState.cs index 6f6b41e..767f87a 100644 --- a/Assets/Scripts C#/GameState.cs +++ b/Assets/Scripts C#/GameState.cs @@ -7,11 +7,13 @@ public class GameState : MonoBehaviour public GameObject shop; public GameObject ratbot; public GameObject gunThrower; + public GameObject fastFucker; - int[] counts = new int[2]; + int[] counts = new int[3]; enum CountIndex : uint { ratbot = 0, - gunThrower = 1 + gunThrower = 1, + fastFucker = 2 } void Start() { @@ -52,6 +54,7 @@ public class GameState : MonoBehaviour for (uint _ = 0; _ <= wave; _++) { GameObject newRatbot = Instantiate( SpawnRatbot(), + // Spawn ratbots in a circle around the player Random.insideUnitCircle.normalized*20 + new Vector2 ( playerPosition.x, @@ -59,6 +62,8 @@ public class GameState : MonoBehaviour ), Quaternion.identity ); + // Set ratbot damageStrength and health + // TODO: set speed newRatbot.GetComponent().damageStrength = 5+wave*5; newRatbot.GetComponent().health = 5+wave*2; @@ -66,12 +71,19 @@ public class GameState : MonoBehaviour wave++; } public GameObject SpawnRatbot() { + // TODO: Convert this mess into a switch case if (counts[(uint)CountIndex.gunThrower] < wave/3 && wave > 3 ) { counts[(uint)CountIndex.gunThrower]++; return gunThrower; } + if (counts[(uint)CountIndex.fastFucker] < wave/4 + && wave > 2 + ) { + counts[(uint)CountIndex.fastFucker]++; + return fastFucker; + } return ratbot; } } diff --git a/Assets/Scripts C#/Ratbots/FastFucker.cs b/Assets/Scripts C#/Ratbots/FastFucker.cs new file mode 100644 index 0000000..0738973 --- /dev/null +++ b/Assets/Scripts C#/Ratbots/FastFucker.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using System.Collections; + +public class FastFucker : Ratbot +{ + bool attack = true; + void Update() { + if (attack) + MoveTowardsPlayer(moveSpeed*3); + else + MoveAwayFromPlayer(moveSpeed); + } + void MoveAwayFromPlayer(float speed) { + controller.AddRelativeForce( + (transform.position - player.transform.position) + .normalized + *speed + *Time.deltaTime + ); + } + new void OnCollisionStay2D (Collision2D collision) { + base.OnCollisionStay2D(collision); + StartCoroutine("RunAway"); + } + IEnumerator RunAway() { + attack = false; + yield return new WaitForSeconds (1F); + attack = true; + } +} diff --git a/Assets/Scripts C#/Ratbots/FastFucker.cs.meta b/Assets/Scripts C#/Ratbots/FastFucker.cs.meta new file mode 100644 index 0000000..827934a --- /dev/null +++ b/Assets/Scripts C#/Ratbots/FastFucker.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 07603fdf7ab38f05493e2a22ef5cae06 \ No newline at end of file diff --git a/Assets/Scripts C#/Ratbots/Ratbot.cs b/Assets/Scripts C#/Ratbots/Ratbot.cs index 66dc560..65b34bd 100644 --- a/Assets/Scripts C#/Ratbots/Ratbot.cs +++ b/Assets/Scripts C#/Ratbots/Ratbot.cs @@ -10,28 +10,33 @@ public class Ratbot : MonoBehaviour public static GameState gameState; public static GameObject player; + public Rigidbody2D controller; void Start() { SetVars(); } public void SetVars() { + controller = GetComponent(); // Set gameState and player objects player = GameObject.FindGameObjectWithTag("Player"); gameState = GameObject.FindGameObjectWithTag("GameController").GetComponent(); } void Update() { - MoveTowardsPlayer(); + MoveTowardsPlayer(moveSpeed); } - public void MoveTowardsPlayer() { - Rigidbody2D controller = GetComponent(); - Vector2 direction = (player.transform.position - transform.position).normalized; - controller.AddRelativeForce(direction*moveSpeed*Time.deltaTime); + public void MoveTowardsPlayer(float speed) { + controller.AddRelativeForce( + (player.transform.position - transform.position) + .normalized + *speed + *Time.deltaTime + ); } - void OnCollisionStay2D(Collision2D collision) { + public virtual void OnCollisionStay2D(Collision2D collision) { // Deal damage when colliding with the player on a 0.5 second cooldown if (collision.gameObject.tag != "Player") return; if (lastDamageTime > Time.fixedTime-damageTimeoutSeconds) return;