diff --git a/Assets/Prefabs/BorderBuff.asset b/Assets/Prefabs/BorderBuff.asset new file mode 100644 index 0000000..8d139b1 --- /dev/null +++ b/Assets/Prefabs/BorderBuff.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4453d1448ec14f5fa81aae3c54f78010, type: 3} + m_Name: BorderBuff + m_EditorClassIdentifier: + type: 1 + effect: 1 + pickupDuration: 10 + activeDuration: 10 + image: {fileID: 21300000, guid: 500c6690dd1efa237973d86a4232f5c0, type: 3} diff --git a/Assets/Prefabs/BorderBuff.asset.meta b/Assets/Prefabs/BorderBuff.asset.meta new file mode 100644 index 0000000..276ae60 --- /dev/null +++ b/Assets/Prefabs/BorderBuff.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df0f24b538b5fed02a7faa3a5e0f121b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/BorderNerf.asset b/Assets/Prefabs/BorderNerf.asset new file mode 100644 index 0000000..d99a5a3 --- /dev/null +++ b/Assets/Prefabs/BorderNerf.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4453d1448ec14f5fa81aae3c54f78010, type: 3} + m_Name: BorderNerf + m_EditorClassIdentifier: + type: 0 + effect: 1 + pickupDuration: 10 + activeDuration: 10 + image: {fileID: 21300000, guid: 555c4207622e3e429bea3c98ad8ae3f5, type: 3} diff --git a/Assets/Prefabs/BorderNerf.asset.meta b/Assets/Prefabs/BorderNerf.asset.meta new file mode 100644 index 0000000..0eabb7e --- /dev/null +++ b/Assets/Prefabs/BorderNerf.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 73dc3bbc93cba37b1b989a9497b680e7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Modification.prefab b/Assets/Prefabs/Modification.prefab new file mode 100644 index 0000000..9334bb3 --- /dev/null +++ b/Assets/Prefabs/Modification.prefab @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7947935438987891319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7947935438987891323} + - component: {fileID: 7947935438987891317} + - component: {fileID: 7947935438987891316} + - component: {fileID: 5272754659973803181} + m_Layer: 7 + m_Name: Modification + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7947935438987891323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7947935438987891319} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7947935438987891317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7947935438987891319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b95f7504787409bb84f5fc3b5e3865f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &7947935438987891316 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7947935438987891319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 951099334 + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 +--- !u!61 &5272754659973803181 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7947935438987891319} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0.5, y: 0.5} + oldSize: {x: 2, y: 2} + newSize: {x: 2, y: 2} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 2, y: 2} + m_EdgeRadius: 0 diff --git a/Assets/Prefabs/Modification.prefab.meta b/Assets/Prefabs/Modification.prefab.meta new file mode 100644 index 0000000..847d3b4 --- /dev/null +++ b/Assets/Prefabs/Modification.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8db15b80a161e4faf9681d9e29b563ce +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Player.prefab b/Assets/Prefabs/Player.prefab index 73a2897..50522b2 100644 --- a/Assets/Prefabs/Player.prefab +++ b/Assets/Prefabs/Player.prefab @@ -13,7 +13,7 @@ GameObject: - component: {fileID: 5402279313309450412} - component: {fileID: 1666507220592599477} - component: {fileID: 1287955657} - m_Layer: 0 + m_Layer: 8 m_Name: Player m_TagString: Untagged m_Icon: {fileID: 0} diff --git a/Assets/Prefabs/SpeedBuff.asset b/Assets/Prefabs/SpeedBuff.asset new file mode 100644 index 0000000..1834f74 --- /dev/null +++ b/Assets/Prefabs/SpeedBuff.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4453d1448ec14f5fa81aae3c54f78010, type: 3} + m_Name: SpeedBuff + m_EditorClassIdentifier: + type: 1 + effect: 0 + pickupDuration: 10 + activeDuration: 10 + image: {fileID: 21300000, guid: c9633c24081701c6c9ce9884d6524530, type: 3} diff --git a/Assets/Prefabs/SpeedBuff.asset.meta b/Assets/Prefabs/SpeedBuff.asset.meta new file mode 100644 index 0000000..be4f9df --- /dev/null +++ b/Assets/Prefabs/SpeedBuff.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e24dcbc74c0ebdd94acb60adba3415c7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/SpeedNerf.asset b/Assets/Prefabs/SpeedNerf.asset new file mode 100644 index 0000000..ee1e38a --- /dev/null +++ b/Assets/Prefabs/SpeedNerf.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4453d1448ec14f5fa81aae3c54f78010, type: 3} + m_Name: SpeedNerf + m_EditorClassIdentifier: + type: 0 + effect: 0 + pickupDuration: 10 + activeDuration: 10 + image: {fileID: 21300000, guid: 24ca60336f20aee73b5b211b6f6e1a44, type: 3} diff --git a/Assets/Prefabs/SpeedNerf.asset.meta b/Assets/Prefabs/SpeedNerf.asset.meta new file mode 100644 index 0000000..e4f5b57 --- /dev/null +++ b/Assets/Prefabs/SpeedNerf.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ae5a83823d492d27bbb84006f6e0e8c2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Game.unity b/Assets/Scenes/Game.unity index 15ca144..2538386 100644 --- a/Assets/Scenes/Game.unity +++ b/Assets/Scenes/Game.unity @@ -133,7 +133,7 @@ GameObject: m_Component: - component: {fileID: 132613873} - component: {fileID: 132613874} - m_Layer: 0 + m_Layer: 9 m_Name: Left m_TagString: Untagged m_Icon: {fileID: 0} @@ -396,7 +396,7 @@ GameObject: - component: {fileID: 1100318145} - component: {fileID: 1100318146} - component: {fileID: 1100318147} - m_Layer: 0 + m_Layer: 9 m_Name: Bottom m_TagString: Untagged m_Icon: {fileID: 0} @@ -462,7 +462,7 @@ GameObject: m_Component: - component: {fileID: 1462314554} - component: {fileID: 1462314555} - m_Layer: 0 + m_Layer: 9 m_Name: Right m_TagString: Untagged m_Icon: {fileID: 0} @@ -592,7 +592,7 @@ GameObject: - component: {fileID: 2069256771} - component: {fileID: 2069256772} - component: {fileID: 2069256773} - m_Layer: 0 + m_Layer: 9 m_Name: Top m_TagString: Untagged m_Icon: {fileID: 0} @@ -680,6 +680,12 @@ MonoBehaviour: m_EditorClassIdentifier: ballPrefab: {fileID: 7041796185663956342, guid: d67d5f2db5f0b3d9d8298731f423a9b6, type: 3} playerPrefab: {fileID: 5402279313309450415, guid: 32b3bb87d3699d314ace59ddb1674875, type: 3} + modificationPrefab: {fileID: 7947935438987891319, guid: 8db15b80a161e4faf9681d9e29b563ce, type: 3} + modifications: + - {fileID: 11400000, guid: e24dcbc74c0ebdd94acb60adba3415c7, type: 2} + - {fileID: 11400000, guid: ae5a83823d492d27bbb84006f6e0e8c2, type: 2} + - {fileID: 11400000, guid: df0f24b538b5fed02a7faa3a5e0f121b, type: 2} + - {fileID: 11400000, guid: 73dc3bbc93cba37b1b989a9497b680e7, type: 2} --- !u!4 &2109945868 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Game/GameManager.cs b/Assets/Scripts/Game/GameManager.cs index fda55aa..6e9a9ea 100644 --- a/Assets/Scripts/Game/GameManager.cs +++ b/Assets/Scripts/Game/GameManager.cs @@ -7,6 +7,7 @@ using Unity.VisualScripting; using UnityEngine; using UnityEngine.Assertions; using Object = UnityEngine.Object; +using Random = UnityEngine.Random; namespace Game { public class GameManager : NetworkBehaviour { @@ -19,6 +20,8 @@ namespace Game { public Object ballPrefab; public Object playerPrefab; + public Object modificationPrefab; + public ModificationProperties[] modifications; public List Balls { get; } = new(); @@ -91,6 +94,20 @@ namespace Game { Tests(); } + private IEnumerator Start() { + while (Application.isPlaying) { + yield return new WaitForSeconds(5); + SpawnModification(); + } + } + + private void SpawnModification() { + Vector2 pos = new Vector2(Random.Range(Dimensions.Singleton.left, Dimensions.Singleton.right), Random.Range(-2, 2)); + ModificationProperties properties = modifications[Random.Range(0, modifications.Length)]; + var mod = Instantiate(modificationPrefab, pos, Quaternion.identity).GetComponent(); + mod.Properties = properties; + } + private void FixedUpdate() { foreach (var ball in Balls.Where(b => !b.IsAlive)) Destroy(ball.gameObject); diff --git a/Assets/Scripts/Game/Modification.cs b/Assets/Scripts/Game/Modification.cs index b04fd20..5f424fb 100644 --- a/Assets/Scripts/Game/Modification.cs +++ b/Assets/Scripts/Game/Modification.cs @@ -9,15 +9,6 @@ namespace Game { public enum ModType { Nerf, Buff } public enum ModEffect { Speed, Border } - - public struct ModificationProperties { - public ModType Type { get; set; } - public ModEffect Effect { get; set; } - - public float PickupDuration { get; set; } - - public float ActiveDuration { get; set; } - } public class ActiveModification { public ModificationProperties Properties { get; set; } @@ -25,20 +16,21 @@ namespace Game { public IEnumerator Process(VisualElement panel, List modifications) { modifications.Add(this); VisualElement element = GameUI.AddModification(panel, this); - - yield return new WaitForSeconds(Properties.ActiveDuration); - + + yield return new WaitForSeconds(Properties.activeDuration); + element.RemoveFromHierarchy(); modifications.Remove(this); } } - + public class Modification : NetworkBehaviour { public ModificationProperties Properties { get; set; } private IEnumerator Start() { - yield return new WaitForSeconds(Properties.PickupDuration); + gameObject.AddComponent().sprite = Properties.image; + yield return new WaitForSeconds(Properties.pickupDuration); Destroy(gameObject); } @@ -47,9 +39,8 @@ namespace Game { if (p != null) { Destroy(gameObject); ActiveModification mod = new() {Properties = Properties}; - StartCoroutine(mod.Process(p.Panel, p.Modifications)); + p.StartCoroutine(mod.Process(p.Panel, p.Modifications)); } } } - } diff --git a/Assets/Scripts/Game/ModificationProperties.cs b/Assets/Scripts/Game/ModificationProperties.cs new file mode 100644 index 0000000..09093a7 --- /dev/null +++ b/Assets/Scripts/Game/ModificationProperties.cs @@ -0,0 +1,15 @@ +using UnityEngine; +using UnityEngine.Serialization; + +namespace Game { + [CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/ModificationProperties", order = 0)] + public class ModificationProperties : ScriptableObject { + public ModType type; + public ModEffect effect; + public float pickupDuration; + public float activeDuration; + public Sprite image; + } +} + + diff --git a/Assets/Scripts/Game/ModificationProperties.cs.meta b/Assets/Scripts/Game/ModificationProperties.cs.meta new file mode 100644 index 0000000..835300d --- /dev/null +++ b/Assets/Scripts/Game/ModificationProperties.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4453d1448ec14f5fa81aae3c54f78010 +timeCreated: 1681245383 \ No newline at end of file diff --git a/Assets/Scripts/GameUI.cs b/Assets/Scripts/GameUI.cs index c61e4db..ac21195 100644 --- a/Assets/Scripts/GameUI.cs +++ b/Assets/Scripts/GameUI.cs @@ -28,9 +28,16 @@ public class GameUI : MonoBehaviour { // TODO create correct visual element, attach it to panel with background-image and return it public static VisualElement AddModification(VisualElement playerPanel, ActiveModification modification) { - VisualElement listElement = ModsList(playerPanel, modification.Properties.Type); + VisualElement listElement = ModsList(playerPanel, modification.Properties.type); - return listElement; + VisualElement newElement = new() { + style = { + backgroundImage = Background.FromSprite(modification.Properties.image) + } + }; + listElement.Add(newElement); + + return newElement; } private static VisualElement ModsList(VisualElement player, ModType type) { diff --git a/Assets/UI Toolkit/PlayerUI.uxml b/Assets/UI Toolkit/PlayerUI.uxml index 24f4d04..682e9f7 100644 --- a/Assets/UI Toolkit/PlayerUI.uxml +++ b/Assets/UI Toolkit/PlayerUI.uxml @@ -1,11 +1,9 @@