diff --git a/Assets/Resources/Berries/TimeFreezeBerry.png b/Assets/Resources/Berries/TimeFreezeBerry.png new file mode 100644 index 0000000..afc0c51 Binary files /dev/null and b/Assets/Resources/Berries/TimeFreezeBerry.png differ diff --git a/Assets/Resources/Berries/TimeFreezeBerry.png.meta b/Assets/Resources/Berries/TimeFreezeBerry.png.meta new file mode 100644 index 0000000..ac8424d --- /dev/null +++ b/Assets/Resources/Berries/TimeFreezeBerry.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 185d97954c8bfbb4db23135a717cb44e +TextureImporter: + internalIDToNameTable: + - first: + 213: -5096348764422709229 + second: timefreezeberry_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 + - serializedVersion: 4 + buildTarget: Android + 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: timefreezeberry_0 + rect: + serializedVersion: 2 + x: 7 + y: 3 + width: 114 + height: 122 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 3106515ecc12649b0800000000000000 + internalID: -5096348764422709229 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + timefreezeberry_0: -5096348764422709229 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/BazookaManager.cs b/Assets/Scripts/BazookaManager.cs index e877774..0b123e3 100644 --- a/Assets/Scripts/BazookaManager.cs +++ b/Assets/Scripts/BazookaManager.cs @@ -492,4 +492,22 @@ public class BazookaManager : MonoBehaviour if (saveFile["gameStore"] == null) return; (saveFile["gameStore"] as JObject)?.Remove("totalPurpleBerries"); } + public void SetGameStoreTotalTimeFreezeBerries(BigInteger value) + { + if (saveFile["gameStore"] == null) saveFile["gameStore"] = new JObject(); + saveFile["gameStore"]["totalTimeFreezeBerries"] = value.ToString(); + } + + public BigInteger GetGameStoreTotalTimeFreezeBerries() + { + if (saveFile["gameStore"] == null) return 0; + if (saveFile["gameStore"]["totalTimeFreezeBerries"] == null) return 0; + return BigInteger.Parse(saveFile["gameStore"]["totalTimeFreezeBerries"].ToString()); + } + + public void UnsetGameStoreTotalTimeFreezeBerries() + { + if (saveFile["gameStore"] == null) return; + (saveFile["gameStore"] as JObject)?.Remove("totalTimeFreezeBerries"); + } } diff --git a/Assets/Scripts/GamePlayer.cs b/Assets/Scripts/GamePlayer.cs index 7a6423f..4529ce0 100644 --- a/Assets/Scripts/GamePlayer.cs +++ b/Assets/Scripts/GamePlayer.cs @@ -20,9 +20,11 @@ public class GamePlayer : MonoBehaviour private BigInteger totalSpeedyBerries; private BigInteger totalTimeSlowBerries; private BigInteger totalPurpleBerries; + private BigInteger totalTimeFreezeBerries; private BigInteger totalAttempts; private float boostLeft; private float timeslowLeft; + private float timefreezeLeft; private float slownessLeft; private float speedyLeft; private float screenWidth; @@ -272,6 +274,11 @@ public class GamePlayer : MonoBehaviour timeslowLeft -= Time.deltaTime; boostText.text = "Time Slow expires in " + string.Format("{0:0.0}", timeslowLeft) + "s"; } + else if (timefreezeLeft > 0f) + { + timefreezeLeft -= Time.deltaTime; + boostText.text = "Time Freeze expires in " + string.Format("{0:0.0}", timefreezeLeft) + "s"; + } else { boostText.text = ""; @@ -294,11 +301,13 @@ public class GamePlayer : MonoBehaviour nextSpawnTime = Time.time + 1f / spawnRate; } float spawnProbability = Random.value; + if ((int)timefreezeLeft != 0) return; if (!pausePanel.activeSelf) { GameObject newBerry = new("Berry"); newBerry.transform.SetParent(berryParent.transform); SpriteRenderer spriteRenderer = newBerry.AddComponent(); + if (spawnProbability <= 0.525f) { spriteRenderer.sprite = Resources.Load("Berries/Berry"); @@ -329,13 +338,16 @@ public class GamePlayer : MonoBehaviour spriteRenderer.sprite = Resources.Load("Berries/PurpleBerry"); newBerry.tag = "PurpleBerry"; } - else + else if (spawnProbability <= 0.985f) { spriteRenderer.sprite = Resources.Load("Berries/TimeSlowBerry"); newBerry.tag = "TimeSlowBerry"; } - - + else + { + spriteRenderer.sprite = Resources.Load("Berries/TimeFreezeBerry"); + newBerry.tag = "TimeFreezeBerry"; + } spriteRenderer.sortingOrder = -5; @@ -369,6 +381,7 @@ public class GamePlayer : MonoBehaviour GameObject[] speedyBerries = GameObject.FindGameObjectsWithTag("SpeedyBerry"); GameObject[] timeslowBerries = GameObject.FindGameObjectsWithTag("TimeSlowBerry"); GameObject[] purpleBerries = GameObject.FindGameObjectsWithTag("PurpleBerry"); + GameObject[] timefreezeBerries = GameObject.FindGameObjectsWithTag("TimeFreezeBerry"); if (!pausePanel.activeSelf) { @@ -391,7 +404,12 @@ public class GamePlayer : MonoBehaviour totalNormalBerries++; UpdateStats(1, 0); } - if (speedyLeft > 0) + + if (timefreezeLeft > 0) + { + normalBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, 0f); + } + else if (speedyLeft > 0) { normalBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -7.5f); } @@ -401,10 +419,10 @@ public class GamePlayer : MonoBehaviour } else { - normalBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); + normalBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); } - } + foreach (GameObject poisonBerry in poisonBerries) { if (poisonBerry.transform.position.y < 0f - Camera.main.orthographicSize - 1f) @@ -418,7 +436,12 @@ public class GamePlayer : MonoBehaviour totalPoisonBerries++; UpdateStats(0, 0); } - if (speedyLeft > 0) + + if (timefreezeLeft > 0) + { + poisonBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, 0f); + } + else if (speedyLeft > 0) { poisonBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -7.5f); } @@ -428,9 +451,10 @@ public class GamePlayer : MonoBehaviour } else { - poisonBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); + poisonBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); } } + foreach (GameObject slowBerry in slowBerries) { if (slowBerry.transform.position.y < 0f - Camera.main.orthographicSize - 1f) @@ -450,7 +474,12 @@ public class GamePlayer : MonoBehaviour UpdateStats(-1, 0); } } - if (speedyLeft > 0) + + if (timefreezeLeft > 0) + { + slowBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, 0f); + } + else if (speedyLeft > 0) { slowBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -7.5f); } @@ -460,9 +489,10 @@ public class GamePlayer : MonoBehaviour } else { - slowBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); + slowBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); } } + foreach (GameObject ultraBerry in ultraBerries) { if (ultraBerry.transform.position.y < 0f - Camera.main.orthographicSize - 1f) @@ -487,7 +517,12 @@ public class GamePlayer : MonoBehaviour UpdateStats(5, 0); } } - if (speedyLeft > 0) + + if (timefreezeLeft > 0) + { + ultraBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, 0f); + } + else if (speedyLeft > 0) { ultraBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -7.5f); } @@ -497,9 +532,10 @@ public class GamePlayer : MonoBehaviour } else { - ultraBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); + ultraBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); } } + foreach (GameObject speedyBerry in speedyBerries) { if (speedyBerry.transform.position.y < 0f - Camera.main.orthographicSize - 1f) @@ -517,7 +553,12 @@ public class GamePlayer : MonoBehaviour totalSpeedyBerries++; UpdateStats(10, 0); } - if (speedyLeft > 0) + + if (timefreezeLeft > 0) + { + speedyBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, 0f); + } + else if (speedyLeft > 0) { speedyBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -7.5f); } @@ -527,9 +568,10 @@ public class GamePlayer : MonoBehaviour } else { - speedyBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); + speedyBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); } } + foreach (GameObject timeslowBerry in timeslowBerries) { if (timeslowBerry.transform.position.y < 0f - Camera.main.orthographicSize - 1f) @@ -546,7 +588,12 @@ public class GamePlayer : MonoBehaviour totalTimeSlowBerries++; UpdateStats(1, 0); } - if (speedyLeft > 0) + + if (timefreezeLeft > 0) + { + timeslowBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, 0f); + } + else if (speedyLeft > 0) { timeslowBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -7.5f); } @@ -556,9 +603,10 @@ public class GamePlayer : MonoBehaviour } else { - timeslowBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); + timeslowBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); } } + foreach (GameObject purpleBerry in purpleBerries) { if (purpleBerry.transform.position.y < 0f - Camera.main.orthographicSize - 1f) @@ -572,7 +620,12 @@ public class GamePlayer : MonoBehaviour totalPurpleBerries++; UpdateStats(15, 0); } - if (speedyLeft > 0) + + if (timefreezeLeft > 0) + { + purpleBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, 0f); + } + else if (speedyLeft > 0) { purpleBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -7.5f); } @@ -585,6 +638,42 @@ public class GamePlayer : MonoBehaviour purpleBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); } } + + foreach (GameObject timefreezeBerry in timefreezeBerries) + { + if (timefreezeBerry.transform.position.y < 0f - Camera.main.orthographicSize - 1f) + { + Destroy(timefreezeBerry); + } + else if (UnityEngine.Vector3.Distance(bird.transform.position, timefreezeBerry.transform.position) < 1.5f) + { + AudioSource.PlayClipAtPoint(Resources.Load("Sounds/Eat"), Camera.main.transform.position, 1.2f * BazookaManager.Instance.GetSettingSFXVolume()); + Destroy(timefreezeBerry); + boostLeft = 0f; + speedyLeft = 0f; + timeslowLeft = 0f; + timefreezeLeft = 5f; + totalTimeFreezeBerries++; + } + + if (timefreezeLeft > 0) + { + timefreezeBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, 0f); + } + else if (speedyLeft > 0) + { + timefreezeBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -7.5f); + } + else if (timeslowLeft > 0) + { + timefreezeBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -2f); + } + else + { + timefreezeBerry.GetComponent().linearVelocity = new UnityEngine.Vector2(0f, -4f); + } + } + } else { @@ -597,6 +686,7 @@ public class GamePlayer : MonoBehaviour .Concat(speedyBerries) .Concat(timeslowBerries) .Concat(purpleBerries) + .Concat(timefreezeBerries) .ToArray(); foreach (GameObject berry in allberries) { @@ -615,6 +705,7 @@ public class GamePlayer : MonoBehaviour score = 0; boostLeft = 0f; timeslowLeft = 0f; + timefreezeLeft = 0f; slownessLeft = 0f; speedyLeft = 0f; UpdateStats(0, 1); @@ -626,6 +717,7 @@ public class GamePlayer : MonoBehaviour .Concat(GameObject.FindGameObjectsWithTag("SpeedyBerry")) .Concat(GameObject.FindGameObjectsWithTag("TimeSlowBerry")) .Concat(GameObject.FindGameObjectsWithTag("PurpleBerry")) + .Concat(GameObject.FindGameObjectsWithTag("TimeFreezeBerry")) .ToArray(); foreach (GameObject berry in allberries) { diff --git a/Assets/Scripts/StatsMenu.cs b/Assets/Scripts/StatsMenu.cs index 7c9d75b..ef30a99 100644 --- a/Assets/Scripts/StatsMenu.cs +++ b/Assets/Scripts/StatsMenu.cs @@ -17,6 +17,7 @@ public class StatsMenu : MonoBehaviour text.AppendLine("Total Speedy Berries: " + Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalSpeedyBerries())); text.AppendLine("Total Time Slow Berries: " + Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalTimeSlowBerries())); text.AppendLine("Total Purple Berries: " + Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalPurpleBerries())); + text.AppendLine("Total Time Freeze Berries: " + Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalTimeFreezeBerries())); text.AppendLine("Total Attempts: " + Tools.FormatWithCommas(BazookaManager.Instance.GetGameStoreTotalAttepts())); statText.text = text.ToString(); }