diff --git a/Assets/Editor/CustomAttributeDrawers.cs b/Assets/Editor/CustomAttributeDrawers.cs new file mode 100644 index 0000000..babc351 --- /dev/null +++ b/Assets/Editor/CustomAttributeDrawers.cs @@ -0,0 +1,39 @@ +//From https://answers.unity.com/questions/442342/how-to-make-public-variable-read-only-during-run-t.html +using UnityEngine; +using UnityEditor; + +[CustomPropertyDrawer(typeof(BeforeStartAttribute))] +public class BeforeStartAttributeDrawer : PropertyDrawer +{ + // Necessary since some properties tend to collapse smaller than their content + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, label, true); + } + + // Draw a disabled property field + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + GUI.enabled = !Application.isPlaying; + EditorGUI.PropertyField(position, property, label, true); + GUI.enabled = true; + } +} + +[CustomPropertyDrawer(typeof(AfterStartAttribute))] +public class AfterStartAttributeDrawer : PropertyDrawer +{ + // Necessary since some properties tend to collapse smaller than their content + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, label, true); + } + + // Draw a disabled property field + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + GUI.enabled = Application.isPlaying; + EditorGUI.PropertyField(position, property, label, true); + GUI.enabled = true; + } +} \ No newline at end of file diff --git a/Assets/Editor/CustomAttributeDrawers.cs.meta b/Assets/Editor/CustomAttributeDrawers.cs.meta new file mode 100644 index 0000000..2c1c0f3 --- /dev/null +++ b/Assets/Editor/CustomAttributeDrawers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd8509fca2c0ebe47acb277e2aed11f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/GameController.prefab b/Assets/Prefabs/GameController.prefab index e2319f9..785b082 100644 --- a/Assets/Prefabs/GameController.prefab +++ b/Assets/Prefabs/GameController.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &2866215097817665852 +--- !u!1 &1792584738874209504 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,7 +8,7 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 3211721187637284538} + - component: {fileID: 1419775483983031142} m_Layer: 0 m_Name: GameController m_TagString: GameController @@ -16,17 +16,131 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &3211721187637284538 +--- !u!4 &1419775483983031142 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2866215097817665852} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.18855336, y: 0.26111984, z: 34.533203} + m_GameObject: {fileID: 1792584738874209504} + 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_Children: [] + m_Children: + - {fileID: 8897064855631282258} + - {fileID: 3789201758602335435} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5605884945823581445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3789201758602335435} + - component: {fileID: 5602184811824951751} + m_Layer: 0 + m_Name: Map + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3789201758602335435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5605884945823581445} + 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_Children: [] + m_Father: {fileID: 1419775483983031142} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5602184811824951751 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5605884945823581445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 052bc569472779a429bfc51246f723d4, type: 3} + m_Name: + m_EditorClassIdentifier: + mapSize: 40 + roomsToGenerate: 8 + minRoomSize: 2 + maxRoomSize: 8 + maxRoomIterations: 100 + wallSprite: {fileID: 21300000, guid: f5be5362b22aa6c48993a720ec6c9b84, type: 3} + floorSprites: + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - {fileID: 21300000, guid: fa4c9841fd8a5fb4f94ff78c95301065, type: 3} + tilePrefab: {fileID: 3219556109866242471, guid: 0e0b618b5499bbb40b076c0291d55487, + type: 3} + playerPrefab: {fileID: 2935319493830293412, guid: e8ff38be23e53db40a793f6959c6f4ec, + type: 3} + enemyPrefabs: + - {fileID: 1164136568549368904, guid: a4aeecfb369f0974490d158ef9489335, type: 3} + enemiesToSpawn: 10 +--- !u!1 &8733140679003710819 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8897064855631282258} + - component: {fileID: 6815253418672446008} + m_Layer: 0 + m_Name: Entities + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8897064855631282258 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8733140679003710819} + 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_Children: [] + m_Father: {fileID: 1419775483983031142} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6815253418672446008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8733140679003710819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2447171af2ad9634498f2d769d7f5200, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Prefabs/Main Camera.prefab b/Assets/Prefabs/Main Camera.prefab new file mode 100644 index 0000000..a69623d --- /dev/null +++ b/Assets/Prefabs/Main Camera.prefab @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7475959774386308610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7475959774386308609} + - component: {fileID: 7475959774386308608} + - component: {fileID: 7475959774386308611} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7475959774386308609 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7475959774386308610} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &7475959774386308608 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7475959774386308610} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 1, g: 1, b: 1, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + 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: 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!81 &7475959774386308611 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7475959774386308610} + m_Enabled: 1 diff --git a/Assets/Animators.meta b/Assets/Prefabs/Main Camera.prefab.meta similarity index 57% rename from Assets/Animators.meta rename to Assets/Prefabs/Main Camera.prefab.meta index 7ff80b8..03dd195 100644 --- a/Assets/Animators.meta +++ b/Assets/Prefabs/Main Camera.prefab.meta @@ -1,7 +1,6 @@ fileFormatVersion: 2 -guid: 043f304edcc831c4ea9fcf0e1a2e520d -folderAsset: yes -DefaultImporter: +guid: 04409c352bfbdea4b9830f11d7b4d40e +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/Prefabs/Player.prefab b/Assets/Prefabs/Player.prefab new file mode 100644 index 0000000..e43f461 --- /dev/null +++ b/Assets/Prefabs/Player.prefab @@ -0,0 +1,175 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2935319493830293412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2935319493830293414} + - component: {fileID: 2935319493830293413} + - component: {fileID: -5893075763862095451} + m_Layer: 0 + m_Name: Player + m_TagString: Player + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2935319493830293414 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2935319493830293412} + 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_Children: + - {fileID: 2894367173346332699} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2935319493830293413 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2935319493830293412} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4de6b97c3d785d146a0df2c1c078fe91, type: 3} + m_Name: + m_EditorClassIdentifier: + hpMax: 0 + hp: 0 + sprite: {fileID: 21300000, guid: fe9c8eab186d5004eaad446d8e220800, type: 3} + exp: 0 + level: 0 +--- !u!212 &-5893075763862095451 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2935319493830293412} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: -522733599 + m_SortingLayer: 1 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: fe9c8eab186d5004eaad446d8e220800, 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_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1001 &5734536248370648602 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2935319493830293414} + m_Modifications: + - target: {fileID: 7475959774386308610, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_Name + value: Main Camera + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalPosition.z + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 04409c352bfbdea4b9830f11d7b4d40e, type: 3} +--- !u!4 &2894367173346332699 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7475959774386308609, guid: 04409c352bfbdea4b9830f11d7b4d40e, + type: 3} + m_PrefabInstance: {fileID: 5734536248370648602} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Prefabs/Player.prefab.meta b/Assets/Prefabs/Player.prefab.meta new file mode 100644 index 0000000..87e72f3 --- /dev/null +++ b/Assets/Prefabs/Player.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e8ff38be23e53db40a793f6959c6f4ec +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Slime.prefab b/Assets/Prefabs/Slime.prefab new file mode 100644 index 0000000..ae102a3 --- /dev/null +++ b/Assets/Prefabs/Slime.prefab @@ -0,0 +1,114 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1164136568549368904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2043533519980591455} + - component: {fileID: 7440667849060313208} + - component: {fileID: 571363246873614695} + - component: {fileID: 1351652798109185028} + m_Layer: 0 + m_Name: Slime + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2043533519980591455 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164136568549368904} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7440667849060313208 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164136568549368904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a72ad0eb2136f284bab78f19fa561bb8, type: 3} + m_Name: + m_EditorClassIdentifier: + hpMax: 0 + hp: 0 + sprite: {fileID: 21300000, guid: 0121970e693ee0a4d987bd5fe694ad67, type: 3} +--- !u!114 &571363246873614695 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164136568549368904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fcfe4b94620b234fb7a294bf4453a69, type: 3} + m_Name: + m_EditorClassIdentifier: + hpMax: 0 + hp: 0 + sprite: {fileID: 21300000, guid: 0121970e693ee0a4d987bd5fe694ad67, type: 3} + visionRange: 4 +--- !u!212 &1351652798109185028 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164136568549368904} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: -522733599 + m_SortingLayer: 1 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: 0121970e693ee0a4d987bd5fe694ad67, 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_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/Assets/Prefabs/Slime.prefab.meta b/Assets/Prefabs/Slime.prefab.meta new file mode 100644 index 0000000..feab3cc --- /dev/null +++ b/Assets/Prefabs/Slime.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a4aeecfb369f0974490d158ef9489335 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Tile.prefab b/Assets/Prefabs/Tile.prefab new file mode 100644 index 0000000..0095f28 --- /dev/null +++ b/Assets/Prefabs/Tile.prefab @@ -0,0 +1,97 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3219556109866242471 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3219556109866242468} + - component: {fileID: 9040756953319481538} + - component: {fileID: 1691311275711631131} + m_Layer: 0 + m_Name: Tile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3219556109866242468 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3219556109866242471} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &9040756953319481538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3219556109866242471} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4df8012d0534aea47b137c1838a5a6af, type: 3} + m_Name: + m_EditorClassIdentifier: + walkable: 0 + roomPart: 0 + sprite: {fileID: 0} +--- !u!212 &1691311275711631131 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3219556109866242471} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: -23662865 + m_SortingLayer: -1 + m_SortingOrder: 0 + m_Sprite: {fileID: 0} + 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_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 0 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/Assets/Scenes/Steffo.unity b/Assets/Scenes/Steffo.unity index ccc28e4..e69de29 100644 --- a/Assets/Scenes/Steffo.unity +++ b/Assets/Scenes/Steffo.unity @@ -1,274 +0,0 @@ -%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: 11 - 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_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - 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_ShowResolutionOverlay: 1 - m_ExportTrainingData: 0 - m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - 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 - accuratePlacement: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &1386694424 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1386694427} - - component: {fileID: 1386694426} - - component: {fileID: 1386694425} - 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 &1386694425 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1386694424} - m_Enabled: 1 ---- !u!20 &1386694426 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1386694424} - 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_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - 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: 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 &1386694427 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1386694424} - 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_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &5874724150884597007 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 2866215097817665852, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_Name - value: GameController - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalPosition.x - value: 0.18855336 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalPosition.y - value: 0.26111984 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalPosition.z - value: 34.533203 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3211721187637284538, guid: 4c25f33cb89f6624db48fc49d353a7f2, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 4c25f33cb89f6624db48fc49d353a7f2, type: 3} diff --git a/Assets/Scripts/AI.cs b/Assets/Scripts/AI.cs new file mode 100644 index 0000000..fd30b46 --- /dev/null +++ b/Assets/Scripts/AI.cs @@ -0,0 +1,10 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class AI : Entity +{ + public virtual void OnTurn(){ + Debug.LogWarning("OnTurn() not overridden"); + } +} \ No newline at end of file diff --git a/Assets/Scripts/AI.cs.meta b/Assets/Scripts/AI.cs.meta new file mode 100644 index 0000000..438e77b --- /dev/null +++ b/Assets/Scripts/AI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e694420377849854db7a2686ff36420c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AISlime.cs b/Assets/Scripts/AISlime.cs new file mode 100644 index 0000000..eaa3584 --- /dev/null +++ b/Assets/Scripts/AISlime.cs @@ -0,0 +1,44 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class AISlime : AI +{ + public float visionRange = 4; + protected Player player; + + protected new void Start() { + base.Start(); + player = GameObject.FindGameObjectWithTag("Player").GetComponent(); + } + + public override void OnTurn(){ + if (CanSeePlayer()){ + //TODO + } + else { + int direction = Random.Range(0, 4); + if (direction == 0 && map.CanMoveTo(MapPosition + Vector2Int.left)){ + transform.Translate(Vector3.left); + } + else if (direction == 1 && map.CanMoveTo(MapPosition + Vector2Int.right)){ + transform.Translate(Vector3.right); + } + else if (direction == 2 && map.CanMoveTo(MapPosition + Vector2Int.up)){ + transform.Translate(Vector3.up); + } + else if (direction == 3 && map.CanMoveTo(MapPosition + Vector2Int.down)){ + transform.Translate(Vector3.down); + } + } + } + + public bool CanSeePlayer(){ + return Vector3.Distance(player.transform.position, transform.position) < visionRange; + } + + private void OnDrawGizmosSelected() { + Gizmos.color = Color.cyan; + Gizmos.DrawWireSphere(transform.position, visionRange); + } +} \ No newline at end of file diff --git a/Assets/Scripts/AISlime.cs.meta b/Assets/Scripts/AISlime.cs.meta new file mode 100644 index 0000000..9c04775 --- /dev/null +++ b/Assets/Scripts/AISlime.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2fcfe4b94620b234fb7a294bf4453a69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/CustomAttributes.cs b/Assets/Scripts/CustomAttributes.cs new file mode 100644 index 0000000..01377f1 --- /dev/null +++ b/Assets/Scripts/CustomAttributes.cs @@ -0,0 +1,5 @@ +using UnityEngine; + +public class BeforeStartAttribute : PropertyAttribute {} + +public class AfterStartAttribute : PropertyAttribute {} \ No newline at end of file diff --git a/Assets/Scripts/CustomAttributes.cs.meta b/Assets/Scripts/CustomAttributes.cs.meta new file mode 100644 index 0000000..6e0a606 --- /dev/null +++ b/Assets/Scripts/CustomAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6fdc88abee025004d9040a4026bfcb11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Entity.cs b/Assets/Scripts/Entity.cs new file mode 100644 index 0000000..f9549f1 --- /dev/null +++ b/Assets/Scripts/Entity.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Entity : MonoBehaviour +{ + public int hpMax; + + [AfterStartAttribute] + public int hp; + + [BeforeStartAttribute] + public Sprite sprite; + + public Vector2Int MapPosition { + get { + return new Vector2Int((int)transform.position.x, (int)transform.position.y); + } + } + + protected GameObject gameController; + protected SpriteRenderer spriteRenderer; + protected TurnHandler turnHandler; + protected Map map; + + protected void Start() + { + spriteRenderer = GetComponent(); + spriteRenderer.sprite = sprite; + gameController = GameObject.FindGameObjectWithTag("GameController"); + turnHandler = gameController.GetComponentInChildren(); + map = gameController.GetComponentInChildren(); + hp = hpMax; + } +} diff --git a/Assets/Scripts/Entity.cs.meta b/Assets/Scripts/Entity.cs.meta new file mode 100644 index 0000000..20fc693 --- /dev/null +++ b/Assets/Scripts/Entity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09a0fcf071a3b6244b6339cd122566fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Map.cs b/Assets/Scripts/Map.cs new file mode 100644 index 0000000..f8eaa52 --- /dev/null +++ b/Assets/Scripts/Map.cs @@ -0,0 +1,259 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[System.Serializable] +public class ImpossibleCorridorError : System.Exception +{ + public ImpossibleCorridorError() { } + public ImpossibleCorridorError(string message) : base(message) { } + public ImpossibleCorridorError(string message, System.Exception inner) : base(message, inner) { } + protected ImpossibleCorridorError( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) : base(info, context) { } +} + +public class MapRoom { + public readonly Vector2Int start; + public readonly Vector2Int end; + public readonly int mapSize; + + public MapRoom(int mapSize, int maxRoomSize, int minRoomSize) { + this.mapSize = mapSize; + start = new Vector2Int(Random.Range(1, mapSize-1), Random.Range(1, mapSize-1)); + end = new Vector2Int(Random.Range(1, mapSize-1), Random.Range(1, mapSize-1)); + if(start.x > end.x) { + int swap = start.x; + start.x = end.x; + end.x = swap; + } + if(start.y > end.y) { + int swap = start.y; + start.y = end.y; + end.y = swap; + } + while(end.x - start.x > maxRoomSize) { + end.x--; + start.x++; + } + while(end.y - start.y > maxRoomSize) { + end.y--; + start.y++; + } + while(end.x - start.x < minRoomSize) { + end.x++; + start.x--; + } + while(end.y - start.y < minRoomSize) { + end.y++; + start.y--; + } + start.Clamp(new Vector2Int(1, 1), new Vector2Int(mapSize-1, mapSize-1)); + end.Clamp(new Vector2Int(1, 1), new Vector2Int(mapSize-1, mapSize-1)); + } + + public Vector2Int RandomPoint() { + return new Vector2Int(Random.Range(start.x, end.x+1), Random.Range(start.y, end.y+1)); + } +} + +public class MapCorridor { + public readonly Vector2Int start; + public readonly Vector2Int end; + public readonly bool horizontal_priority; + + public MapCorridor(MapRoom from, MapRoom to, int mapSize) { + start = from.RandomPoint(); + end = to.RandomPoint(); + //50% + horizontal_priority = Random.Range(0f, 1f) >= 0.5f; + } +} + +public class Map : MonoBehaviour +{ + [BeforeStartAttribute] + public int mapSize = 30; + + [BeforeStartAttribute] + public int roomsToGenerate = 5; + + [BeforeStartAttribute] + public int minRoomSize = 2; + + [BeforeStartAttribute] + public int maxRoomSize = 6; + + [BeforeStartAttribute] + public int maxRoomIterations = 100; + + [BeforeStartAttribute] + public Sprite wallSprite; + + [BeforeStartAttribute] + public List floorSprites; + + [BeforeStartAttribute] + public GameObject tilePrefab; + + [BeforeStartAttribute] + public GameObject playerPrefab; + + [BeforeStartAttribute] + public List enemyPrefabs; + + [BeforeStartAttribute] + public int enemiesToSpawn = 10; + + private GameObject[,] tiles; + private List rooms; + private TurnHandler turnHandler; + + public Tile GetTile(Vector2Int position) { + GameObject tileObject = tiles[position.x, position.y]; + return tileObject.GetComponent(); + } + + public bool CanMoveTo(Vector2Int position) + { + try { + bool walkable = GetTile(position).walkable; + bool free = !(bool)turnHandler.GetEntityAtPosition(position); + return walkable && free; + } + catch(System.IndexOutOfRangeException) { + return false; + } + } + + private void InitTile(Vector2Int position, bool walkable, Sprite tileSprite, bool roomPart) { + Tile tile = GetTile(position); + tile.walkable = walkable; + tile.sprite = tileSprite; + tile.roomPart |= roomPart; + } + + private void FillWithWalls() { + for(int x = 0; x < mapSize; x++) { + for(int y = 0; y < mapSize; y++) { + GameObject tileObject = Instantiate(tilePrefab, transform); + tileObject.transform.position = new Vector3(x, y, 0); + tiles[x, y] = tileObject; + tileObject.name = "Tile [" + x.ToString() + ", " + y.ToString() + "]"; + Tile tile = tileObject.GetComponent(); + tile.walkable = false; + tile.sprite = wallSprite; + } + } + } + + private void PlaceRoom(MapRoom mr) { + for(int x = mr.start.x; x <= mr.end.x; x++) { + for(int y = mr.start.y; y <= mr.end.y; y++) { + InitTile(new Vector2Int(x, y), true, GetFloorTileSprite(), true); + } + } + } + + private bool ScanRoom(MapRoom mr) { + //Returns true if the room can be safely placed + for(int x = Mathf.Clamp(mr.start.x-1, 0, mapSize-1); x <= Mathf.Clamp(mr.end.x+1, 0, mapSize-1); x++) { + for(int y = Mathf.Clamp(mr.start.y-1, 0, mapSize-1); y <= Mathf.Clamp(mr.end.y+1, 0, mapSize-1); y++) { + if(GetTile(new Vector2Int(x, y)).roomPart) { + return false; + } + } + } + return true; + } + + private void PlaceCorridor(MapCorridor mc) { + Vector2Int cursor = new Vector2Int(mc.start.x, mc.start.y); + InitTile(cursor, true, GetFloorTileSprite(), false); + if(mc.horizontal_priority) { + while(cursor.x != mc.end.x) { + if(cursor.x > mc.end.x) cursor.x--; + else cursor.x++; + InitTile(cursor, true, GetFloorTileSprite(), false); + } + while(cursor.y != mc.end.y) { + if(cursor.y > mc.end.y) cursor.y--; + else cursor.y++; + InitTile(cursor, true, GetFloorTileSprite(), false); + } + } + else + { + while(cursor.y != mc.end.y) { + if(cursor.y > mc.end.y) cursor.y--; + else cursor.y++; + InitTile(cursor, true, GetFloorTileSprite(), false); + } + while(cursor.x != mc.end.x) { + if(cursor.x > mc.end.x) cursor.x--; + else cursor.x++; + InitTile(cursor, true, GetFloorTileSprite(), false); + } + } + } + + private void GenerateMap() { + FillWithWalls(); + int roomIterations = 0; + while(rooms.Count < roomsToGenerate && roomIterations < maxRoomIterations) { + roomIterations++; + MapRoom room = new MapRoom(mapSize, maxRoomSize, minRoomSize); + if(ScanRoom(room)) { + //Fill with the room + PlaceRoom(room); + rooms.Add(room); + } + //Place a corridor + if(rooms.Count > 1) { + MapRoom from = rooms[rooms.Count-2]; + MapRoom to = rooms[rooms.Count-1]; + try { + MapCorridor corridor = new MapCorridor(from, to, mapSize); + PlaceCorridor(corridor); + } + catch (ImpossibleCorridorError) { + } + } + } + } + + private void PlacePlayer() { + MapRoom room = rooms[Random.Range(0, rooms.Count)]; + Vector2Int point = room.RandomPoint(); + GameObject playerObject = Instantiate(playerPrefab, turnHandler.transform); + playerObject.name = "Player"; + playerObject.transform.position = new Vector3(point.x, point.y, 0); + } + + private void PlaceEnemies() { + for(int i = 0; i < enemiesToSpawn; i++) { + MapRoom room = rooms[Random.Range(0, rooms.Count)]; + Vector2Int point = room.RandomPoint(); + GameObject enemyPrefab = enemyPrefabs[Random.Range(0, enemyPrefabs.Count)]; + GameObject enemyObject = Instantiate(enemyPrefab, turnHandler.transform); + enemyObject.name = "Enemy " + i.ToString(); + enemyObject.transform.position = new Vector3(point.x, point.y, 0); + } + } + + private Sprite GetFloorTileSprite() { + return floorSprites[Random.Range(0, floorSprites.Count)]; + } + + private void Start() + { + //Initialize everything + tiles = new GameObject[mapSize, mapSize]; + rooms = new List(); + turnHandler = GameObject.FindGameObjectWithTag("GameController").GetComponentInChildren(); + + GenerateMap(); + PlacePlayer(); + PlaceEnemies(); + } +} diff --git a/Assets/Scripts/Map.cs.meta b/Assets/Scripts/Map.cs.meta new file mode 100644 index 0000000..d2f3f16 --- /dev/null +++ b/Assets/Scripts/Map.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 052bc569472779a429bfc51246f723d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - wallSprite: {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - roomSprite: {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - corridorSprite: {fileID: 21300000, guid: e0e60c9a4ff0b8e429e6cfe316da9bbf, type: 3} + - tilePrefab: {instanceID: 0} + executionOrder: -50 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Monster.cs b/Assets/Scripts/Monster.cs new file mode 100644 index 0000000..604daad --- /dev/null +++ b/Assets/Scripts/Monster.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Monster : MonoBehaviour +{ + public int hpMax; + + [AfterStartAttribute] + public int hp; + + [BeforeStartAttribute] + public Sprite sprite; + + private SpriteRenderer spriteRenderer; + + private void Start() + { + spriteRenderer = GetComponent(); + spriteRenderer.sprite = sprite; + hp = hpMax; + } +} diff --git a/Assets/Scripts/Monster.cs.meta b/Assets/Scripts/Monster.cs.meta new file mode 100644 index 0000000..f99ee29 --- /dev/null +++ b/Assets/Scripts/Monster.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a72ad0eb2136f284bab78f19fa561bb8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player.cs b/Assets/Scripts/Player.cs new file mode 100644 index 0000000..8c1b16c --- /dev/null +++ b/Assets/Scripts/Player.cs @@ -0,0 +1,50 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Player : Entity +{ + public int exp; + public int level; + + void Update() + { + CheckForMovementInput(); + } + + void CheckForMovementInput() + { + bool hasMoved = false; + if (Input.GetKeyDown(KeyCode.A)) + { + if (map.CanMoveTo(MapPosition + Vector2Int.left)) { + transform.Translate(Vector3.left); + hasMoved = true; + } + } + else if (Input.GetKeyDown(KeyCode.D)) + { + if (map.CanMoveTo(MapPosition + Vector2Int.right)) { + transform.Translate(Vector3.right); + hasMoved = true; + } + } + else if (Input.GetKeyDown(KeyCode.W)) + { + if (map.CanMoveTo(MapPosition + Vector2Int.up)) { + transform.Translate(Vector3.up); + hasMoved = true; + } + } + else if (Input.GetKeyDown(KeyCode.S)) + { + if (map.CanMoveTo(MapPosition + Vector2Int.down)) { + transform.Translate(Vector3.down); + hasMoved = true; + } + } + if(hasMoved) { + turnHandler.OnTurn(); + } + } +} diff --git a/Assets/Scripts/TurnHandler.cs b/Assets/Scripts/TurnHandler.cs new file mode 100644 index 0000000..2e42807 --- /dev/null +++ b/Assets/Scripts/TurnHandler.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class TurnHandler : MonoBehaviour +{ + public void OnTurn() { + AI[] ais = gameObject.GetComponentsInChildren(); + foreach(AI ai in ais) { + ai.OnTurn(); + } + } + + public Entity GetEntityAtPosition(Vector2Int position) { + Entity[] entities = GetComponentsInChildren(); + foreach(Entity entity in entities) { + if(entity.MapPosition == position) { + return entity; + } + } + return null; + } +} \ No newline at end of file diff --git a/Assets/Scripts/TurnHandler.cs.meta b/Assets/Scripts/TurnHandler.cs.meta new file mode 100644 index 0000000..1142ab1 --- /dev/null +++ b/Assets/Scripts/TurnHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2447171af2ad9634498f2d769d7f5200 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/PurpleTileset2.png.meta b/Assets/Sprites/PurpleTileset2.png.meta new file mode 100644 index 0000000..ead95e1 --- /dev/null +++ b/Assets/Sprites/PurpleTileset2.png.meta @@ -0,0 +1,112 @@ +fileFormatVersion: 2 +guid: fa4c9841fd8a5fb4f94ff78c95301065 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + 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 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + 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: 40 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 1f47e62ae7a531443a5dba842e499602 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 1c92a78..73c55a1 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -38,6 +38,12 @@ TagManager: - - m_SortingLayers: + - name: Tiles + uniqueID: 4271304431 + locked: 0 - name: Default uniqueID: 0 locked: 0 + - name: Entities + uniqueID: 3772233697 + locked: 0