10 Commits
dash ... main

Author SHA1 Message Date
ProtoSharkk
26f8a323d3 Merge pull request #11 from ProtoSharkk/dash
Dashing into enemies creates a shockwave that pushes them away
2024-10-28 17:47:09 -07:00
ProtoSharkk
bd1090aabe Merge pull request #10 from ProtoSharkk/variants
Gun thrower ratbots
2024-10-27 19:19:14 -07:00
719ecf18aa Ratbots now spawn around player instead of around (0, 0) 2024-10-27 19:16:35 -07:00
0865da7870 Destroy gun when out of view 2024-10-27 19:11:47 -07:00
2908b53812 Past wave 3 a third of ratbots are gun throwers 2024-10-27 19:01:57 -07:00
e3a96303bc Guns spin and die and self destruct on impact 2024-10-27 18:30:18 -07:00
73ab694f7c Guns travel towards player 2024-10-27 18:15:14 -07:00
89953e7cd6 Create Gun thrower subclass of ratbot that spawns gun objects 2024-10-27 17:59:13 -07:00
Iazubi
1e878b2b67 Update README.md 2024-10-27 02:05:58 -07:00
Iazubi
8f970dfbc2 Update README.md 2024-10-27 02:01:45 -07:00
21 changed files with 686 additions and 34 deletions

21
Assets/Enemy/Gun.cs Normal file
View File

@@ -0,0 +1,21 @@
using UnityEngine;
public class Gun : MonoBehaviour
{
public float damageStrength;
void OnTriggerEnter2D (Collider2D hit) {
// Damage player and destroy self on impact
if (hit.tag != "Player") return;
hit.GetComponent<Teo>().health -= damageStrength;
Destroy(gameObject);
}
void Update() {
transform.Rotate(new Vector3 (0, 0, Time.deltaTime * 1000));
if (Vector3.Distance(
transform.position,
GameObject.FindGameObjectWithTag("Player").transform.position
) > 20) Destroy(gameObject);
}
}

2
Assets/Enemy/Gun.cs.meta Normal file
View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 9960e65b78321cc8a85166a904f8f617

BIN
Assets/Enemy/Gun.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

143
Assets/Enemy/Gun.png.meta Normal file
View File

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: e702bce75f9e4df8ea233b25756258da
TextureImporter:
internalIDToNameTable:
- first:
213: 6013433716489236182
second: pngtree-weapon-gun-flat-icon-handgun-png-image_4933503_0
externalObjects: {}
serializedVersion: 13
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
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
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
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: pngtree-weapon-gun-flat-icon-handgun-png-image_4933503_0
rect:
serializedVersion: 2
x: 37
y: 88
width: 286
height: 184
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 6dea2b7ca12047350800000000000000
internalID: 6013433716489236182
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
pngtree-weapon-gun-flat-icon-handgun-png-image_4933503_0: 6013433716489236182
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

178
Assets/Enemy/Gun.prefab Normal file
View File

@@ -0,0 +1,178 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &5213001249979318174
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1149395136374715657}
- component: {fileID: 8026032327717419331}
- component: {fileID: 8712449370490801022}
- component: {fileID: 3940916619600254679}
- component: {fileID: 7665728843769076804}
m_Layer: 0
m_Name: Gun
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1149395136374715657
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5213001249979318174}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &8026032327717419331
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5213001249979318174}
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: 0
m_Sprite: {fileID: 6013433716489236182, guid: e702bce75f9e4df8ea233b25756258da, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 2.86, y: 1.84}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!114 &8712449370490801022
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5213001249979318174}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9960e65b78321cc8a85166a904f8f617, type: 3}
m_Name:
m_EditorClassIdentifier:
damageStrength: 0
--- !u!61 &3940916619600254679
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5213001249979318174}
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: 1
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: 2.86, y: 1.84}
newSize: {x: 2.86, y: 1.84}
adaptiveTilingThreshold: 0.5
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
m_Size: {x: 2.86, y: 1.84}
m_EdgeRadius: 0
--- !u!50 &7665728843769076804
Rigidbody2D:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5213001249979318174}
m_BodyType: 0
m_Simulated: 1
m_UseFullKinematicContacts: 0
m_UseAutoMass: 0
m_Mass: 1
m_LinearDamping: 0
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: 0

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 98b57b15498e96a9c8fe56264ac2ef63
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,183 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &398740452138961375
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4344634732794346337}
- component: {fileID: 5639616099047780729}
- component: {fileID: 480941680556316754}
- component: {fileID: 8441426735084966298}
- component: {fileID: 3449798187735636588}
m_Layer: 0
m_Name: GunThrower
m_TagString: Ratbot
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4344634732794346337
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 398740452138961375}
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!114 &5639616099047780729
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 398740452138961375}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3ebac0379db13f0c3932982bc0ebed28, type: 3}
m_Name:
m_EditorClassIdentifier:
moveSpeed: 1500
damageStrength: 10
damageTimeoutSeconds: 0.5
health: 10
gun: {fileID: 5213001249979318174, guid: 98b57b15498e96a9c8fe56264ac2ef63, type: 3}
throwSpeed: 500
--- !u!212 &480941680556316754
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 398740452138961375}
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!61 &8441426735084966298
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 398740452138961375}
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 &3449798187735636588
Rigidbody2D:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 398740452138961375}
m_BodyType: 0
m_Simulated: 1
m_UseFullKinematicContacts: 0
m_UseAutoMass: 0
m_Mass: 0.5
m_LinearDamping: 10
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

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b1e1e6378fb12d47e989565896a737ef
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -165,7 +165,7 @@ Rigidbody2D:
m_UseFullKinematicContacts: 0 m_UseFullKinematicContacts: 0
m_UseAutoMass: 0 m_UseAutoMass: 0
m_Mass: 0.5 m_Mass: 0.5
m_LinearDamping: 10 m_LinearDamping: 15
m_AngularDamping: 0.05 m_AngularDamping: 0.05
m_GravityScale: 1 m_GravityScale: 1
m_Material: {fileID: 0} m_Material: {fileID: 0}

View File

@@ -160,7 +160,8 @@ TextureImporter:
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: {} nameFileIdTable:
TeoSword_2_0: -4241835214737505916
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@@ -160,7 +160,8 @@ TextureImporter:
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: {} nameFileIdTable:
TeoSword_clear_0: 5912729268939179329
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@@ -160,7 +160,8 @@ TextureImporter:
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: {} nameFileIdTable:
GYNxJn_0: 7760431067827908858
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@@ -160,7 +160,8 @@ TextureImporter:
secondaryTextures: [] secondaryTextures: []
spriteCustomMetadata: spriteCustomMetadata:
entries: [] entries: []
nameFileIdTable: {} nameFileIdTable:
roborat_0: -4827719251672435245
mipmapLimitGroupName: mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
userData: userData:

View File

@@ -681,7 +681,7 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
state: 0 state: 0
wave: 0 wave: 0
ratbot: {fileID: 398740452138961375, guid: 5887eeeb7c78eb5c7bf46c5893fd4846, type: 3} ratbot: {fileID: 398740452138961375, guid: b1e1e6378fb12d47e989565896a737ef, type: 3}
shop: {fileID: 6569104281457075541, guid: c0d23b24c9c882ef89013998dab29dea, type: 3} shop: {fileID: 6569104281457075541, guid: c0d23b24c9c882ef89013998dab29dea, type: 3}
--- !u!4 &745837569 --- !u!4 &745837569
Transform: Transform:

View File

@@ -4,8 +4,16 @@ public class GameState : MonoBehaviour
{ {
public State state; public State state;
public uint wave; public uint wave;
public GameObject ratbot;
public GameObject shop; public GameObject shop;
public GameObject ratbot;
public GameObject gunThrower;
int[] counts = new int[2];
enum CountIndex : uint {
ratbot = 0,
gunThrower = 1
}
void Start() { void Start() {
OpenShop(); OpenShop();
} }
@@ -20,7 +28,9 @@ public class GameState : MonoBehaviour
// Update is called once per frame // Update is called once per frame
void Update() void Update()
{ {
if (GameObject.FindGameObjectsWithTag("Ratbot").Length == 0 && state == State.Wave) { if (GameObject.FindGameObjectsWithTag("Ratbot").Length == 0
&& state == State.Wave
) {
OpenShop(); OpenShop();
} }
} }
@@ -34,16 +44,34 @@ public class GameState : MonoBehaviour
// Spawn ratbots around the player // Spawn ratbots around the player
// Amount, health, and damage scale with waves // Amount, health, and damage scale with waves
state = State.Wave; state = State.Wave;
Vector3 playerPosition = GameObject.FindGameObjectWithTag("Player").transform.position; Vector3 playerPosition
= GameObject
.FindGameObjectWithTag("Player")
.transform
.position;
for (uint _ = 0; _ <= wave; _++) { for (uint _ = 0; _ <= wave; _++) {
GameObject newRatbot = Instantiate( GameObject newRatbot = Instantiate(
ratbot, SpawnRatbot(),
Random.insideUnitCircle.normalized*20, Random.insideUnitCircle.normalized*20
+ new Vector2 (
playerPosition.x,
playerPosition.y
),
Quaternion.identity Quaternion.identity
); );
newRatbot.GetComponent<Ratbot>().damageStrength = 5+wave*5; newRatbot.GetComponent<Ratbot>().damageStrength
= 5+wave*5;
newRatbot.GetComponent<Ratbot>().health = 5+wave*2; newRatbot.GetComponent<Ratbot>().health = 5+wave*2;
} }
wave++; wave++;
} }
public GameObject SpawnRatbot() {
if (counts[(uint)CountIndex.gunThrower] < wave/3
&& wave > 3
) {
counts[(uint)CountIndex.gunThrower]++;
return gunThrower;
}
return ratbot;
}
} }

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 80a6f9e1f8fdfdbcfb3c74283bd49306
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,28 @@
using UnityEngine;
public class GunThrower : Ratbot
{
public GameObject gun;
public float throwSpeed;
void Start() {
SetVars();
InvokeRepeating(
"ThrowGun",
Random.Range(1, 3),
Random.Range(1, 3)
);
}
void ThrowGun() {
GameObject thrown = Instantiate(
gun,
transform.position,
Quaternion.identity
);
thrown.GetComponent<Rigidbody2D>().AddRelativeForce((
player.transform.position - thrown.transform.position
).normalized * throwSpeed);
thrown.GetComponent<Gun>().damageStrength = damageStrength;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3ebac0379db13f0c3932982bc0ebed28

View File

@@ -7,21 +7,29 @@ public class Ratbot : MonoBehaviour
public float damageTimeoutSeconds; public float damageTimeoutSeconds;
public float health = 10; public float health = 10;
float lastDamageTime; float lastDamageTime;
GameState gameState;
GameObject player; public static GameState gameState;
public static GameObject player;
void Start() { void Start() {
SetVars();
}
public void SetVars() {
// Set gameState and player objects // Set gameState and player objects
player = GameObject.FindGameObjectWithTag("Player"); player = GameObject.FindGameObjectWithTag("Player");
gameState = GameObject.FindGameObjectWithTag("GameController").GetComponent<GameState>(); gameState = GameObject.FindGameObjectWithTag("GameController").GetComponent<GameState>();
} }
void Update() { void Update() {
// Constantly move towards player MoveTowardsPlayer();
}
public void MoveTowardsPlayer() {
Rigidbody2D controller = GetComponent<Rigidbody2D>(); Rigidbody2D controller = GetComponent<Rigidbody2D>();
Vector2 direction = (player.transform.position - transform.position).normalized; Vector2 direction = (player.transform.position - transform.position).normalized;
controller.AddRelativeForce(direction*moveSpeed*Time.deltaTime); controller.AddRelativeForce(direction*moveSpeed*Time.deltaTime);
} }
void OnCollisionStay2D(Collision2D collision) { void OnCollisionStay2D(Collision2D collision) {
// Deal damage when colliding with the player on a 0.5 second cooldown // Deal damage when colliding with the player on a 0.5 second cooldown

View File

@@ -1,5 +1,43 @@
# RatStabber # RatStabber
![TeoSword_clear](https://github.com/user-attachments/assets/5cc699a3-c4a2-47c5-9d7f-10f8546ad48f)
### Fight off the ratbots and save the rat cities as the hunky man Teo himself! (and all the goofy ai generated images of him and everyone else)
## LORE:
After successfully defeating the Paulbots, the rat took components of the Paulbots and improved the design to create the rat bots. He could finally get revenge on Paul for the destruction of his kind. However, the Paul Bots managed to regain consciousness inside of the new and improved Rat Bots, making the Ratbots turn against the rat, taking his weapons and his last hopes of defeating Paul. You (Teo) have arrived to protect the rat and help him figure out a way to stop the now evil rat bots and discover the dark, hidden secrets while ending this war once and for all.
## And that's the game... I guess...
### Alright, Here's the Basic Vision: ### Alright, Here's the Basic Vision:
- The Player (Teo) moves around an infinite field with the camera following the player - The Player (Teo) moves around an infinite field with the camera following the player
@@ -39,7 +77,7 @@
- [x] Wave spawns enemies - [x] Wave spawns enemies
- [x] Detect when wave ends - [x] Detect when wave ends
- [x] Activate new waves after powerup has been chosen by player - [x] Activate new waves after powerup has been chosen by player
- [ ] Dash ability - [x] Dash ability
### Enemy: ### Enemy:
- [x] All Enemies have simple pathfinding towards the player - [x] All Enemies have simple pathfinding towards the player
@@ -60,34 +98,29 @@
### In-Game UI: ### In-Game UI:
- [x] Player health on bottom left - [x] Player health on bottom left
- [ ] Round / Wave on bottom left (?) - [x] Round / Wave on bottom left (?)
- [ ] Maybe show enemy remaining count? (We can make a hard mode that removes UI except health) - [ ] Maybe show enemy remaining count? (We can make a hard mode that removes UI except health)
- [ ] Upon round end, pop-up menu for selecting powerup - [ ] Upon round end, pop-up menu for selecting powerup
- [x] Damage - [x] Damage
- [ ] Attack distance - [x] Attack distance
- [ ] Attack range - [x] Attack range
- [ ] Attack cooldown - [x] Attack cooldown
- [x] Health - [x] Health
- [x] Speed - [x] Speed
- [ ] Dash cooldown - [x] Dash cooldown
- [ ] Dash distance - [x] Dash distance
- [ ] (Only an idea for now) Have a status bar at the bottom right to show your current stats - [ ] (Only an idea for now) Have a status bar at the bottom right to show your current stats
### UI / AUDIO: ### UI / AUDIO:
- [ ] Menu Screen - [x] Menu Screen
- [ ] Pause Screen - [ ] Pause Screen
- [ ] Option for returning to main menu / resume - [ ] Option for returning to main menu / resume
- [ ] Menu Music - [x] Menu Music
- [ ] Level Music - [x] Level Music
- [ ] A section where the player can view unlocked lore by completing more of the game - [x] A section where the player can view unlocked lore by completing more of the game
- [ ] LORE GETS UNLOCKED EVERY 10 ROUNDS BEATEN + BOSS BEATEN
## LORE:
After successfully defeating the Paul bots, the rat improved upon the design to create the rat bots. He could finally get revenge on Paul for the destruction of his kind. However, the Paul Bots managed to regain consciousness inside of the new and improved Rat Bots, in-turn making the Ratbots turn against the rat, taking his weapons and his last hopes of defeating Paul as well. You (Teo) have arrived to protect the rat and help him figure out a way to stop the now evil rat bots and put an end to this war once and for all.