From 5b95753416600a189f91fe713072b6c8a035a4ab Mon Sep 17 00:00:00 2001 From: Cosmin Date: Tue, 13 Jul 2021 14:20:33 +0100 Subject: [PATCH 1/8] [Invaders] Upgrade Invaders to Unity 2020.3.13 LTS + a bunch of fixes and refactoring passes, read below - Game - rename all our alien prefabs to have a more generic name, the same principle was applied to our codebase, renamed variables/fields/classes to something more generic - Enemies: Rename our main enemy class to EnemyAgent + minor clean-ups + implement a grace shoot timer period - Rename AllienBullet to Enemy Bullet - InvadersGame: Some big refactories here, the UpdateEnemies function not outputs a set of flags (bitmask) rather than having separated booleans to keep track off - InvadersGame: Fix an edge case of the game loop where if the enemies would reach the bottom they would never respawn, now when they do reach that bottom boundary it will be game over - InvadersGame: Introduce additional game over reasons - LobbyControl: Introduce a minimum player count variable that could be tweaked in inspector so that the users can start playing in editor with just the host in the lobby - PlayerControl: Unified the NotifyGameOver function with the InvadersGame one + added different texts for all the possible game over reasons to be displayed --- .../Prefabs/Invaders Game Manager.prefab | 10 +- Basic/Invaders/Assets/Prefabs/bullet.prefab | 2 +- .../Prefabs/{alien1.prefab => enemy1.prefab} | 2 +- ...{alien1.prefab.meta => enemy1.prefab.meta} | 0 .../Prefabs/{alien2.prefab => enemy2.prefab} | 2 +- ...{alien2.prefab.meta => enemy2.prefab.meta} | 0 .../Prefabs/{alien3.prefab => enemy3.prefab} | 2 +- ...{alien3.prefab.meta => enemy3.prefab.meta} | 0 ...{alienbullet.prefab => enemyBullet.prefab} | 2 +- ...et.prefab.meta => enemyBullet.prefab.meta} | 0 .../{saucerr.prefab => superEnemy.prefab} | 2 +- ...err.prefab.meta => superEnemy.prefab.meta} | 0 Basic/Invaders/Assets/Scenes/InGame.unity | 15 +- .../Assets/Scenes/InvadersLobby.unity | 1 + .../{AlienInvader.cs => EnemyAgent.cs} | 73 +++--- ...lienInvader.cs.meta => EnemyAgent.cs.meta} | 0 .../{AlienBullet.cs => EnemyBullet.cs} | 2 +- ...lienBullet.cs.meta => EnemyBullet.cs.meta} | 0 Basic/Invaders/Assets/Scripts/InvadersGame.cs | 224 +++++++++++------- Basic/Invaders/Assets/Scripts/LobbyControl.cs | 8 +- Basic/Invaders/Assets/Scripts/PlayerBullet.cs | 8 +- .../Invaders/Assets/Scripts/PlayerControl.cs | 39 ++- .../{Saucer.cs => SuperEnemyMovement.cs} | 2 +- ...cer.cs.meta => SuperEnemyMovement.cs.meta} | 0 Basic/Invaders/Packages/manifest.json | 6 +- Basic/Invaders/Packages/packages-lock.json | 8 +- .../ProjectSettings/ProjectVersion.txt | 4 +- .../UserSettings/EditorUserSettings.asset | 6 + 28 files changed, 262 insertions(+), 156 deletions(-) rename Basic/Invaders/Assets/Prefabs/{alien1.prefab => enemy1.prefab} (99%) rename Basic/Invaders/Assets/Prefabs/{alien1.prefab.meta => enemy1.prefab.meta} (100%) rename Basic/Invaders/Assets/Prefabs/{alien2.prefab => enemy2.prefab} (99%) rename Basic/Invaders/Assets/Prefabs/{alien2.prefab.meta => enemy2.prefab.meta} (100%) rename Basic/Invaders/Assets/Prefabs/{alien3.prefab => enemy3.prefab} (99%) rename Basic/Invaders/Assets/Prefabs/{alien3.prefab.meta => enemy3.prefab.meta} (100%) rename Basic/Invaders/Assets/Prefabs/{alienbullet.prefab => enemyBullet.prefab} (99%) rename Basic/Invaders/Assets/Prefabs/{alienbullet.prefab.meta => enemyBullet.prefab.meta} (100%) rename Basic/Invaders/Assets/Prefabs/{saucerr.prefab => superEnemy.prefab} (99%) rename Basic/Invaders/Assets/Prefabs/{saucerr.prefab.meta => superEnemy.prefab.meta} (100%) rename Basic/Invaders/Assets/Scripts/{AlienInvader.cs => EnemyAgent.cs} (71%) rename Basic/Invaders/Assets/Scripts/{AlienInvader.cs.meta => EnemyAgent.cs.meta} (100%) rename Basic/Invaders/Assets/Scripts/{AlienBullet.cs => EnemyBullet.cs} (97%) rename Basic/Invaders/Assets/Scripts/{AlienBullet.cs.meta => EnemyBullet.cs.meta} (100%) rename Basic/Invaders/Assets/Scripts/{Saucer.cs => SuperEnemyMovement.cs} (92%) rename Basic/Invaders/Assets/Scripts/{Saucer.cs.meta => SuperEnemyMovement.cs.meta} (100%) diff --git a/Basic/Invaders/Assets/Prefabs/Invaders Game Manager.prefab b/Basic/Invaders/Assets/Prefabs/Invaders Game Manager.prefab index d68012808..dbfb0dfb4 100644 --- a/Basic/Invaders/Assets/Prefabs/Invaders Game Manager.prefab +++ b/Basic/Invaders/Assets/Prefabs/Invaders Game Manager.prefab @@ -44,10 +44,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d643b609c6a71c54984c1ad454faa28b, type: 3} m_Name: m_EditorClassIdentifier: - alien1Prefab: {fileID: 100000, guid: 43ae6ad1bdadd0747811bb7a00740c2c, type: 3} - alien2Prefab: {fileID: 100000, guid: 38a8441efb2d6d245adbf08f08705374, type: 3} - alien3Prefab: {fileID: 100000, guid: aa50d36274d0dfc4faff2c69820b3711, type: 3} - saucerPrefab: {fileID: 100000, guid: e811e4fb062e31444aaf36dbec5de77c, type: 3} + enemy1Prefab: {fileID: 100000, guid: 43ae6ad1bdadd0747811bb7a00740c2c, type: 3} + enemy2Prefab: {fileID: 100000, guid: 38a8441efb2d6d245adbf08f08705374, type: 3} + enemy3Prefab: {fileID: 100000, guid: aa50d36274d0dfc4faff2c69820b3711, type: 3} + superEnemyPrefab: {fileID: 100000, guid: e811e4fb062e31444aaf36dbec5de77c, type: 3} shieldPrefab: {fileID: 100000, guid: b990a6e6dcf54b646a7397028fed6045, type: 3} gameTimerText: {fileID: 0} scoreText: {fileID: 0} @@ -57,7 +57,7 @@ MonoBehaviour: m_DelayedStartTime: 5 m_TickPeriodic: m_InternalValue: 0.2 - m_AlienDirection: + m_EnemyMovingDirection: m_InternalValue: 0.3 m_RandomThresholdForSaucerCreation: 0.92 --- !u!114 &4266113290039088509 diff --git a/Basic/Invaders/Assets/Prefabs/bullet.prefab b/Basic/Invaders/Assets/Prefabs/bullet.prefab index 2d0b2b1af..ad3df2d00 100644 --- a/Basic/Invaders/Assets/Prefabs/bullet.prefab +++ b/Basic/Invaders/Assets/Prefabs/bullet.prefab @@ -100,7 +100,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: owner: {fileID: 0} - m_TravelSpeed: 6 + m_TravelSpeed: 7.25 --- !u!61 &6100000 BoxCollider2D: m_ObjectHideFlags: 0 diff --git a/Basic/Invaders/Assets/Prefabs/alien1.prefab b/Basic/Invaders/Assets/Prefabs/enemy1.prefab similarity index 99% rename from Basic/Invaders/Assets/Prefabs/alien1.prefab rename to Basic/Invaders/Assets/Prefabs/enemy1.prefab index 8b19a68b8..73b2ebd73 100644 --- a/Basic/Invaders/Assets/Prefabs/alien1.prefab +++ b/Basic/Invaders/Assets/Prefabs/enemy1.prefab @@ -16,7 +16,7 @@ GameObject: - component: {fileID: 4223722966607089368} - component: {fileID: 2037077820506562951} m_Layer: 0 - m_Name: alien1 + m_Name: enemy1 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Basic/Invaders/Assets/Prefabs/alien1.prefab.meta b/Basic/Invaders/Assets/Prefabs/enemy1.prefab.meta similarity index 100% rename from Basic/Invaders/Assets/Prefabs/alien1.prefab.meta rename to Basic/Invaders/Assets/Prefabs/enemy1.prefab.meta diff --git a/Basic/Invaders/Assets/Prefabs/alien2.prefab b/Basic/Invaders/Assets/Prefabs/enemy2.prefab similarity index 99% rename from Basic/Invaders/Assets/Prefabs/alien2.prefab rename to Basic/Invaders/Assets/Prefabs/enemy2.prefab index e5ff0221c..40c5834ec 100644 --- a/Basic/Invaders/Assets/Prefabs/alien2.prefab +++ b/Basic/Invaders/Assets/Prefabs/enemy2.prefab @@ -16,7 +16,7 @@ GameObject: - component: {fileID: 8401436849663568366} - component: {fileID: 1361474663871475650} m_Layer: 0 - m_Name: alien2 + m_Name: enemy2 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Basic/Invaders/Assets/Prefabs/alien2.prefab.meta b/Basic/Invaders/Assets/Prefabs/enemy2.prefab.meta similarity index 100% rename from Basic/Invaders/Assets/Prefabs/alien2.prefab.meta rename to Basic/Invaders/Assets/Prefabs/enemy2.prefab.meta diff --git a/Basic/Invaders/Assets/Prefabs/alien3.prefab b/Basic/Invaders/Assets/Prefabs/enemy3.prefab similarity index 99% rename from Basic/Invaders/Assets/Prefabs/alien3.prefab rename to Basic/Invaders/Assets/Prefabs/enemy3.prefab index 352bab233..9d152136f 100644 --- a/Basic/Invaders/Assets/Prefabs/alien3.prefab +++ b/Basic/Invaders/Assets/Prefabs/enemy3.prefab @@ -16,7 +16,7 @@ GameObject: - component: {fileID: 8349640660830732066} - component: {fileID: 7651551376209856180} m_Layer: 0 - m_Name: alien3 + m_Name: enemy3 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Basic/Invaders/Assets/Prefabs/alien3.prefab.meta b/Basic/Invaders/Assets/Prefabs/enemy3.prefab.meta similarity index 100% rename from Basic/Invaders/Assets/Prefabs/alien3.prefab.meta rename to Basic/Invaders/Assets/Prefabs/enemy3.prefab.meta diff --git a/Basic/Invaders/Assets/Prefabs/alienbullet.prefab b/Basic/Invaders/Assets/Prefabs/enemyBullet.prefab similarity index 99% rename from Basic/Invaders/Assets/Prefabs/alienbullet.prefab rename to Basic/Invaders/Assets/Prefabs/enemyBullet.prefab index 183e83d92..c1036e62e 100644 --- a/Basic/Invaders/Assets/Prefabs/alienbullet.prefab +++ b/Basic/Invaders/Assets/Prefabs/enemyBullet.prefab @@ -16,7 +16,7 @@ GameObject: - component: {fileID: 2336033219118315817} - component: {fileID: 5836440591138289839} m_Layer: 0 - m_Name: alienbullet + m_Name: enemyBullet m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Basic/Invaders/Assets/Prefabs/alienbullet.prefab.meta b/Basic/Invaders/Assets/Prefabs/enemyBullet.prefab.meta similarity index 100% rename from Basic/Invaders/Assets/Prefabs/alienbullet.prefab.meta rename to Basic/Invaders/Assets/Prefabs/enemyBullet.prefab.meta diff --git a/Basic/Invaders/Assets/Prefabs/saucerr.prefab b/Basic/Invaders/Assets/Prefabs/superEnemy.prefab similarity index 99% rename from Basic/Invaders/Assets/Prefabs/saucerr.prefab rename to Basic/Invaders/Assets/Prefabs/superEnemy.prefab index ef01d4191..f3e2ab90f 100644 --- a/Basic/Invaders/Assets/Prefabs/saucerr.prefab +++ b/Basic/Invaders/Assets/Prefabs/superEnemy.prefab @@ -17,7 +17,7 @@ GameObject: - component: {fileID: 8984612552865464625} - component: {fileID: 3955316467729786863} m_Layer: 0 - m_Name: saucerr + m_Name: superEnemy m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Basic/Invaders/Assets/Prefabs/saucerr.prefab.meta b/Basic/Invaders/Assets/Prefabs/superEnemy.prefab.meta similarity index 100% rename from Basic/Invaders/Assets/Prefabs/saucerr.prefab.meta rename to Basic/Invaders/Assets/Prefabs/superEnemy.prefab.meta diff --git a/Basic/Invaders/Assets/Scenes/InGame.unity b/Basic/Invaders/Assets/Scenes/InGame.unity index 013f307c8..35c574806 100644 --- a/Basic/Invaders/Assets/Scenes/InGame.unity +++ b/Basic/Invaders/Assets/Scenes/InGame.unity @@ -253,7 +253,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -146.79999} + m_AnchoredPosition: {x: 0, y: -75.218} m_SizeDelta: {x: 90, y: 30} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &16114619 @@ -557,7 +557,7 @@ MonoBehaviour: m_fontColor32: serializedVersion: 2 rgba: 4280690380 - m_fontColor: {r: 0.8018868, g: 0.14751692, b: 0.14751692, a: 1} + m_fontColor: {r: 0.990566, g: 0, b: 0.13591357, a: 1} m_enableVertexGradient: 0 m_colorMode: 3 m_fontColorGradient: @@ -809,7 +809,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -361.4607, y: -142} + m_AnchoredPosition: {x: -200, y: -52.172} m_SizeDelta: {x: 135.624, y: 46.0926} m_Pivot: {x: 1, y: 1} --- !u!114 &740254072 @@ -1332,7 +1332,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 0, y: -168.6} + m_AnchoredPosition: {x: 0, y: -109} m_SizeDelta: {x: 72.0173, y: 50} m_Pivot: {x: 0.5, y: 1} --- !u!114 &1087760897 @@ -1472,7 +1472,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 400, y: -123.363464} + m_AnchoredPosition: {x: 200, y: -56} m_SizeDelta: {x: 186.1548, y: 38.4365} m_Pivot: {x: 0, y: 1} --- !u!114 &1118830665 @@ -1846,11 +1846,6 @@ PrefabInstance: propertyPath: saucerSpawnPoint value: objectReference: {fileID: 1031245994} - - target: {fileID: 4266113290039088507, guid: 67eb58ec33df0475ca152786107f9037, - type: 3} - propertyPath: m_DelayedStartTime - value: 10 - objectReference: {fileID: 0} - target: {fileID: 4266113290039088508, guid: 67eb58ec33df0475ca152786107f9037, type: 3} propertyPath: m_Name diff --git a/Basic/Invaders/Assets/Scenes/InvadersLobby.unity b/Basic/Invaders/Assets/Scenes/InvadersLobby.unity index c99525c3e..b94942319 100644 --- a/Basic/Invaders/Assets/Scenes/InvadersLobby.unity +++ b/Basic/Invaders/Assets/Scenes/InvadersLobby.unity @@ -532,6 +532,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_InGameSceneName: InGame + m_MinimumPlayerCount: 2 LobbyText: {fileID: 888252281} --- !u!114 &698002441 MonoBehaviour: diff --git a/Basic/Invaders/Assets/Scripts/AlienInvader.cs b/Basic/Invaders/Assets/Scripts/EnemyAgent.cs similarity index 71% rename from Basic/Invaders/Assets/Scripts/AlienInvader.cs rename to Basic/Invaders/Assets/Scripts/EnemyAgent.cs index 6bee9b43b..0f57a442b 100644 --- a/Basic/Invaders/Assets/Scripts/AlienInvader.cs +++ b/Basic/Invaders/Assets/Scripts/EnemyAgent.cs @@ -4,22 +4,63 @@ using UnityEngine.Assertions; using Random = UnityEngine.Random; -public class AlienInvader : NetworkBehaviour +public class EnemyAgent : NetworkBehaviour { private const float k_ShootingRandomThreshold = 0.996f; - private const float k_ShootTimer = 0.75f; - [Header("Alien Settings")] + private const float k_ShootTimer = 1.25f; + [Header("Enemy Settings")] public int score = 50; public GameObject bulletPrefab; + public float GraceShootingPeriod = 1.0f; // A period of time in which the enemy will not shoot at the start public bool canShoot { get; set; } public float column { get; private set; } public float row { get; private set; } private float m_ShootTimer = 0.0f; + private float m_FirstShootTimeAfterSpawn = 0.0f; + public void Awake() + { + canShoot = false; + m_FirstShootTimeAfterSpawn = Single.PositiveInfinity; + } + + public override void NetworkStart() + { + base.NetworkStart(); + + if (IsServer) + { + canShoot = false; + if (score == 100) + return; + + m_FirstShootTimeAfterSpawn = + Time.time + Random.Range(GraceShootingPeriod - 0.1f, GraceShootingPeriod + 0.75f); + + Assert.IsTrue(InvadersGame.Singleton); + InvadersGame.Singleton.RegisterSpawnableObject(InvadersObjectType.Enemy, gameObject); + InvadersGame.Singleton.isGameOver.OnValueChanged += OnGameOver; + } + } + + protected void OnDestroy() + { + if (!InvadersGame.Singleton) return; + + if (IsServer) InvadersGame.Singleton.UnregisterSpawnableObject(InvadersObjectType.Enemy, gameObject); + InvadersGame.Singleton.isGameOver.OnValueChanged -= OnGameOver; + } + private void Update() { + if (Time.time <= m_FirstShootTimeAfterSpawn) + { + // Wait for the grace shooting period to pass + return; + } + bool bCanShootThisFrame = false; if (IsServer && canShoot) if (Random.Range(0, 1.0f) > k_ShootingRandomThreshold) @@ -30,7 +71,7 @@ private void Update() else { if (!bCanShootThisFrame) return; - m_ShootTimer = k_ShootTimer; + m_ShootTimer = Random.Range(k_ShootTimer - 0.05f, k_ShootTimer + 0.25f); SpawnBullet(); return; } @@ -42,14 +83,6 @@ private void SpawnBullet() myBullet.GetComponent().Spawn(); } - protected void OnDestroy() - { - if (!InvadersGame.Singleton) return; - - if (IsServer) InvadersGame.Singleton.UnregisterSpawnableObject(InvadersObjectType.Alien, gameObject); - InvadersGame.Singleton.isGameOver.OnValueChanged -= OnGameOver; - } - private void OnTriggerEnter2D(Collider2D collider) { if (!IsServer) return; @@ -58,22 +91,6 @@ private void OnTriggerEnter2D(Collider2D collider) if (hitShield != null) Destroy(hitShield.gameObject); } - public override void NetworkStart() - { - base.NetworkStart(); - - if (IsServer) - { - canShoot = false; - if (score == 100) - return; - - Assert.IsTrue(InvadersGame.Singleton); - InvadersGame.Singleton.RegisterSpawnableObject(InvadersObjectType.Alien, gameObject); - InvadersGame.Singleton.isGameOver.OnValueChanged += OnGameOver; - } - } - private void OnGameOver(bool oldValue, bool newValue) { // Is there anything we need to add in here? diff --git a/Basic/Invaders/Assets/Scripts/AlienInvader.cs.meta b/Basic/Invaders/Assets/Scripts/EnemyAgent.cs.meta similarity index 100% rename from Basic/Invaders/Assets/Scripts/AlienInvader.cs.meta rename to Basic/Invaders/Assets/Scripts/EnemyAgent.cs.meta diff --git a/Basic/Invaders/Assets/Scripts/AlienBullet.cs b/Basic/Invaders/Assets/Scripts/EnemyBullet.cs similarity index 97% rename from Basic/Invaders/Assets/Scripts/AlienBullet.cs rename to Basic/Invaders/Assets/Scripts/EnemyBullet.cs index 61d0ea81a..e848e2e65 100644 --- a/Basic/Invaders/Assets/Scripts/AlienBullet.cs +++ b/Basic/Invaders/Assets/Scripts/EnemyBullet.cs @@ -3,7 +3,7 @@ using UnityEngine; using UnityEngine.Assertions; -public class AlienBullet : MonoBehaviour +public class EnemyBullet : MonoBehaviour { private const float k_YBoundary = -4.0f; diff --git a/Basic/Invaders/Assets/Scripts/AlienBullet.cs.meta b/Basic/Invaders/Assets/Scripts/EnemyBullet.cs.meta similarity index 100% rename from Basic/Invaders/Assets/Scripts/AlienBullet.cs.meta rename to Basic/Invaders/Assets/Scripts/EnemyBullet.cs.meta diff --git a/Basic/Invaders/Assets/Scripts/InvadersGame.cs b/Basic/Invaders/Assets/Scripts/InvadersGame.cs index c6c2a35dd..1ee2d01b5 100644 --- a/Basic/Invaders/Assets/Scripts/InvadersGame.cs +++ b/Basic/Invaders/Assets/Scripts/InvadersGame.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using MLAPI; using MLAPI.Connection; +using MLAPI.Messaging; using MLAPI.NetworkVariable; using TMPro; using UnityEngine; @@ -10,20 +11,41 @@ public enum InvadersObjectType { - Alien = 1, + Enemy = 1, Shield, Max } +[Flags] +public enum UpdateEnemiesResultFlags : byte +{ + None = 0x0000, + FoundEnemy = 0x0001, // Found at least one eligible enemy to continue, without creating a new set + ReachedHorizontalBoundary = 0x0002, // If at least one of the enemies reached either left or right boundary + ReachedBottom = 0x004, // If at least one of the enemies reached the bottom boundary the game is over + Max +} + +public enum GameOverReason : byte +{ + None = 0, + EnemiesReachedBottom = 1, + Death = 2, + Max, +} + public class InvadersGame : NetworkBehaviour { - // The vertical offset we apply to each Alien transform once they touch an edge - private const float k_AlienVerticalMovementOffset = -0.8f; + // The vertical offset we apply to each Enemy transform once they touch an edge + private const float k_EnemyVerticalMovementOffset = -0.8f; + private const float k_LeftOrRightBoundaryOffset = 10.0f; + private const float k_BottomBoundaryOffset = 1.25f; + [Header("Prefab settings")] - public GameObject alien1Prefab; - public GameObject alien2Prefab; - public GameObject alien3Prefab; - public GameObject saucerPrefab; + public GameObject enemy1Prefab; + public GameObject enemy2Prefab; + public GameObject enemy3Prefab; + public GameObject superEnemyPrefab; public GameObject shieldPrefab; [Header("UI Settings")] @@ -43,12 +65,12 @@ public class InvadersGame : NetworkBehaviour private NetworkVariableFloat m_TickPeriodic = new NetworkVariableFloat(0.2f); [SerializeField] - private NetworkVariableFloat m_AlienDirection = new NetworkVariableFloat(0.3f); + private NetworkVariableFloat m_EnemyMovingDirection = new NetworkVariableFloat(0.3f); [SerializeField] private float m_RandomThresholdForSaucerCreation = 0.92f; - private List m_Aliens = new List(); + private List m_Enemies = new List(); //These help to simplify checking server vs client //[NSS]: This would also be a great place to add a state machine and use networked vars for this @@ -127,7 +149,7 @@ protected void OnDestroy() { if (IsServer) { - m_Aliens.Clear(); + m_Enemies.Clear(); m_Shields.Clear(); } } @@ -268,90 +290,105 @@ private void UpdateGameTimer() /// /// OnGameStarted - /// Only invoked by the server, this hides the timer text and initializes the aliens and level + /// Only invoked by the server, this hides the timer text and initializes the enemies and level /// private void OnGameStarted() { gameTimerText.gameObject.SetActive(false); - CreateAliens(); + CreateEnemies(); CreateShields(); - CreateSaucer(); + CreateSuperEnemy(); } private void UpdateEnemies() { - // update aliens + // Update enemies if (Time.time >= m_NextTick) { m_NextTick = Time.time + m_TickPeriodic.Value; - var foundEdge = false; - var foundEligibleAlienEnemy = false; - UpdateShootingEnemies(ref foundEligibleAlienEnemy, ref foundEdge); + UpdateEnemiesResultFlags enemiesResultFlags = UpdateEnemiesResultFlags.None; + UpdateShootingEnemies(ref enemiesResultFlags); - if (!foundEligibleAlienEnemy) + if((enemiesResultFlags & UpdateEnemiesResultFlags.ReachedBottom) != 0) + { + // Force game end as at least one of the enemies have reached the bottom! + SetGameEnd(GameOverReason.EnemiesReachedBottom); + return; + } + + // If we didn't find any enemies, then spawn some + if ((enemiesResultFlags & UpdateEnemiesResultFlags.FoundEnemy) == 0) { - CreateAliens(); + CreateEnemies(); m_TickPeriodic.Value = 0.2f; } - if (foundEdge) + // If the enemies reached the either side of the boundaries, then change the movement direction + // And move them to the next row below + if ((enemiesResultFlags & UpdateEnemiesResultFlags.ReachedHorizontalBoundary) != 0) { - m_AlienDirection.Value = -m_AlienDirection.Value; + m_EnemyMovingDirection.Value = -m_EnemyMovingDirection.Value; m_TickPeriodic.Value *= 0.95f; // get faster - var aliensCount = m_Aliens.Count; - for (var index = 0; index < aliensCount; index++) + var enemiesCount = m_Enemies.Count; + for (var index = 0; index < enemiesCount; index++) { - var alien = m_Aliens[index]; - alien.transform.Translate(0, k_AlienVerticalMovementOffset, 0); + var enemy = m_Enemies[index]; + enemy.transform.Translate(0, k_EnemyVerticalMovementOffset, 0); } } if (m_Saucer == null) if (Random.Range(0, 1.0f) > m_RandomThresholdForSaucerCreation) - CreateSaucer(); + CreateSuperEnemy(); } } - private bool UpdateShootingEnemies(ref bool foundAlien, ref bool foundEdge) + private void UpdateShootingEnemies(ref UpdateEnemiesResultFlags flags) { - var aliensCount = m_Aliens.Count; - for (var index = 0; index < aliensCount; index++) + flags = UpdateEnemiesResultFlags.None; + var enemiesCount = m_Enemies.Count; + for (var index = 0; index < enemiesCount; index++) { - var alien = m_Aliens[index]; - Assert.IsTrue(alien); - - if (alien.score > 100) + var enemy = m_Enemies[index]; + Assert.IsTrue(enemy); + + // If at least one of the enemies reached bottom, return early. + if (enemy.transform.position.y <= k_BottomBoundaryOffset) + { + flags |= UpdateEnemiesResultFlags.ReachedBottom; + return; + } + + if (enemy.score > 100) continue; - foundAlien = true; - alien.transform.position += new Vector3(m_AlienDirection.Value, 0, 0); + flags |= UpdateEnemiesResultFlags.FoundEnemy; + enemy.transform.position += new Vector3(m_EnemyMovingDirection.Value, 0, 0); - if (alien.transform.position.x > 10 || alien.transform.position.x < -10) - foundEdge = true; + if (enemy.transform.position.x > k_LeftOrRightBoundaryOffset || enemy.transform.position.x < -k_LeftOrRightBoundaryOffset) + flags |= UpdateEnemiesResultFlags.ReachedHorizontalBoundary; // can shoot if the lowest in my column var canShoot = true; - var column = alien.column; - var row = alien.row; - for (var otherIndex = 0; otherIndex < aliensCount; otherIndex++) + var column = enemy.column; + var row = enemy.row; + for (var otherIndex = 0; otherIndex < enemiesCount; otherIndex++) { - var otherAlien = m_Aliens[otherIndex]; - Assert.IsTrue(otherAlien != null); + var otherEnemy = m_Enemies[otherIndex]; + Assert.IsTrue(otherEnemy != null); - if (Math.Abs(otherAlien.column - column) < 0.001f) - if (otherAlien.row < row) + if (Math.Abs(otherEnemy.column - column) < 0.001f) + if (otherEnemy.row < row) { canShoot = false; break; } } - alien.canShoot = canShoot; + enemy.canShoot = canShoot; } - - return foundAlien; } public void SetScore(int score) @@ -366,27 +403,46 @@ public void SetLives(int lives) public void DisplayGameOverText(string message) { - if (gameOverText) gameOverText.gameObject.SetActive(true); + if (gameOverText) + { + gameOverText.SetText(message); + gameOverText.gameObject.SetActive(true); + } } - public void SetGameEnd(bool isGameOver) + public void SetGameEnd(GameOverReason reason) { Assert.IsTrue(IsServer, "SetGameEnd should only be called server side!"); // We should only end the game if all the player's are dead - if (isGameOver) + if (reason != GameOverReason.Death) { - foreach (NetworkClient networkedClient in NetworkManager.Singleton.ConnectedClientsList) - { - var playerObject = networkedClient.PlayerObject; - if(playerObject == null) continue; - - // We should just early out if any of the player's are still alive - if (playerObject.GetComponent().IsAlive) - return; - } + this.isGameOver.Value = true; + BroadcastGameOverClientRpc(reason); // Notify our clients! + return; } - this.isGameOver.Value = isGameOver; + + foreach (NetworkClient networkedClient in NetworkManager.Singleton.ConnectedClientsList) + { + var playerObject = networkedClient.PlayerObject; + if(playerObject == null) continue; + + // We should just early out if any of the player's are still alive + if (playerObject.GetComponent().IsAlive) + return; + } + + this.isGameOver.Value = true; + } + + [ClientRpc] + public void BroadcastGameOverClientRpc(GameOverReason reason) + { + var localPlayerObject = NetworkManager.Singleton.ConnectedClients[NetworkManager.Singleton.LocalClientId].PlayerObject; + Assert.IsNotNull(localPlayerObject); + + if (localPlayerObject.TryGetComponent(out var playerControl)) + playerControl.NotifyGameOver(reason); } public void RegisterSpawnableObject(InvadersObjectType invadersObjectType, GameObject gameObject) @@ -395,16 +451,16 @@ public void RegisterSpawnableObject(InvadersObjectType invadersObjectType, GameO switch (invadersObjectType) { - case InvadersObjectType.Alien: + case InvadersObjectType.Enemy: { // Don't register if this is a saucer - if (gameObject.TryGetComponent(out var saucer)) + if (gameObject.TryGetComponent(out var saucer)) return; - gameObject.TryGetComponent(out var alienInvader); - Assert.IsTrue(alienInvader != null); - if (!m_Aliens.Contains(alienInvader)) - m_Aliens.Add(alienInvader); + gameObject.TryGetComponent(out var enemyAgent); + Assert.IsTrue(enemyAgent != null); + if (!m_Enemies.Contains(enemyAgent)) + m_Enemies.Add(enemyAgent); break; } case InvadersObjectType.Shield: @@ -426,16 +482,16 @@ public void UnregisterSpawnableObject(InvadersObjectType invadersObjectType, Gam switch (invadersObjectType) { - case InvadersObjectType.Alien: + case InvadersObjectType.Enemy: { // Don't unregister if this is a saucer - if (gameObject.TryGetComponent(out var saucer)) + if (gameObject.TryGetComponent(out var saucer)) return; - gameObject.TryGetComponent(out var alienInvader); - Assert.IsTrue(alienInvader != null); - if (m_Aliens.Contains(alienInvader)) - Assert.IsTrue(m_Aliens.Remove(alienInvader)); + gameObject.TryGetComponent(out var enemyAgent); + Assert.IsTrue(enemyAgent != null); + if (m_Enemies.Contains(enemyAgent)) + Assert.IsTrue(m_Enemies.Remove(enemyAgent)); break; } case InvadersObjectType.Shield: @@ -497,48 +553,48 @@ private void CreateShields() CreateShield(shieldPrefab, 7, -1); } - private void CreateSaucer() + private void CreateSuperEnemy() { Assert.IsTrue(IsServer, "Create Saucer should be called server-side only!"); - m_Saucer = Instantiate(saucerPrefab, saucerSpawnPoint.position, Quaternion.identity); + m_Saucer = Instantiate(superEnemyPrefab, saucerSpawnPoint.position, Quaternion.identity); // Spawn the Networked Object, this should notify the clients m_Saucer.GetComponent().Spawn(); } - private void CreateAlien(GameObject prefab, float posX, float posY) + private void CreateEnemy(GameObject prefab, float posX, float posY) { - Assert.IsTrue(IsServer, "Create Alien should be called server-side only!"); + Assert.IsTrue(IsServer, "Create Enemy should be called server-side only!"); - var newAlien = Instantiate(prefab); - newAlien.transform.position = new Vector3(posX, posY, 0.0f); - newAlien.GetComponent().Setup(Mathf.RoundToInt(posX), Mathf.RoundToInt(posY)); + var enemy = Instantiate(prefab); + enemy.transform.position = new Vector3(posX, posY, 0.0f); + enemy.GetComponent().Setup(Mathf.RoundToInt(posX), Mathf.RoundToInt(posY)); // Spawn the Networked Object, this should notify the clients - newAlien.GetComponent().Spawn(); + enemy.GetComponent().Spawn(); } - public void CreateAliens() + public void CreateEnemies() { float startx = -8; for (var i = 0; i < 10; i++) { - CreateAlien(alien1Prefab, startx, 12); + CreateEnemy(enemy1Prefab, startx, 12); startx += 1.6f; } startx = -8; for (var i = 0; i < 10; i++) { - CreateAlien(alien2Prefab, startx, 10); + CreateEnemy(enemy2Prefab, startx, 10); startx += 1.6f; } startx = -8; for (var i = 0; i < 10; i++) { - CreateAlien(alien3Prefab, startx, 8); + CreateEnemy(enemy3Prefab, startx, 8); startx += 1.6f; } } diff --git a/Basic/Invaders/Assets/Scripts/LobbyControl.cs b/Basic/Invaders/Assets/Scripts/LobbyControl.cs index 1d2c66e3e..6e2e1cad1 100644 --- a/Basic/Invaders/Assets/Scripts/LobbyControl.cs +++ b/Basic/Invaders/Assets/Scripts/LobbyControl.cs @@ -12,6 +12,11 @@ public class LobbyControl : NetworkBehaviour [SerializeField] private string m_InGameSceneName = "InGame"; + + // Minimum player count required to transition to next level + [SerializeField] + private int m_MinimumPlayerCount = 2; + public Text LobbyText; private bool m_AllPlayersInLobby; @@ -84,8 +89,7 @@ private void GenerateUserStatsForLobby() /// private void UpdateAndCheckPlayersInLobby() { - //This is game preference, but I am assuming at least 2 players? - m_AllPlayersInLobby = m_ClientsInLobby.Count > 1; + m_AllPlayersInLobby = m_ClientsInLobby.Count >= m_MinimumPlayerCount; foreach (var clientLobbyStatus in m_ClientsInLobby) { diff --git a/Basic/Invaders/Assets/Scripts/PlayerBullet.cs b/Basic/Invaders/Assets/Scripts/PlayerBullet.cs index 4a7227008..9282a6165 100644 --- a/Basic/Invaders/Assets/Scripts/PlayerBullet.cs +++ b/Basic/Invaders/Assets/Scripts/PlayerBullet.cs @@ -26,12 +26,12 @@ private void OnTriggerEnter2D(Collider2D collider) if (!NetworkManager.Singleton.IsServer) return; - var hitAlien = collider.gameObject.GetComponent(); - if (hitAlien != null && owner) + var hitEnemy = collider.gameObject.GetComponent(); + if (hitEnemy != null && owner) { - owner.IncreasePlayerScore(hitAlien.score); + owner.IncreasePlayerScore(hitEnemy.score); - Destroy(hitAlien.gameObject); + Destroy(hitEnemy.gameObject); Destroy(gameObject); return; } diff --git a/Basic/Invaders/Assets/Scripts/PlayerControl.cs b/Basic/Invaders/Assets/Scripts/PlayerControl.cs index 73d5f233c..bab5b4a46 100644 --- a/Basic/Invaders/Assets/Scripts/PlayerControl.cs +++ b/Basic/Invaders/Assets/Scripts/PlayerControl.cs @@ -166,10 +166,11 @@ private void InGameUpdate() if (deltaX != 0) { var newMovement = new Vector3(deltaX, 0, 0); - transform.position = Vector3.MoveTowards(transform.position, transform.position + newMovement, m_MoveSpeed * Time.deltaTime); + transform.position = Vector3.MoveTowards(transform.position, + transform.position + newMovement, m_MoveSpeed * Time.deltaTime); } - if (Input.GetKey(KeyCode.Space)) ShootServerRPC(); + if (Input.GetKeyDown(KeyCode.Space)) ShootServerRPC(); } [ServerRpc] @@ -199,15 +200,41 @@ public void HitByBullet() m_IsAlive = false; m_MoveX.Value = 0; m_Lives.Value = 0; - InvadersGame.Singleton.SetGameEnd(true); - NotifyDeathClientRpc(m_OwnerRPCParams); + InvadersGame.Singleton.SetGameEnd(GameOverReason.Death); + NotifyGameOverClientRpc(GameOverReason.Death, m_OwnerRPCParams); } } [ClientRpc] - public void NotifyDeathClientRpc(ClientRpcParams clientParams) + private void NotifyGameOverClientRpc(GameOverReason reason, ClientRpcParams clientParams) { + NotifyGameOver(reason); + } + + /// + /// This should only be called locally, either through NotifyGameOverClientRpc or through the InvadersGame.BroadcastGameOverReason + /// + /// + /// + public void NotifyGameOver(GameOverReason reason) + { + Assert.IsTrue(IsLocalPlayer); m_HasGameStarted = false; - InvadersGame.Singleton.DisplayGameOverText("You Are Dead!"); + switch (reason) + { + case GameOverReason.None: + InvadersGame.Singleton.DisplayGameOverText("You have lost! \n Unknown reason!"); + break; + case GameOverReason.EnemiesReachedBottom: + InvadersGame.Singleton.DisplayGameOverText("You have lost! \n The enemies have invaded you!"); + break; + case GameOverReason.Death: + InvadersGame.Singleton.DisplayGameOverText("You have lost! \n Your health was depleted!"); + break; + case GameOverReason.Max: + break; + default: + throw new ArgumentOutOfRangeException(nameof(reason), reason, null); + } } } diff --git a/Basic/Invaders/Assets/Scripts/Saucer.cs b/Basic/Invaders/Assets/Scripts/SuperEnemyMovement.cs similarity index 92% rename from Basic/Invaders/Assets/Scripts/Saucer.cs rename to Basic/Invaders/Assets/Scripts/SuperEnemyMovement.cs index db83894ac..0072706dd 100644 --- a/Basic/Invaders/Assets/Scripts/Saucer.cs +++ b/Basic/Invaders/Assets/Scripts/SuperEnemyMovement.cs @@ -2,7 +2,7 @@ using MLAPI; using UnityEngine; -public class Saucer : MonoBehaviour +public class SuperEnemyMovement : MonoBehaviour { private const float k_YBoundary = 14.0f; diff --git a/Basic/Invaders/Assets/Scripts/Saucer.cs.meta b/Basic/Invaders/Assets/Scripts/SuperEnemyMovement.cs.meta similarity index 100% rename from Basic/Invaders/Assets/Scripts/Saucer.cs.meta rename to Basic/Invaders/Assets/Scripts/SuperEnemyMovement.cs.meta diff --git a/Basic/Invaders/Packages/manifest.json b/Basic/Invaders/Packages/manifest.json index 41ddeaf1c..1008a3b8f 100644 --- a/Basic/Invaders/Packages/manifest.json +++ b/Basic/Invaders/Packages/manifest.json @@ -1,11 +1,11 @@ { "dependencies": { "com.unity.ide.rider": "2.0.7", - "com.unity.ide.visualstudio": "2.0.7", + "com.unity.ide.visualstudio": "2.0.9", "com.unity.ide.vscode": "1.2.3", "com.unity.multiplayer.mlapi": "https://github.com/Unity-Technologies/com.unity.multiplayer.mlapi.git?path=/com.unity.multiplayer.mlapi#release/0.1.0", - "com.unity.textmeshpro": "3.0.3", - "com.unity.timeline": "1.4.7", + "com.unity.textmeshpro": "3.0.6", + "com.unity.timeline": "1.4.8", "com.unity.ugui": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.animation": "1.0.0", diff --git a/Basic/Invaders/Packages/packages-lock.json b/Basic/Invaders/Packages/packages-lock.json index d14b780ee..351e1ddb8 100644 --- a/Basic/Invaders/Packages/packages-lock.json +++ b/Basic/Invaders/Packages/packages-lock.json @@ -17,7 +17,7 @@ "url": "https://packages.unity.com" }, "com.unity.ide.visualstudio": { - "version": "2.0.7", + "version": "2.0.9", "depth": 0, "source": "registry", "dependencies": { @@ -49,7 +49,7 @@ "url": "https://packages.unity.com" }, "com.unity.test-framework": { - "version": "1.1.24", + "version": "1.1.26", "depth": 1, "source": "registry", "dependencies": { @@ -60,7 +60,7 @@ "url": "https://packages.unity.com" }, "com.unity.textmeshpro": { - "version": "3.0.3", + "version": "3.0.6", "depth": 0, "source": "registry", "dependencies": { @@ -69,7 +69,7 @@ "url": "https://packages.unity.com" }, "com.unity.timeline": { - "version": "1.4.7", + "version": "1.4.8", "depth": 0, "source": "registry", "dependencies": { diff --git a/Basic/Invaders/ProjectSettings/ProjectVersion.txt b/Basic/Invaders/ProjectSettings/ProjectVersion.txt index 8c1bcbd3b..95c2fc987 100644 --- a/Basic/Invaders/ProjectSettings/ProjectVersion.txt +++ b/Basic/Invaders/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2020.3.7f1 -m_EditorVersionWithRevision: 2020.3.7f1 (dd97f2c94397) +m_EditorVersion: 2020.3.13f1 +m_EditorVersionWithRevision: 2020.3.13f1 (71691879b7f5) diff --git a/Basic/Invaders/UserSettings/EditorUserSettings.asset b/Basic/Invaders/UserSettings/EditorUserSettings.asset index fbd638e8d..cf1bd99c5 100644 --- a/Basic/Invaders/UserSettings/EditorUserSettings.asset +++ b/Basic/Invaders/UserSettings/EditorUserSettings.asset @@ -6,8 +6,14 @@ EditorUserSettings: serializedVersion: 4 m_ConfigSettings: RecentlyUsedScenePath-0: + value: 22424703114646680e0b0227036c761e3116152f623d28393930 + flags: 0 + RecentlyUsedScenePath-1: value: 22424703114646680e0b0227036c761e1f033a25233c15243f280d7df7ee3d2cfb flags: 0 + RecentlyUsedScenePath-2: + value: 22424703114646680e0b0227036c761e00161c2f3e3b0a3f2f2b047df7ee3d2cfb + flags: 0 vcSharedLogLevel: value: 0d5e400f0650 flags: 0 From 9ec4d5f5c7fdb5a4d1c6d8cdeed7691d15883ed7 Mon Sep 17 00:00:00 2001 From: Christopher Pope Date: Wed, 14 Jul 2021 16:07:24 +0100 Subject: [PATCH 2/8] Added Graphics (replaces old Alien and Saucer style art) Updated all enemy, player and saucer graphics --- Basic/Invaders/Assets/Prefabs/enemy1.prefab | 3 +- Basic/Invaders/Assets/Prefabs/enemy2.prefab | 3 +- Basic/Invaders/Assets/Prefabs/enemy3.prefab | 3 +- Basic/Invaders/Assets/Prefabs/player 1.prefab | 4 +- Basic/Invaders/Assets/Prefabs/player.prefab | 4 +- .../Invaders/Assets/Prefabs/superEnemy.prefab | 5 +- .../Assets/Scenes/InvadersLobby.unity | 10 +- Basic/Invaders/Assets/Scenes/StartMenu.unity | 10 +- Basic/Invaders/Assets/Sprites/enemy1.png | Bin 0 -> 2254 bytes Basic/Invaders/Assets/Sprites/enemy1.png.meta | 108 ++++++++++++++++++ Basic/Invaders/Assets/Sprites/enemy2.png | Bin 0 -> 3986 bytes Basic/Invaders/Assets/Sprites/enemy2.png.meta | 108 ++++++++++++++++++ Basic/Invaders/Assets/Sprites/enemy3.png | Bin 0 -> 2112 bytes Basic/Invaders/Assets/Sprites/enemy3.png.meta | 108 ++++++++++++++++++ Basic/Invaders/Assets/Sprites/player ship.png | Bin 0 -> 2775 bytes .../Assets/Sprites/player ship.png.meta | 108 ++++++++++++++++++ Basic/Invaders/Assets/Sprites/saucer.png | Bin 0 -> 1959 bytes Basic/Invaders/Assets/Sprites/saucer.png.meta | 108 ++++++++++++++++++ .../ProjectSettings/ProjectSettings.asset | 3 +- .../UserSettings/EditorUserSettings.asset | 3 + 20 files changed, 568 insertions(+), 20 deletions(-) create mode 100644 Basic/Invaders/Assets/Sprites/enemy1.png create mode 100644 Basic/Invaders/Assets/Sprites/enemy1.png.meta create mode 100644 Basic/Invaders/Assets/Sprites/enemy2.png create mode 100644 Basic/Invaders/Assets/Sprites/enemy2.png.meta create mode 100644 Basic/Invaders/Assets/Sprites/enemy3.png create mode 100644 Basic/Invaders/Assets/Sprites/enemy3.png.meta create mode 100644 Basic/Invaders/Assets/Sprites/player ship.png create mode 100644 Basic/Invaders/Assets/Sprites/player ship.png.meta create mode 100644 Basic/Invaders/Assets/Sprites/saucer.png create mode 100644 Basic/Invaders/Assets/Sprites/saucer.png.meta diff --git a/Basic/Invaders/Assets/Prefabs/enemy1.prefab b/Basic/Invaders/Assets/Prefabs/enemy1.prefab index 73b2ebd73..b0acf623e 100644 --- a/Basic/Invaders/Assets/Prefabs/enemy1.prefab +++ b/Basic/Invaders/Assets/Prefabs/enemy1.prefab @@ -76,7 +76,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 21300000, guid: 46fc833f46553be4bae0ba363af8e5b7, type: 3} + m_Sprite: {fileID: 21300000, guid: 4ab7e7189ab754124aa83e1fa63dc0c2, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -101,6 +101,7 @@ MonoBehaviour: m_EditorClassIdentifier: score: 10 bulletPrefab: {fileID: 100000, guid: ac6ffb0923d0f7448852a32312a0263c, type: 3} + GraceShootingPeriod: 1 --- !u!61 &6100000 BoxCollider2D: m_ObjectHideFlags: 0 diff --git a/Basic/Invaders/Assets/Prefabs/enemy2.prefab b/Basic/Invaders/Assets/Prefabs/enemy2.prefab index 40c5834ec..8700ed562 100644 --- a/Basic/Invaders/Assets/Prefabs/enemy2.prefab +++ b/Basic/Invaders/Assets/Prefabs/enemy2.prefab @@ -76,7 +76,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 21300000, guid: bb17efd32f1b62b47b9d3876d96c0b2c, type: 3} + m_Sprite: {fileID: 21300000, guid: 6416b5a3e55ca443985a9882ff71d879, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -101,6 +101,7 @@ MonoBehaviour: m_EditorClassIdentifier: score: 20 bulletPrefab: {fileID: 100000, guid: ac6ffb0923d0f7448852a32312a0263c, type: 3} + GraceShootingPeriod: 1 --- !u!61 &6100000 BoxCollider2D: m_ObjectHideFlags: 0 diff --git a/Basic/Invaders/Assets/Prefabs/enemy3.prefab b/Basic/Invaders/Assets/Prefabs/enemy3.prefab index 9d152136f..067c48c10 100644 --- a/Basic/Invaders/Assets/Prefabs/enemy3.prefab +++ b/Basic/Invaders/Assets/Prefabs/enemy3.prefab @@ -76,7 +76,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 21300000, guid: 33ed2981c8de0d44b9881e822df7a931, type: 3} + m_Sprite: {fileID: 21300000, guid: b8a22d7f951c14967b823fdb049384a8, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -101,6 +101,7 @@ MonoBehaviour: m_EditorClassIdentifier: score: 30 bulletPrefab: {fileID: 100000, guid: ac6ffb0923d0f7448852a32312a0263c, type: 3} + GraceShootingPeriod: 1 --- !u!61 &6100000 BoxCollider2D: m_ObjectHideFlags: 0 diff --git a/Basic/Invaders/Assets/Prefabs/player 1.prefab b/Basic/Invaders/Assets/Prefabs/player 1.prefab index f05cf55da..0683599c3 100644 --- a/Basic/Invaders/Assets/Prefabs/player 1.prefab +++ b/Basic/Invaders/Assets/Prefabs/player 1.prefab @@ -75,7 +75,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 21300000, guid: 6e31b7ae591614d4396749e68a6ba020, type: 3} + m_Sprite: {fileID: 21300000, guid: ccc6b3ea84f7e4550b618abc8d06dd5d, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -119,7 +119,7 @@ BoxCollider2D: m_SpriteTilingProperty: border: {x: 0, y: 0, z: 0, w: 0} pivot: {x: 0.5, y: 0.5} - oldSize: {x: 1.28, y: 0.84} + oldSize: {x: 1.28, y: 1.28} newSize: {x: 1, y: 1} adaptiveTilingThreshold: 0.5 drawMode: 0 diff --git a/Basic/Invaders/Assets/Prefabs/player.prefab b/Basic/Invaders/Assets/Prefabs/player.prefab index 6a1ac9ad0..ea6b22293 100644 --- a/Basic/Invaders/Assets/Prefabs/player.prefab +++ b/Basic/Invaders/Assets/Prefabs/player.prefab @@ -76,7 +76,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 21300000, guid: 6e31b7ae591614d4396749e68a6ba020, type: 3} + m_Sprite: {fileID: 21300000, guid: ccc6b3ea84f7e4550b618abc8d06dd5d, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -120,7 +120,7 @@ BoxCollider2D: m_SpriteTilingProperty: border: {x: 0, y: 0, z: 0, w: 0} pivot: {x: 0.5, y: 0.5} - oldSize: {x: 1.28, y: 0.84} + oldSize: {x: 1.28, y: 1.28} newSize: {x: 1, y: 1} adaptiveTilingThreshold: 0.5 drawMode: 0 diff --git a/Basic/Invaders/Assets/Prefabs/superEnemy.prefab b/Basic/Invaders/Assets/Prefabs/superEnemy.prefab index f3e2ab90f..aa483eed1 100644 --- a/Basic/Invaders/Assets/Prefabs/superEnemy.prefab +++ b/Basic/Invaders/Assets/Prefabs/superEnemy.prefab @@ -77,7 +77,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 21300000, guid: 9b0a23d4f4a4b5f4dad77b73d477aec2, type: 3} + m_Sprite: {fileID: 21300000, guid: 4814484f2408640ddb51647c66bdbc8e, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -123,6 +123,7 @@ MonoBehaviour: m_EditorClassIdentifier: score: 75 bulletPrefab: {fileID: 100000, guid: ac6ffb0923d0f7448852a32312a0263c, type: 3} + GraceShootingPeriod: 1 --- !u!114 &11400004 MonoBehaviour: m_ObjectHideFlags: 0 @@ -153,7 +154,7 @@ BoxCollider2D: m_SpriteTilingProperty: border: {x: 0, y: 0, z: 0, w: 0} pivot: {x: 0.5, y: 0.5} - oldSize: {x: 2.05, y: 1.02} + oldSize: {x: 1.28, y: 1.28} newSize: {x: 1, y: 1} adaptiveTilingThreshold: 0.5 drawMode: 0 diff --git a/Basic/Invaders/Assets/Scenes/InvadersLobby.unity b/Basic/Invaders/Assets/Scenes/InvadersLobby.unity index b94942319..a8af61dd8 100644 --- a/Basic/Invaders/Assets/Scenes/InvadersLobby.unity +++ b/Basic/Invaders/Assets/Scenes/InvadersLobby.unity @@ -261,7 +261,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: bb17efd32f1b62b47b9d3876d96c0b2c, type: 3} + m_Sprite: {fileID: 21300000, guid: 6416b5a3e55ca443985a9882ff71d879, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -450,7 +450,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 46fc833f46553be4bae0ba363af8e5b7, type: 3} + m_Sprite: {fileID: 21300000, guid: 4ab7e7189ab754124aa83e1fa63dc0c2, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -1250,7 +1250,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 33ed2981c8de0d44b9881e822df7a931, type: 3} + m_Sprite: {fileID: 21300000, guid: b8a22d7f951c14967b823fdb049384a8, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -1303,7 +1303,7 @@ RectTransform: m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: -208.49, y: -177.95} - m_SizeDelta: {x: 80, y: 40} + m_SizeDelta: {x: 50, y: 70} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1979523618 MonoBehaviour: @@ -1325,7 +1325,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 9b0a23d4f4a4b5f4dad77b73d477aec2, type: 3} + m_Sprite: {fileID: 21300000, guid: 4814484f2408640ddb51647c66bdbc8e, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 diff --git a/Basic/Invaders/Assets/Scenes/StartMenu.unity b/Basic/Invaders/Assets/Scenes/StartMenu.unity index a3beb629c..f3e3a9147 100644 --- a/Basic/Invaders/Assets/Scenes/StartMenu.unity +++ b/Basic/Invaders/Assets/Scenes/StartMenu.unity @@ -485,7 +485,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: bb17efd32f1b62b47b9d3876d96c0b2c, type: 3} + m_Sprite: {fileID: 21300000, guid: 6416b5a3e55ca443985a9882ff71d879, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -674,7 +674,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 46fc833f46553be4bae0ba363af8e5b7, type: 3} + m_Sprite: {fileID: 21300000, guid: 4ab7e7189ab754124aa83e1fa63dc0c2, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -1510,7 +1510,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 33ed2981c8de0d44b9881e822df7a931, type: 3} + m_Sprite: {fileID: 21300000, guid: b8a22d7f951c14967b823fdb049384a8, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -1563,7 +1563,7 @@ RectTransform: m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: -208.49, y: -177.95} - m_SizeDelta: {x: 80, y: 40} + m_SizeDelta: {x: 60, y: 70} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1979523618 MonoBehaviour: @@ -1585,7 +1585,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 9b0a23d4f4a4b5f4dad77b73d477aec2, type: 3} + m_Sprite: {fileID: 21300000, guid: 4814484f2408640ddb51647c66bdbc8e, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 diff --git a/Basic/Invaders/Assets/Sprites/enemy1.png b/Basic/Invaders/Assets/Sprites/enemy1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc432ccf9634f7a696759f42295cd054bf02b69d GIT binary patch literal 2254 zcmbVO4Nw$i7=G_K5J(N<=S0bNmN5Le+uZ~1xYZ-@4gtqQLPjwgWp8f}Htue>-9--2 zT&=X!)Uk2QpVZMQ%Tyfy@-Lw&t*K;e%ziM!n!wDAifS}X`j(#?YwSmFXK%m#zUO=1 z_kF(ieea$tDJ~ciJ0cbUh7=XLO3_o*?&v7={dNxX0eZxUg|lRUd*ZcQ2OBmG2Z+S@ zvT~)|J(XsKfSK_M9?l#JhzJcZ@!^oju+^M`dALeG=)k*K6z+@xD{a#eg` zy~ItgFD_&2t694je>ex57@`qDfKwPO6z~USI^@86d1*A(rU@MDg(%eyJWn%-mAgwY zryy}ymf31zsmv_QW;avTj7+reRQd7a=$I~ z=D@2IMWhL$wzk$>n_(8DN`kW6?F4BdEEW?&nB=;k!h}pgIdy=+#mTJ1iwZ9UF^!S& z2sMfWN1pbD5D>$(LAhThBp4B5M1nGtT1dS>FB`^*HIl#AxR)h3KNsMFij1&S7%Nr@ ziXc}B|3DpH{)+)5t=k>8aa&&kfv^c#$)AV9=ojR+Xt}IT{z;+VfmmI$Cz7oaV|#T9JqzFP$tr5qB6^107tz;8-|+}dI`5ZE{J-agqqrA zqcsU2qO8c3R~Bl$(&h*zRJH(on30dkqJlFkLhTBv8Mp8 z8ru?e;7M#x(Ss+ceXtI`PHH!x8RNoiJ-kEYz+!#+DP6M{HgD`Y(3u2s#AiE7rn#@r z=-&ARp;u$zK*Bl1aLPD0VHi|cU}=gKND4mRUOozL9vck5G?vB0Ry1}%uJAhDc&$y0 zzM2EMI`zs=Jq4%FpNjfu>4w^65DW8daJp7qN40LO!3?mCj#a5VW0pYUGCFgf3#j`iiI1}-0u2!dm5&9r?ozn zx*onbcl_SPX&;`Qv_5Ll`N?M*p8>`Bo;V_XdEnO+{pjN>A4t;gzVJ=-j6o&$6&y~= zML(&VApOa&M@~wop|G<-KPKdXgpu&zIEWnrYZ4(ps<|bF2&Fz7yLdc!yO*?_J5&XR z!}l2BE!~G?@sFWh^J8H98%dXSBVZ_yp36UHzy0lkubiJU6*X{QiaI=^yff{Q)Oj5a z$CCJy)Av8p@H{sse&!0@icwYdkdCBFREKWe3{ysfCpvdTzZ`o~ zJigBW$$O>A^V9s^uDr;%9)BK-iE4iN$o}7lH~&6i;i%~G#ScZoWw>yuA{8uq*OeS- zxuRQbgjGxLHJ>o#tTm{^fT|j^{AV=|;v?c$12MW{DzPtWc&F1>cqklPtOP6xXT5O)XH>Y{Gr(d*qZQD@ww{o^RgFLv#jRI&I^ DQwilD literal 0 HcmV?d00001 diff --git a/Basic/Invaders/Assets/Sprites/enemy1.png.meta b/Basic/Invaders/Assets/Sprites/enemy1.png.meta new file mode 100644 index 000000000..8a5d67367 --- /dev/null +++ b/Basic/Invaders/Assets/Sprites/enemy1.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 4ab7e7189ab754124aa83e1fa63dc0c2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 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: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Basic/Invaders/Assets/Sprites/enemy2.png b/Basic/Invaders/Assets/Sprites/enemy2.png new file mode 100644 index 0000000000000000000000000000000000000000..1642c17bcf2d45ec152670cf442d016c87f46df8 GIT binary patch literal 3986 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 literal 0 HcmV?d00001 diff --git a/Basic/Invaders/Assets/Sprites/enemy2.png.meta b/Basic/Invaders/Assets/Sprites/enemy2.png.meta new file mode 100644 index 000000000..972fcf7b0 --- /dev/null +++ b/Basic/Invaders/Assets/Sprites/enemy2.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 6416b5a3e55ca443985a9882ff71d879 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 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: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Basic/Invaders/Assets/Sprites/enemy3.png b/Basic/Invaders/Assets/Sprites/enemy3.png new file mode 100644 index 0000000000000000000000000000000000000000..0e12a268e6174eb95dc2cb9e8fac571a727bba51 GIT binary patch literal 2112 zcmbVN3rtgI6h61@pdb#!$J8j^RpTVm-UpPnR|;rh(99x(ZlcrKOM43qZEx+pKrvCv zBg4flfn_t>beqW@*^G0Fy09@rk)eASm&`>Ch~hRMnRDO<6UUJKw?Lzd&TTijz5nC; zzjMCxpL677uvbUV#Z1RbgHRjiqHmg@++xg;BL!GKiO0 z3UL$f=WwkiU2Uh*w7AZoq0&>+42Be(CMi8Z>Io`UO{FtwBtz5q#G^vi{0=8ml=Jw6 zEi^N#%0c%iI@DK)86Q)yO8 z%TPKdm0n6x3`vedExg0!thpC7O^a^%E-1t>Uw(9b(vZnPm3<*mTYxu$f=ke;rlHB{JLi-j?J1(EgIIdhIt zg(9SJxg3n1)arGmbh=t=NO!8!bOyberKnQ1E|sQqTC$W*W1W-db9j5Dln0aN9slwC zD!&WWA?yC%JW_Q^3B=^P1a!4E6ZKQfZJZdnU3fTW7}hS;f>C9cl7MrlCYD|QI|Adh z)#V%_{fE35hY7q>tY-b(@-h^yf0uj&Qb0(hJ1&O!yUy_59c4ZVN4-NDMw%9yMA{zb zMZM0Cn%bGQ9qRyO$ILm)t%2_Ay&e8jog3+n)1EC+z|GecK*drc6k0ppm|+QZM;7)9UF&QSAluq6Q$cfiXS$=H@gZ$zSe5L$ zV#^1ep$q-8F~bbExv|!BS)^fPaUFdHTdA1&R&3Jdu6^f{pbI{S;CCI-_?YO+&^NrW zzCJ$mXI<0$kNO_VPEjTwT9jfRP{*`6)(qb`Tni;Loq+zYT~m-Z$_mk4Xumz&j0GA{W9pjh?E42VQn+$MK+&b>#)c!wKB*Me;_dmuJL78q_`GPA?%RkA=o(8Wa>=@0$UTrs9ySR(J zS@Pg!sM0LPY>x(iI=Ho13B&WU*C}zhDjzsme_?bP49pEpt-mnT1_MNJXH@&Oq(&IT z%K0Riavt+`M}tik(qhQB`aDc`X-VJ3j8ISfXEnjDt=ga0N1d|{+!~R$<`r@vdq8qU c(oR0A`0&QfSNdB{J%MP!oLi8yZ-uSyFF!f3R{#J2 literal 0 HcmV?d00001 diff --git a/Basic/Invaders/Assets/Sprites/enemy3.png.meta b/Basic/Invaders/Assets/Sprites/enemy3.png.meta new file mode 100644 index 000000000..594f66918 --- /dev/null +++ b/Basic/Invaders/Assets/Sprites/enemy3.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: b8a22d7f951c14967b823fdb049384a8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 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: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Basic/Invaders/Assets/Sprites/player ship.png b/Basic/Invaders/Assets/Sprites/player ship.png new file mode 100644 index 0000000000000000000000000000000000000000..d489858baaa93087c1b40bd7354667244dae136f GIT binary patch literal 2775 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 Vcw_gmqc8X@b3>!qh5d)-{{~9*TWtUU literal 0 HcmV?d00001 diff --git a/Basic/Invaders/Assets/Sprites/saucer.png.meta b/Basic/Invaders/Assets/Sprites/saucer.png.meta new file mode 100644 index 000000000..5c63476c0 --- /dev/null +++ b/Basic/Invaders/Assets/Sprites/saucer.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 4814484f2408640ddb51647c66bdbc8e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 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: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Basic/Invaders/ProjectSettings/ProjectSettings.asset b/Basic/Invaders/ProjectSettings/ProjectSettings.asset index da660cef6..8de9eb411 100644 --- a/Basic/Invaders/ProjectSettings/ProjectSettings.asset +++ b/Basic/Invaders/ProjectSettings/ProjectSettings.asset @@ -264,7 +264,7 @@ PlayerSettings: - m_BuildTarget: m_Icons: - serializedVersion: 2 - m_Icon: {fileID: 2800000, guid: 33ed2981c8de0d44b9881e822df7a931, type: 3} + m_Icon: {fileID: 2800000, guid: 6416b5a3e55ca443985a9882ff71d879, type: 3} m_Width: 128 m_Height: 128 m_Kind: 0 @@ -546,6 +546,7 @@ PlayerSettings: ps4videoRecordingFeaturesUsed: 0 ps4contentSearchFeaturesUsed: 0 ps4CompatibilityPS5: 0 + ps4AllowPS5Detection: 0 ps4GPU800MHz: 1 ps4attribEyeToEyeDistanceSettingVR: 0 ps4IncludedModules: [] diff --git a/Basic/Invaders/UserSettings/EditorUserSettings.asset b/Basic/Invaders/UserSettings/EditorUserSettings.asset index cf1bd99c5..6da29bc5e 100644 --- a/Basic/Invaders/UserSettings/EditorUserSettings.asset +++ b/Basic/Invaders/UserSettings/EditorUserSettings.asset @@ -14,6 +14,9 @@ EditorUserSettings: RecentlyUsedScenePath-2: value: 22424703114646680e0b0227036c761e00161c2f3e3b0a3f2f2b047df7ee3d2cfb flags: 0 + RecentlyUsedScenePath-3: + value: 22424703114646680e0b0227036c6c0417050c072926337e38271427fb + flags: 0 vcSharedLogLevel: value: 0d5e400f0650 flags: 0 From 0a81ca4d302817622fef255bb11e452a34a7f456 Mon Sep 17 00:00:00 2001 From: Cosmin Date: Thu, 15 Jul 2021 15:32:17 +0100 Subject: [PATCH 3/8] [InvadersGame] Fix a crash in shipping builds --- Basic/Invaders/Assets/Scripts/InvadersGame.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Basic/Invaders/Assets/Scripts/InvadersGame.cs b/Basic/Invaders/Assets/Scripts/InvadersGame.cs index 1ee2d01b5..f914e567a 100644 --- a/Basic/Invaders/Assets/Scripts/InvadersGame.cs +++ b/Basic/Invaders/Assets/Scripts/InvadersGame.cs @@ -352,7 +352,11 @@ private void UpdateShootingEnemies(ref UpdateEnemiesResultFlags flags) for (var index = 0; index < enemiesCount; index++) { var enemy = m_Enemies[index]; - Assert.IsTrue(enemy); + Assert.IsTrue(enemy != null); + if (m_Enemies == null) + { + continue; + } // If at least one of the enemies reached bottom, return early. if (enemy.transform.position.y <= k_BottomBoundaryOffset) @@ -491,7 +495,7 @@ public void UnregisterSpawnableObject(InvadersObjectType invadersObjectType, Gam gameObject.TryGetComponent(out var enemyAgent); Assert.IsTrue(enemyAgent != null); if (m_Enemies.Contains(enemyAgent)) - Assert.IsTrue(m_Enemies.Remove(enemyAgent)); + m_Enemies.Remove(enemyAgent); break; } case InvadersObjectType.Shield: @@ -499,7 +503,7 @@ public void UnregisterSpawnableObject(InvadersObjectType invadersObjectType, Gam gameObject.TryGetComponent(out var shield); Assert.IsTrue(shield != null); if (m_Shields.Contains(shield)) - Assert.IsTrue(m_Shields.Remove(shield)); + m_Shields.Remove(shield); break; } default: From 585a9a9ff6e9d59f7005766df1343cda42ad4dad Mon Sep 17 00:00:00 2001 From: Cosmin <38663153+Cosmin-B@users.noreply.github.com> Date: Mon, 19 Jul 2021 09:31:00 +0100 Subject: [PATCH 4/8] Update Basic/Invaders/Assets/Scripts/EnemyAgent.cs Co-authored-by: Luke Stampfli <43687322+LukeStampfli@users.noreply.github.com> --- Basic/Invaders/Assets/Scripts/EnemyAgent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Basic/Invaders/Assets/Scripts/EnemyAgent.cs b/Basic/Invaders/Assets/Scripts/EnemyAgent.cs index 0f57a442b..29eadf4eb 100644 --- a/Basic/Invaders/Assets/Scripts/EnemyAgent.cs +++ b/Basic/Invaders/Assets/Scripts/EnemyAgent.cs @@ -39,7 +39,7 @@ public override void NetworkStart() m_FirstShootTimeAfterSpawn = Time.time + Random.Range(GraceShootingPeriod - 0.1f, GraceShootingPeriod + 0.75f); - Assert.IsTrue(InvadersGame.Singleton); + Assert.IsNotNull(InvadersGame.Singleton); InvadersGame.Singleton.RegisterSpawnableObject(InvadersObjectType.Enemy, gameObject); InvadersGame.Singleton.isGameOver.OnValueChanged += OnGameOver; } From 4ee865262fcc9b4f3885901531bcc63f45966e65 Mon Sep 17 00:00:00 2001 From: Cosmin <38663153+Cosmin-B@users.noreply.github.com> Date: Mon, 19 Jul 2021 09:31:14 +0100 Subject: [PATCH 5/8] Update Basic/Invaders/Assets/Scripts/InvadersGame.cs Co-authored-by: Luke Stampfli <43687322+LukeStampfli@users.noreply.github.com> --- Basic/Invaders/Assets/Scripts/InvadersGame.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Basic/Invaders/Assets/Scripts/InvadersGame.cs b/Basic/Invaders/Assets/Scripts/InvadersGame.cs index f914e567a..46e78b5bc 100644 --- a/Basic/Invaders/Assets/Scripts/InvadersGame.cs +++ b/Basic/Invaders/Assets/Scripts/InvadersGame.cs @@ -352,7 +352,7 @@ private void UpdateShootingEnemies(ref UpdateEnemiesResultFlags flags) for (var index = 0; index < enemiesCount; index++) { var enemy = m_Enemies[index]; - Assert.IsTrue(enemy != null); + Assert.IsNotNull(enemy); if (m_Enemies == null) { continue; From 99e54275df939197e454a9bfc6d01b0e4a97fc05 Mon Sep 17 00:00:00 2001 From: Cosmin Date: Mon, 19 Jul 2021 14:16:16 +0100 Subject: [PATCH 6/8] [Assets] Remove all the old assets from the project! --- Basic/Invaders/Assets/Sprites/alien1.jpg | Bin 4268 -> 0 bytes Basic/Invaders/Assets/Sprites/alien2.jpg | Bin 4862 -> 0 bytes Basic/Invaders/Assets/Sprites/alien3.jpg | Bin 6267 -> 0 bytes .../Sprites/{alienbullet.jpg => enemybullet.jpg} | Bin ...alienbullet.jpg.meta => enemybullet.jpg.meta} | 0 Basic/Invaders/Assets/Sprites/player.jpg | Bin 3141 -> 0 bytes Basic/Invaders/Assets/Sprites/saucerr.jpg | Bin 6416 -> 0 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Basic/Invaders/Assets/Sprites/alien1.jpg delete mode 100644 Basic/Invaders/Assets/Sprites/alien2.jpg delete mode 100644 Basic/Invaders/Assets/Sprites/alien3.jpg rename Basic/Invaders/Assets/Sprites/{alienbullet.jpg => enemybullet.jpg} (100%) rename Basic/Invaders/Assets/Sprites/{alienbullet.jpg.meta => enemybullet.jpg.meta} (100%) delete mode 100644 Basic/Invaders/Assets/Sprites/player.jpg delete mode 100644 Basic/Invaders/Assets/Sprites/saucerr.jpg diff --git a/Basic/Invaders/Assets/Sprites/alien1.jpg b/Basic/Invaders/Assets/Sprites/alien1.jpg deleted file mode 100644 index c54cf55e81e034ee9461ee835bfcf8a77500beca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4268 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 MVe9N}APx@y3;$7$Gynhq diff --git a/Basic/Invaders/Assets/Sprites/alien3.jpg b/Basic/Invaders/Assets/Sprites/alien3.jpg deleted file mode 100644 index eb4bcd6232f04648ea525f4114b6b5b9f200333e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6267 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 TZK^809|BJz_mt_PpuztD$L~q| diff --git a/Basic/Invaders/Assets/Sprites/alienbullet.jpg b/Basic/Invaders/Assets/Sprites/enemybullet.jpg similarity index 100% rename from Basic/Invaders/Assets/Sprites/alienbullet.jpg rename to Basic/Invaders/Assets/Sprites/enemybullet.jpg diff --git a/Basic/Invaders/Assets/Sprites/alienbullet.jpg.meta b/Basic/Invaders/Assets/Sprites/enemybullet.jpg.meta similarity index 100% rename from Basic/Invaders/Assets/Sprites/alienbullet.jpg.meta rename to Basic/Invaders/Assets/Sprites/enemybullet.jpg.meta diff --git a/Basic/Invaders/Assets/Sprites/player.jpg b/Basic/Invaders/Assets/Sprites/player.jpg deleted file mode 100644 index d7fcb8af10608bcdefb4e7693f27c57ddcb33029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3141 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 Date: Tue, 20 Jul 2021 16:08:43 +0100 Subject: [PATCH 7/8] [Player] Fix a minor issue where the player is not "Destroyed" on all instances --- .../Invaders/Assets/Scripts/PlayerControl.cs | 15 ++- Basic/Invaders/Assets/Sprites/alien1.jpg.meta | 96 ------------------- Basic/Invaders/Assets/Sprites/alien2.jpg.meta | 96 ------------------- Basic/Invaders/Assets/Sprites/alien3.jpg.meta | 96 ------------------- Basic/Invaders/Assets/Sprites/player.jpg.meta | 96 ------------------- .../Invaders/Assets/Sprites/saucerr.jpg.meta | 96 ------------------- 6 files changed, 14 insertions(+), 481 deletions(-) delete mode 100644 Basic/Invaders/Assets/Sprites/alien1.jpg.meta delete mode 100644 Basic/Invaders/Assets/Sprites/alien2.jpg.meta delete mode 100644 Basic/Invaders/Assets/Sprites/alien3.jpg.meta delete mode 100644 Basic/Invaders/Assets/Sprites/player.jpg.meta delete mode 100644 Basic/Invaders/Assets/Sprites/saucerr.jpg.meta diff --git a/Basic/Invaders/Assets/Scripts/PlayerControl.cs b/Basic/Invaders/Assets/Scripts/PlayerControl.cs index bab5b4a46..b6f9f8224 100644 --- a/Basic/Invaders/Assets/Scripts/PlayerControl.cs +++ b/Basic/Invaders/Assets/Scripts/PlayerControl.cs @@ -141,11 +141,18 @@ private void OnGameStartedChanged(bool previousValue, bool newValue) private void OnLivesChanged(int previousAmount, int currentAmount) { + // Hide graphics client side upon death + if(currentAmount <= 0 && IsClient && TryGetComponent(out var spriteRenderer)) + spriteRenderer.enabled = false; + if (!IsOwner) return; Debug.LogFormat("Lives {0} ", currentAmount); if (InvadersGame.Singleton != null) InvadersGame.Singleton.SetLives(m_Lives.Value); - if (m_Lives.Value <= 0) m_IsAlive = false; + if (m_Lives.Value <= 0) + { + m_IsAlive = false; + } } private void OnScoreChanged(int previousAmount, int currentAmount) @@ -154,6 +161,7 @@ private void OnScoreChanged(int previousAmount, int currentAmount) Debug.LogFormat("Score {0} ", currentAmount); if (InvadersGame.Singleton != null) InvadersGame.Singleton.SetScore(m_Score.Value); } // ReSharper disable Unity.PerformanceAnalysis + private void InGameUpdate() { if (!IsLocalPlayer || !IsOwner || !m_HasGameStarted) return; @@ -202,6 +210,11 @@ public void HitByBullet() m_Lives.Value = 0; InvadersGame.Singleton.SetGameEnd(GameOverReason.Death); NotifyGameOverClientRpc(GameOverReason.Death, m_OwnerRPCParams); + + // Hide graphics of this player object server-side. Note we don't want to destroy the object as it + // may stop the RPC's from reaching on the other side, as there is only one player controlled object + if (TryGetComponent(out var spriteRenderer)) + spriteRenderer.enabled = false; } } diff --git a/Basic/Invaders/Assets/Sprites/alien1.jpg.meta b/Basic/Invaders/Assets/Sprites/alien1.jpg.meta deleted file mode 100644 index 0c2aaa444..000000000 --- a/Basic/Invaders/Assets/Sprites/alien1.jpg.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: 46fc833f46553be4bae0ba363af8e5b7 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - 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: 1 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 1024 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Basic/Invaders/Assets/Sprites/alien2.jpg.meta b/Basic/Invaders/Assets/Sprites/alien2.jpg.meta deleted file mode 100644 index 09ac58acc..000000000 --- a/Basic/Invaders/Assets/Sprites/alien2.jpg.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: bb17efd32f1b62b47b9d3876d96c0b2c -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - 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: 1 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 1024 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Basic/Invaders/Assets/Sprites/alien3.jpg.meta b/Basic/Invaders/Assets/Sprites/alien3.jpg.meta deleted file mode 100644 index ad85efdb3..000000000 --- a/Basic/Invaders/Assets/Sprites/alien3.jpg.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: 33ed2981c8de0d44b9881e822df7a931 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - 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: 1 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 1024 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Basic/Invaders/Assets/Sprites/player.jpg.meta b/Basic/Invaders/Assets/Sprites/player.jpg.meta deleted file mode 100644 index bcc3e89b3..000000000 --- a/Basic/Invaders/Assets/Sprites/player.jpg.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: 6e31b7ae591614d4396749e68a6ba020 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - 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: 1 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 1024 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Basic/Invaders/Assets/Sprites/saucerr.jpg.meta b/Basic/Invaders/Assets/Sprites/saucerr.jpg.meta deleted file mode 100644 index 7b9ab043c..000000000 --- a/Basic/Invaders/Assets/Sprites/saucerr.jpg.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: 9b0a23d4f4a4b5f4dad77b73d477aec2 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - 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 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: -1 - maxTextureSize: 1024 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - 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: 1 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 1024 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: From 7b80360964e4c0c66d49c07aacbbf3f2868d8487 Mon Sep 17 00:00:00 2001 From: Cosmin Date: Tue, 20 Jul 2021 16:16:36 +0100 Subject: [PATCH 8/8] [Project] Add new Invaders changelog --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88817dcba..a5ded1f30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Change log +## Invaders - 2021-07-20 + +### New Changes + +- Game - rename all our alien prefabs to have a more generic name, the same principle was applied to our codebase, renamed variables/fields/classes to something more generic +- Game: Fix a crash in shipping build +- Enemies: Rename our main enemy class to EnemyAgent + minor clean-ups + implement a grace shoot timer period +- InvadersGame: Some big refactories here, the UpdateEnemies function not outputs a set of flags (bitmask) rather than having separated booleans to keep track off +- InvadersGame: Fix an edge case of the game loop where if the enemies would reach the bottom they would never respawn, now when they do reach that bottom boundary it will be game over +- InvadersGame: Introduce additional game over reasons +- LobbyControl: Introduce a minimum player count variable that could be tweaked in the inspector so that the users can start playing in the editor with just the host in the lobby +- PlayerControl: Unified the NotifyGameOver function with the InvadersGame one + added different texts for all the possible game over reasons to be displayed +- PlayerControl: Fix a minor issue where the Player graphics are not hidden on all connected instances upon "death". + +### Known Issues + +- Upon import a MissingReferenceException is triggered from within MLAPI: **"MissingReferenceException: The object of type ‘GameObject’ has been destroyed but you are still trying to access it. + Your script should either check if it is null or you should not destroy the object."** in: + - UnityEngine.GameObject.GetComponent[T] () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/GameObject.bindings.cs:28) + ## [0.1.0] - 2021-04-07 Initial release of MLAPI Bitesize Samples repository. Samples support the following versions: