diff --git a/Assets/ML-Agents.meta b/Assets/ML-Agents.meta new file mode 100644 index 0000000..cea0539 --- /dev/null +++ b/Assets/ML-Agents.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 950d9ec012f39d847810b4b566bf2a7a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/Timers.meta b/Assets/ML-Agents/Timers.meta new file mode 100644 index 0000000..b84db51 --- /dev/null +++ b/Assets/ML-Agents/Timers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4cc3b22b26692c4bb877e052f13c781 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/Timers/AI_timers.json b/Assets/ML-Agents/Timers/AI_timers.json new file mode 100644 index 0000000..6bac2d3 --- /dev/null +++ b/Assets/ML-Agents/Timers/AI_timers.json @@ -0,0 +1 @@ +{"count":1,"self":146.5437824,"total":146.5523294,"children":{"InitializeActuators":{"count":12,"self":0.0010006,"total":0.0010006,"children":null},"InitializeSensors":{"count":12,"self":0.0015075,"total":0.0015075,"children":null},"AgentSendState":{"count":395,"self":0.0015107999999999999,"total":0.0015107999999999999,"children":null},"DecideAction":{"count":395,"self":0.0040206999999999994,"total":0.0040206999999999994,"children":null},"AgentAct":{"count":395,"self":0.0005068,"total":0.0005068,"children":null}},"gauges":{},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1688511292","unity_version":"2023.1.2f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2023.1.2f1\\Editor\\Unity.exe -projectpath C:\\Users\\felix\\SnakeGame -useHub -hubIPC -cloudEnvironment production","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.3.0-exp.3","scene_name":"AI","end_time_seconds":"1688511438"}} \ No newline at end of file diff --git a/Assets/ML-Agents/Timers/AI_timers.json.meta b/Assets/ML-Agents/Timers/AI_timers.json.meta new file mode 100644 index 0000000..0d273c2 --- /dev/null +++ b/Assets/ML-Agents/Timers/AI_timers.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 75586edf83144a640a6ddf48f861e80c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ML-Agents/Timers/Main_timers.json b/Assets/ML-Agents/Timers/Main_timers.json new file mode 100644 index 0000000..c46f61c --- /dev/null +++ b/Assets/ML-Agents/Timers/Main_timers.json @@ -0,0 +1 @@ +{"count":1,"self":38.4066496,"total":38.4183148,"children":{"InitializeActuators":{"count":1,"self":0.0009992,"total":0.0009992,"children":null},"InitializeSensors":{"count":1,"self":0.0015080999999999998,"total":0.0015080999999999998,"children":null},"AgentSendState":{"count":332,"self":0.0055420999999999995,"total":0.0055420999999999995,"children":null},"DecideAction":{"count":332,"self":0.0025223999999999997,"total":0.0025223999999999997,"children":null},"AgentAct":{"count":332,"self":0.0010927999999999999,"total":0.0010927999999999999,"children":null}},"gauges":{},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1688511153","unity_version":"2023.1.2f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2023.1.2f1\\Editor\\Unity.exe -projectpath C:\\Users\\felix\\SnakeGame -useHub -hubIPC -cloudEnvironment production","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.3.0-exp.3","scene_name":"Main","end_time_seconds":"1688511192"}} \ No newline at end of file diff --git a/Assets/ML-Agents/Timers/Main_timers.json.meta b/Assets/ML-Agents/Timers/Main_timers.json.meta new file mode 100644 index 0000000..7cc3f04 --- /dev/null +++ b/Assets/ML-Agents/Timers/Main_timers.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fddbe0a42d80c28409de5ef3508b306d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SnakeGame/MaterialLibary/Food.mat b/Assets/SnakeGame/MaterialLibary/Food.mat index c5ed94e..2648bd4 100644 --- a/Assets/SnakeGame/MaterialLibary/Food.mat +++ b/Assets/SnakeGame/MaterialLibary/Food.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Food - m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_Shader: {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] @@ -23,6 +23,10 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -61,10 +65,13 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: + - PixelSnap: 0 - _BumpScale: 1 + - _ColorMask: 15 - _Cutoff: 0.5 - _DetailNormalMapScale: 1 - _DstBlend: 0 + - _EnableExternalAlpha: 0 - _GlossMapScale: 1 - _Glossiness: 0.5 - _GlossyReflections: 1 @@ -75,9 +82,17 @@ Material: - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 - _UVSec: 0 + - _UseUIAlphaClip: 0 - _ZWrite: 1 m_Colors: - _Color: {r: 1, g: 0.9598555, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/SnakeGame/MaterialLibary/NoneMaterial.mat b/Assets/SnakeGame/MaterialLibary/NoneMaterial.mat index 555838c..416f0fe 100644 --- a/Assets/SnakeGame/MaterialLibary/NoneMaterial.mat +++ b/Assets/SnakeGame/MaterialLibary/NoneMaterial.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: NoneMaterial - m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_Shader: {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] @@ -23,6 +23,10 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -61,10 +65,14 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: + - PixelSnap: 0 - _BumpScale: 1 + - _ColorMask: 15 + - _CullMode: 0 - _Cutoff: 0.5 - _DetailNormalMapScale: 1 - _DstBlend: 0 + - _EnableExternalAlpha: 0 - _GlossMapScale: 1 - _Glossiness: 0.5 - _GlossyReflections: 1 @@ -75,9 +83,18 @@ Material: - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 - _UVSec: 0 + - _UseUIAlphaClip: 0 - _ZWrite: 1 m_Colors: - - _Color: {r: 0.46226418, g: 0.45572272, b: 0.45572272, a: 1} + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _Color: {r: 0.33962262, g: 0.33962262, b: 0.33962262, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/SnakeGame/MaterialLibary/Snake.mat b/Assets/SnakeGame/MaterialLibary/Snake.mat index 1f8823d..3b44b8a 100644 --- a/Assets/SnakeGame/MaterialLibary/Snake.mat +++ b/Assets/SnakeGame/MaterialLibary/Snake.mat @@ -8,7 +8,7 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Snake - m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_Shader: {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] @@ -23,6 +23,10 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _BumpMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -61,10 +65,14 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: + - PixelSnap: 0 - _BumpScale: 1 + - _ColorMask: 15 + - _CullMode: 0 - _Cutoff: 0.5 - _DetailNormalMapScale: 1 - _DstBlend: 0 + - _EnableExternalAlpha: 0 - _GlossMapScale: 1 - _Glossiness: 0.5 - _GlossyReflections: 1 @@ -75,9 +83,18 @@ Material: - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 - _UVSec: 0 + - _UseUIAlphaClip: 0 - _ZWrite: 1 m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} - _Color: {r: 0.0048570633, g: 1, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] diff --git a/Assets/SnakeGame/Prefabs/New Piskel-1.png (1).png b/Assets/SnakeGame/Prefabs/New Piskel-1.png (1).png new file mode 100644 index 0000000..59dff1c Binary files /dev/null and b/Assets/SnakeGame/Prefabs/New Piskel-1.png (1).png differ diff --git a/Assets/SnakeGame/Prefabs/New Piskel-1.png (1).png.meta b/Assets/SnakeGame/Prefabs/New Piskel-1.png (1).png.meta new file mode 100644 index 0000000..b85cf6b --- /dev/null +++ b/Assets/SnakeGame/Prefabs/New Piskel-1.png (1).png.meta @@ -0,0 +1,137 @@ +fileFormatVersion: 2 +guid: bd8107b330614b94c9acdf1740481e07 +TextureImporter: + internalIDToNameTable: + - first: + 213: -4518853377557969270 + second: New Piskel-1.png (1)_0 + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 256 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + 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: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: New Piskel-1.png (1)_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a8645968bcec941c0800000000000000 + internalID: -4518853377557969270 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + New Piskel-1.png (1)_0: -4518853377557969270 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SnakeGame/Prefabs/Tile.prefab b/Assets/SnakeGame/Prefabs/Tile.prefab index df66b22..9e9bf28 100644 --- a/Assets/SnakeGame/Prefabs/Tile.prefab +++ b/Assets/SnakeGame/Prefabs/Tile.prefab @@ -74,12 +74,12 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 - m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} + m_Sprite: {fileID: 21300000, guid: bd8107b330614b94c9acdf1740481e07, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 m_DrawMode: 0 - m_Size: {x: 1, y: 1} + m_Size: {x: 2.56, y: 2.56} m_AdaptiveModeThreshold: 0.5 m_SpriteTileMode: 0 m_WasSpriteAssigned: 1 @@ -97,4 +97,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 6049704594574d8fad8b56fae45b427a, type: 3} m_Name: m_EditorClassIdentifier: - spriteRenderer: {fileID: 0} + spriteRenderer: {fileID: 3081469578364191227} diff --git a/Assets/SnakeGame/Scripts/GameManager.cs b/Assets/SnakeGame/Scripts/GameManager.cs index cb6a25e..57a8841 100644 --- a/Assets/SnakeGame/Scripts/GameManager.cs +++ b/Assets/SnakeGame/Scripts/GameManager.cs @@ -9,10 +9,8 @@ public class GameManager : MonoBehaviour { #region Serialized Fields [SerializeField] private BoardDisplay boardDisplay; - [Range(5, 100)] - [SerializeField] private int width = 10; - [Range(5, 100)] - [SerializeField] private int height = 10; + [Range(5, 100)] [SerializeField] private int width = 10; + [Range(5, 100)] [SerializeField] private int height = 10; [Tooltip("The time in seconds between each move")] [SerializeField] private float turnDuration = 1; @@ -25,9 +23,9 @@ public class GameManager : MonoBehaviour { [SerializeField] private List players; [Header("Cinemachine")] [SerializeField] - private CinemachineVirtualCamera virtualCamera; - - + private CinemachineVirtualCamera virtualCamera; + + [SerializeField] private TMP_Text player1ScoreText; [SerializeField] private TMP_Text player2ScoreText; @@ -35,6 +33,8 @@ public class GameManager : MonoBehaviour { private Board _board; private float _currentTimer; + [SerializeField] private bool wrapIsEnabled; + [SerializeField] private int foodCount = 1; #region Event Functions @@ -45,12 +45,21 @@ private void Start() { CreateSnakeControllers(snakeNumber); // food + for (int i = 0; i < foodCount; i++) { _board.FoodPositions.Add(_board.SpawnFood()); + + } } private void Update() { _currentTimer += Time.deltaTime; + if (!IsSnakeAlive(snakes[0])) { + //reload the scene + UnityEngine.SceneManagement.SceneManager.LoadScene(0); + } + + foreach (var player in players) { if (snakes.Length <= player.snakeId) { Debug.LogError("Player snake id is out of range"); @@ -83,7 +92,7 @@ private void Update() { foreach (var snakeController in snakes) { if (IsSnakeAlive(snakeController)) { - snakeController.Move(_board, snakeController.Snake); + snakeController.Move(_board, snakeController.Snake, wrapIsEnabled); _board.DrawSnake(snakeController.Snake); } } @@ -91,8 +100,8 @@ private void Update() { // draw the board boardDisplay.DrawBoard(_board); //update score - player1ScoreText.text = "Player 1 Score: "+ snakes[0].Snake.Score; - player2ScoreText.text = "Player 2 Score: "+ snakes[1].Snake.Score; + player1ScoreText.text = "Player 1 Score: " + snakes[0].Snake.Score; + player2ScoreText.text = "Player 2 Score: " + snakes[1].Snake.Score; } #endregion diff --git a/Assets/SnakeGame/Scripts/SnakeAgent.cs b/Assets/SnakeGame/Scripts/SnakeAgent.cs new file mode 100644 index 0000000..e3b9bb0 --- /dev/null +++ b/Assets/SnakeGame/Scripts/SnakeAgent.cs @@ -0,0 +1,195 @@ +using System.Collections.Generic; +using TMPro; +using Unity.MLAgents; +using Unity.MLAgents.Actuators; +using Unity.MLAgents.Sensors; +using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.SceneManagement; + +namespace SnakeGame.Scripts { + public class SnakeAgent : Agent { + #region Serialized Fields + + [SerializeField] private BoardDisplay boardDisplay; + [Range(5, 100)] [SerializeField] private int width = 10; + [Range(5, 100)] [SerializeField] private int height = 10; + + [Tooltip("The time in seconds between each move")] [SerializeField] + private float turnDuration = 1; + + [SerializeField] private SnakeController[] snakes; + + [SerializeField] private int snakeNumber = 2; + [SerializeField] private GameObject snakeControllerPrefab; + + [SerializeField] private List players; + + + + [SerializeField] private TMP_Text scoreText; + + #endregion + + private Board _board; + private float _currentTimer; + [SerializeField] private bool wrapIsEnabled; + [SerializeField] private int foodCount = 1; + + private void Start() { + _board = new Board(width, height); + snakes = new SnakeController[snakeNumber]; + CreateSnakeControllers(snakeNumber); + + // food + for (int i = 0; i < foodCount; i++) { + _board.FoodPositions.Add(_board.SpawnFood()); + + } + } + + + public override void OnEpisodeBegin() { + Debug.Log("Episode Begin"); + } + + private void Update() { + _currentTimer += Time.deltaTime; + + if (!IsSnakeAlive(snakes[0])) { + SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); + + + } + + + foreach (var player in players) { + if (snakes.Length <= player.snakeId) { + Debug.LogError("Player snake id is out of range"); + continue; + } + + var snake = snakes[player.snakeId]; + + var inputDirection = InputController.HandleInput(snake.Snake.Direction, player.inputSchemer); + + if (inputDirection != Vector2Int.zero) + snake.NextDirection = inputDirection; + } + + + if (_currentTimer < turnDuration) return; + _currentTimer = 0; + + + // check for collisions + foreach (var snakeController in snakes) { + if (IsSnakeAlive(snakeController)) { + snakeController.FinalizeDirection(); + snakeController.CheckCollisions(_board); + } + } + + _board.ClearBoard(); + _board.DrawFood(_board.FoodPositions); + + foreach (var snakeController in snakes) { + if (IsSnakeAlive(snakeController)) { + snakeController.Move(_board, snakeController.Snake, wrapIsEnabled); + _board.DrawSnake(snakeController.Snake); + } + } + + // draw the board + boardDisplay.DrawBoard(_board); + //update score + scoreText.text = "Player 1 Score: " + snakes[0].Snake.Score; + } + + private static bool IsSnakeAlive(SnakeController snakeController) { + return snakeController.Snake.IsAlive; + } + + private void CreateSnakeControllers(int number) { + for (int i = 0; i < number; i++) { + var snakeControllerObj = Instantiate(snakeControllerPrefab); + var snakeController = snakeControllerObj.GetComponent(); + + var startSpawnPosition = new Vector2Int(width / 2, height / 2); + startSpawnPosition += Vector2Int.right * i * 10; + + snakes[i] = snakeController; + snakeController.InitializeSnakeProperties(startSpawnPosition, Vector2Int.up, 5, i); + } + } + + + public override void CollectObservations(VectorSensor sensor) { + Debug.Log("Collecting Observations"); + var testVector = new Vector2Int(0, 0); + sensor.AddObservation(testVector); + + } + + public override void OnActionReceived(ActionBuffers actions) { + Debug.Log("Action Received"); + // up = 0, right = 1, down = 2, left = 3 + var action = actions.DiscreteActions[0]; + + switch (action) { + case 0: + snakes[0].NextDirection = new Vector2Int(0, 1); + break; + case 1: + snakes[0].NextDirection = new Vector2Int(1, 0); + break; + case 2: + snakes[0].NextDirection = new Vector2Int(0, -1); + break; + case 3: + snakes[0].NextDirection = new Vector2Int(-1, 0); + break; + } + + snakes[0].FinalizeDirection(); + snakes[0].CheckCollisions(_board); + + snakes[0].Move(_board, snakes[0].Snake, false); + _board.DrawSnake(snakes[0].Snake); + + if (snakes[0].Snake.IsAlive) { + AddReward(0.1f); + } else { + AddReward(-1f); + EndEpisode(); + } + + _board.ClearBoard(); + _board.DrawFood(_board.FoodPositions); + + boardDisplay.DrawBoard(_board); + + + scoreText.text = "Player 1 Score: " + snakes[0].Snake.Score; + } + + public override void Heuristic(in ActionBuffers actionsOut) { + Debug.Log("Heuristic"); + // wasd controls + + var discreteActionsOut = actionsOut.DiscreteActions; + + discreteActionsOut[0] = 0; + + if (Keyboard.current.wKey.wasPressedThisFrame) { + discreteActionsOut[0] = 0; + } else if (Keyboard.current.dKey.wasPressedThisFrame) { + discreteActionsOut[0] = 1; + } else if (Keyboard.current.sKey.wasPressedThisFrame) { + discreteActionsOut[0] = 2; + } else if (Keyboard.current.aKey.wasPressedThisFrame) { + discreteActionsOut[0] = 3; + } + } + } +} \ No newline at end of file diff --git a/Assets/SnakeGame/Scripts/SnakeAgent.cs.meta b/Assets/SnakeGame/Scripts/SnakeAgent.cs.meta new file mode 100644 index 0000000..c1d0047 --- /dev/null +++ b/Assets/SnakeGame/Scripts/SnakeAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 939a75a990faa4c4eb3f768181f646f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SnakeGame/Scripts/SnakeController.cs b/Assets/SnakeGame/Scripts/SnakeController.cs index d6919d3..1dc86ab 100644 --- a/Assets/SnakeGame/Scripts/SnakeController.cs +++ b/Assets/SnakeGame/Scripts/SnakeController.cs @@ -31,21 +31,22 @@ public void FinalizeDirection() { Snake.Direction = NextDirection; // Update the direction of the Snake } - public void Move(Board board, Snake snake) { + public void Move(Board board, Snake snake, bool wrapIsEnabled) { var nextPosition = snake.Position + NextDirection; - - if (nextPosition.x < 0 || nextPosition.x >= board.Width || nextPosition.y < 0 || - nextPosition.y >= board.Height) { - // make the snake wrap around the board - if (nextPosition.x < 0) { - snake.Position = new Vector2Int(board.Width - 1, snake.Position.y); - } else if (nextPosition.x >= board.Width) { - snake.Position = new Vector2Int(0, snake.Position.y); - } else if (nextPosition.y < 0) { - snake.Position = new Vector2Int(snake.Position.x, board.Height - 1); - } else if (nextPosition.y >= board.Height) { - snake.Position = new Vector2Int(snake.Position.x, 0); + if (wrapIsEnabled) { + if (nextPosition.x < 0 || nextPosition.x >= board.Width || nextPosition.y < 0 || + nextPosition.y >= board.Height) { + // make the snake wrap around the board + if (nextPosition.x < 0) { + snake.Position = new Vector2Int(board.Width - 1, snake.Position.y); + } else if (nextPosition.x >= board.Width) { + snake.Position = new Vector2Int(0, snake.Position.y); + } else if (nextPosition.y < 0) { + snake.Position = new Vector2Int(snake.Position.x, board.Height - 1); + } else if (nextPosition.y >= board.Height) { + snake.Position = new Vector2Int(snake.Position.x, 0); + } } } else { snake.Position = nextPosition; @@ -69,6 +70,7 @@ public void CheckCollisions(Board board) { // make the snake wrap around the board Debug.Log("Collision with wall"); + Snake.Die(); return; } diff --git a/Assets/SnakeGame/Scripts/SpriteBoardDisplay.cs b/Assets/SnakeGame/Scripts/SpriteBoardDisplay.cs index cf9c9b0..8e16c38 100644 --- a/Assets/SnakeGame/Scripts/SpriteBoardDisplay.cs +++ b/Assets/SnakeGame/Scripts/SpriteBoardDisplay.cs @@ -57,6 +57,7 @@ private void CompareBoardAndTileDisplays(Board board) { public override void DrawBoard(Board board) { CompareBoardAndTileDisplays(board); + for (int y = 0; y < board.Height; y++) { diff --git a/Assets/SnakeGame/Scripts/TileDisplay.cs b/Assets/SnakeGame/Scripts/TileDisplay.cs index 998d42d..00ecf38 100644 --- a/Assets/SnakeGame/Scripts/TileDisplay.cs +++ b/Assets/SnakeGame/Scripts/TileDisplay.cs @@ -19,6 +19,7 @@ public void Awake() { public void ChangeMaterial(Material material) { spriteRenderer.material = material; + } } } \ No newline at end of file diff --git a/Assets/SnakeGame/_Levels/AI.unity b/Assets/SnakeGame/_Levels/AI.unity new file mode 100644 index 0000000..68e8543 --- /dev/null +++ b/Assets/SnakeGame/_Levels/AI.unity @@ -0,0 +1,1044 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &203348078 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 203348079} + - component: {fileID: 203348080} + m_Layer: 0 + m_Name: Board + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &203348079 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203348078} + 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: 264101533} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &203348080 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203348078} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 09e27a9e979653a47bd78611d7d84eaf, type: 3} + m_Name: + m_EditorClassIdentifier: + tileDisplayPrefab: {fileID: 3950580333902855008, guid: 86608ba48dfc11548b915734282959b8, type: 3} + noneMaterial: {fileID: 2100000, guid: 8d03a3a4db1fe3441a7e2710bc1aadf4, type: 2} + foodMaterial: {fileID: 2100000, guid: 5add81d8b16c4cb4783ff46d1aedd96b, type: 2} + snakeMaterial: {fileID: 2100000, guid: e896db5c14b6d7144a23fdcbd8a12c11, type: 2} +--- !u!1 &264101532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 264101533} + m_Layer: 0 + m_Name: Env + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &264101533 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 264101532} + 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: + - {fileID: 203348079} + - {fileID: 775269534} + - {fileID: 463504523} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &463504522 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 463504523} + - component: {fileID: 463504526} + - component: {fileID: 463504525} + - component: {fileID: 463504524} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &463504523 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 463504522} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 950784870} + m_Father: {fileID: 264101533} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &463504524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 463504522} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &463504525 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 463504522} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &463504526 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 463504522} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &775269532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 775269534} + - component: {fileID: 775269533} + - component: {fileID: 775269535} + m_Layer: 0 + m_Name: SnakeAgent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &775269533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775269532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 939a75a990faa4c4eb3f768181f646f0, type: 3} + m_Name: + m_EditorClassIdentifier: + agentParameters: + maxStep: 0 + hasUpgradedFromAgentParameters: 1 + MaxStep: 1000 + boardDisplay: {fileID: 203348080} + width: 25 + height: 25 + turnDuration: 0.1 + snakes: [] + snakeNumber: 2 + snakeControllerPrefab: {fileID: 5176623454189848404, guid: a79d362b88669644798048710e8d66f0, type: 3} + players: + - snakeId: 0 + inputSchemer: {fileID: 11400000, guid: 892832864e8092948b7a24eab06bfcad, type: 2} + - snakeId: 1 + inputSchemer: {fileID: 11400000, guid: e400d8b9556fa484b8c239de033811c0, type: 2} + scoreText: {fileID: 1723296507} + wrapIsEnabled: 0 + foodCount: 1 +--- !u!4 &775269534 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775269532} + 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: 264101533} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &775269535 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775269532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5d1c4e0b1822b495aa52bc52839ecb30, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BrainParameters: + VectorObservationSize: 1 + NumStackedVectorObservations: 1 + m_ActionSpec: + m_NumContinuousActions: 0 + BranchSizes: 04000000 + VectorActionSize: 04000000 + VectorActionDescriptions: [] + VectorActionSpaceType: 0 + hasUpgradedBrainParametersWithActionSpec: 1 + m_Model: {fileID: 0} + m_InferenceDevice: 2 + m_BehaviorType: 1 + m_BehaviorName: SnakeAi + TeamId: 0 + m_UseChildSensors: 1 + m_UseChildActuators: 1 + m_DeterministicInference: 0 + m_ObservableAttributeHandling: 0 +--- !u!1 &950784869 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 950784870} + - component: {fileID: 950784873} + - component: {fileID: 950784872} + - component: {fileID: 950784871} + m_Layer: 5 + m_Name: TopPanel_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &950784870 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950784869} + 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: + - {fileID: 1723296506} + m_Father: {fileID: 463504523} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -747.1776, y: 480.93085} + m_SizeDelta: {x: -1494.3455, y: -961.8617} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &950784871 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950784869} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &950784872 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950784869} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &950784873 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950784869} + m_CullTransparentMesh: 1 +--- !u!1 &962005171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 962005174} + - component: {fileID: 962005173} + - component: {fileID: 962005175} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &962005173 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 962005171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &962005174 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 962005171} + 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &962005175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 962005171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_MoveRepeatDelay: 0.5 + m_MoveRepeatRate: 0.1 + m_XRTrackingOrigin: {fileID: 0} + m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_DeselectOnBackgroundClick: 1 + m_PointerBehavior: 0 + m_CursorLockBehavior: 0 +--- !u!1 &1159006801 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1159006803} + - component: {fileID: 1159006802} + m_Layer: 0 + m_Name: Virtual Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1159006802 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159006801} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45e653bab7fb20e499bda25e1b646fea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ExcludedPropertiesInInspector: + - m_Script + m_LockStageInInspector: + m_StreamingVersion: 20170927 + m_Priority: 10 + m_StandbyUpdate: 2 + m_LookAt: {fileID: 203348079} + m_Follow: {fileID: 203348079} + m_Lens: + FieldOfView: 60 + OrthographicSize: 12.5 + NearClipPlane: 0.3 + FarClipPlane: 1000 + Dutch: 0 + ModeOverride: 0 + LensShift: {x: 0, y: 0} + GateFit: 2 + FocusDistance: 10 + m_SensorSize: {x: 1, y: 1} + m_Transitions: + m_BlendHint: 0 + m_InheritPosition: 0 + m_OnCameraLive: + m_PersistentCalls: + m_Calls: [] + m_LegacyBlendHint: 0 + m_ComponentOwner: {fileID: 1836237653} +--- !u!4 &1159006803 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159006801} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1836237653} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1222165746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1222165747} + m_Layer: 0 + m_Name: Managment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1222165747 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1222165746} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1563848681 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1563848684} + - component: {fileID: 1563848683} + - component: {fileID: 1563848682} + - component: {fileID: 1563848685} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1563848682 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1563848681} + m_Enabled: 1 +--- !u!20 &1563848683 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1563848681} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 12.5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1563848684 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1563848681} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + 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 &1563848685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1563848681} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72ece51f2901e7445ab60da3685d6b5f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowDebugText: 0 + m_ShowCameraFrustum: 1 + m_IgnoreTimeScale: 0 + m_WorldUpOverride: {fileID: 0} + m_UpdateMethod: 2 + m_BlendUpdateMethod: 1 + m_DefaultBlend: + m_Style: 1 + m_Time: 2 + m_CustomCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_CustomBlends: {fileID: 0} + m_CameraCutEvent: + m_PersistentCalls: + m_Calls: [] + m_CameraActivatedEvent: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1723296505 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1723296506} + - component: {fileID: 1723296508} + - component: {fileID: 1723296507} + m_Layer: 5 + m_Name: Player1ScoreText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1723296506 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1723296505} + 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: 950784870} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 282.0294, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1723296507 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1723296505} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Player 1 Score: 0' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 44.1 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1723296508 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1723296505} + m_CullTransparentMesh: 1 +--- !u!1 &1836237652 +GameObject: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1836237653} + - component: {fileID: 1836237656} + - component: {fileID: 1836237655} + - component: {fileID: 1836237654} + m_Layer: 0 + m_Name: cm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1836237653 +Transform: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836237652} + 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: 1159006803} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1836237654 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836237652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fa7155796051b734daa718462081dc5f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BindingMode: 1 + m_FollowOffset: {x: 0, y: 0, z: -10} + m_XDamping: 1 + m_YDamping: 1 + m_ZDamping: 1 + m_AngularDampingMode: 0 + m_PitchDamping: 0 + m_YawDamping: 0 + m_RollDamping: 0 + m_AngularDamping: 0 +--- !u!114 &1836237655 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836237652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4044717213e31446939f7bd49c896ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_TrackedObjectOffset: {x: 0, y: 0, z: 0} + m_LookaheadTime: 0 + m_LookaheadSmoothing: 0 + m_LookaheadIgnoreY: 0 + m_HorizontalDamping: 0.5 + m_VerticalDamping: 0.5 + m_ScreenX: 0.5 + m_ScreenY: 0.5 + m_DeadZoneWidth: 0 + m_DeadZoneHeight: 0 + m_SoftZoneWidth: 0.8 + m_SoftZoneHeight: 0.8 + m_BiasX: 0 + m_BiasY: 0 + m_CenterOnActivate: 1 +--- !u!114 &1836237656 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836237652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac0b09e7857660247b1477e93731de29, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/SnakeGame/_Levels/AI.unity.meta b/Assets/SnakeGame/_Levels/AI.unity.meta new file mode 100644 index 0000000..4416d47 --- /dev/null +++ b/Assets/SnakeGame/_Levels/AI.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a063a73148572484591e47fdbcea95de +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SnakeGame/_Levels/Main.unity b/Assets/SnakeGame/_Levels/Main.unity index 48d85a0..e989147 100644 --- a/Assets/SnakeGame/_Levels/Main.unity +++ b/Assets/SnakeGame/_Levels/Main.unity @@ -144,13 +144,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 203348078} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &203348080 MonoBehaviour: @@ -296,12 +296,12 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 486120380} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + 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: 1605153019} + m_Father: {fileID: 1222165747} m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &486120382 @@ -317,8 +317,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: boardDisplay: {fileID: 203348080} - width: 25 - height: 25 + width: 10 + height: 10 turnDuration: 0.1 snakes: [] snakeNumber: 2 @@ -326,11 +326,11 @@ MonoBehaviour: players: - snakeId: 0 inputSchemer: {fileID: 11400000, guid: 892832864e8092948b7a24eab06bfcad, type: 2} - - snakeId: 1 - inputSchemer: {fileID: 11400000, guid: e400d8b9556fa484b8c239de033811c0, type: 2} virtualCamera: {fileID: 1159006802} player1ScoreText: {fileID: 991293984} player2ScoreText: {fileID: 1776048084} + wrapIsEnabled: 0 + foodCount: 1 --- !u!1 &667033751 GameObject: m_ObjectHideFlags: 0 @@ -683,8 +683,8 @@ MonoBehaviour: m_StreamingVersion: 20170927 m_Priority: 10 m_StandbyUpdate: 2 - m_LookAt: {fileID: 203348079} - m_Follow: {fileID: 203348079} + m_LookAt: {fileID: 0} + m_Follow: {fileID: 0} m_Lens: FieldOfView: 60 OrthographicSize: 12.5 @@ -718,6 +718,38 @@ Transform: m_Children: - {fileID: 1836237653} m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1222165746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1222165747} + m_Layer: 0 + m_Name: Managment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1222165747 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1222165746} + 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: + - {fileID: 486120381} + m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1563848681 @@ -847,38 +879,6 @@ MonoBehaviour: m_CameraActivatedEvent: m_PersistentCalls: m_Calls: [] ---- !u!1 &1605153018 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1605153019} - m_Layer: 0 - m_Name: Managment - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1605153019 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1605153018} - 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: - - {fileID: 486120381} - m_Father: {fileID: 0} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1776048082 GameObject: m_ObjectHideFlags: 0 diff --git a/Packages/manifest.json b/Packages/manifest.json index 1f9c785..5932323 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -6,6 +6,8 @@ "com.unity.ide.rider": "3.0.24", "com.unity.ide.visualstudio": "2.0.18", "com.unity.inputsystem": "1.6.1", + "com.unity.ml-agents": "file:C:/Users/felix/PycharmProjects/SerpentHuntersAi/ml-agents/com.unity.ml-agents", + "com.unity.ml-agents.extensions": "file:C:/Users/felix/PycharmProjects/SerpentHuntersAi/ml-agents/com.unity.ml-agents.extensions", "com.unity.test-framework": "1.3.7", "com.unity.textmeshpro": "3.0.6", "com.unity.timeline": "1.8.2", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index d70c1e6..12d35e7 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -93,9 +93,20 @@ }, "url": "https://packages.unity.com" }, + "com.unity.barracuda": { + "version": "3.0.0", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.burst": "1.6.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + }, + "url": "https://packages.unity.com" + }, "com.unity.burst": { "version": "1.8.7", - "depth": 3, + "depth": 2, "source": "registry", "dependencies": { "com.unity.mathematics": "1.2.1" @@ -184,6 +195,25 @@ "dependencies": {}, "url": "https://packages.unity.com" }, + "com.unity.ml-agents": { + "version": "file:C:/Users/felix/PycharmProjects/SerpentHuntersAi/ml-agents/com.unity.ml-agents", + "depth": 0, + "source": "local", + "dependencies": { + "com.unity.barracuda": "3.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.ml-agents.extensions": { + "version": "file:C:/Users/felix/PycharmProjects/SerpentHuntersAi/ml-agents/com.unity.ml-agents.extensions", + "depth": 0, + "source": "local", + "dependencies": { + "com.unity.ml-agents": "2.3.0-exp.3", + "com.unity.modules.physics": "1.0.0" + } + }, "com.unity.test-framework": { "version": "1.3.7", "depth": 0,