From 6826eada7a08901672dca17222f9b45bff0ba980 Mon Sep 17 00:00:00 2001 From: Felix Boucher Date: Wed, 13 Mar 2024 16:08:40 -0400 Subject: [PATCH] skill tree visuals and functions start --- Assets/Scenes/SkillTree.unity | 795 ++++++++++++++++++ Assets/Scenes/SkillTree.unity.meta | 7 + Assets/Skill Tree.meta | 8 + Assets/Skill Tree/SkillTreeItemDisplay.prefab | 92 ++ .../SkillTreeItemDisplay.prefab.meta | 7 + Assets/Skill Tree/Test1 1.asset | 19 + Assets/Skill Tree/Test1 1.asset.meta | 8 + Assets/Skill Tree/Test1 2.asset | 20 + Assets/Skill Tree/Test1 2.asset.meta | 8 + Assets/Skill Tree/Test1 3.asset | 20 + Assets/Skill Tree/Test1 3.asset.meta | 8 + Assets/Skill Tree/Test1 4.asset | 20 + Assets/Skill Tree/Test1 4.asset.meta | 8 + Assets/Skill Tree/Test1 5.asset | 21 + Assets/Skill Tree/Test1 5.asset.meta | 8 + Assets/Skill Tree/Test1 6.asset | 21 + Assets/Skill Tree/Test1 6.asset.meta | 8 + Assets/Skill Tree/Test1 7.asset | 21 + Assets/Skill Tree/Test1 7.asset.meta | 8 + Assets/Skill Tree/Test1 8.asset | 21 + Assets/Skill Tree/Test1 8.asset.meta | 8 + Assets/Skill Tree/Test1 9.asset | 21 + Assets/Skill Tree/Test1 9.asset.meta | 8 + Assets/Skill Tree/Test1.asset | 20 + Assets/Skill Tree/Test1.asset.meta | 8 + Assets/Skill Tree/UILineRenderer.prefab | 70 ++ Assets/Skill Tree/UILineRenderer.prefab.meta | 7 + Assets/SkillTreeEffect.cs | 11 + Assets/SkillTreeEffect.cs.meta | 11 + Assets/SkillTreeItem.cs | 21 + Assets/SkillTreeItem.cs.meta | 11 + Assets/SkillTreeItemDisplay.cs | 36 + Assets/SkillTreeItemDisplay.cs.meta | 11 + Assets/SkillTreeManager.cs | 153 ++++ Assets/SkillTreeManager.cs.meta | 11 + Assets/UILineRenderer.cs | 82 ++ Assets/UILineRenderer.cs.meta | 11 + 37 files changed, 1628 insertions(+) create mode 100644 Assets/Scenes/SkillTree.unity create mode 100644 Assets/Scenes/SkillTree.unity.meta create mode 100644 Assets/Skill Tree.meta create mode 100644 Assets/Skill Tree/SkillTreeItemDisplay.prefab create mode 100644 Assets/Skill Tree/SkillTreeItemDisplay.prefab.meta create mode 100644 Assets/Skill Tree/Test1 1.asset create mode 100644 Assets/Skill Tree/Test1 1.asset.meta create mode 100644 Assets/Skill Tree/Test1 2.asset create mode 100644 Assets/Skill Tree/Test1 2.asset.meta create mode 100644 Assets/Skill Tree/Test1 3.asset create mode 100644 Assets/Skill Tree/Test1 3.asset.meta create mode 100644 Assets/Skill Tree/Test1 4.asset create mode 100644 Assets/Skill Tree/Test1 4.asset.meta create mode 100644 Assets/Skill Tree/Test1 5.asset create mode 100644 Assets/Skill Tree/Test1 5.asset.meta create mode 100644 Assets/Skill Tree/Test1 6.asset create mode 100644 Assets/Skill Tree/Test1 6.asset.meta create mode 100644 Assets/Skill Tree/Test1 7.asset create mode 100644 Assets/Skill Tree/Test1 7.asset.meta create mode 100644 Assets/Skill Tree/Test1 8.asset create mode 100644 Assets/Skill Tree/Test1 8.asset.meta create mode 100644 Assets/Skill Tree/Test1 9.asset create mode 100644 Assets/Skill Tree/Test1 9.asset.meta create mode 100644 Assets/Skill Tree/Test1.asset create mode 100644 Assets/Skill Tree/Test1.asset.meta create mode 100644 Assets/Skill Tree/UILineRenderer.prefab create mode 100644 Assets/Skill Tree/UILineRenderer.prefab.meta create mode 100644 Assets/SkillTreeEffect.cs create mode 100644 Assets/SkillTreeEffect.cs.meta create mode 100644 Assets/SkillTreeItem.cs create mode 100644 Assets/SkillTreeItem.cs.meta create mode 100644 Assets/SkillTreeItemDisplay.cs create mode 100644 Assets/SkillTreeItemDisplay.cs.meta create mode 100644 Assets/SkillTreeManager.cs create mode 100644 Assets/SkillTreeManager.cs.meta create mode 100644 Assets/UILineRenderer.cs create mode 100644 Assets/UILineRenderer.cs.meta diff --git a/Assets/Scenes/SkillTree.unity b/Assets/Scenes/SkillTree.unity new file mode 100644 index 0000000..d5835ab --- /dev/null +++ b/Assets/Scenes/SkillTree.unity @@ -0,0 +1,795 @@ +%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_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_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: 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 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &74215036 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 74215037} + - component: {fileID: 74215038} + m_Layer: 0 + m_Name: SkillTreeManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &74215037 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 74215036} + 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 &74215038 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 74215036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 189af8399b45f804eb767baaa36a9db7, type: 3} + m_Name: + m_EditorClassIdentifier: + _lineColorVariation: 0.4 + _lineOffset: 15 + _lineThickness: 15 + _startPositionOffset: {x: 300, y: -100} + _distanceBetweenItems: {x: 300, y: 200} + _skillTreeItems: + - {fileID: 11400000, guid: ce6d0fc74c9e0fd49b412fd37cf62213, type: 2} + - {fileID: 11400000, guid: 79fb78f193254c74cb8194aad233ecaa, type: 2} + - {fileID: 11400000, guid: 5fbcfe5e85811524caa187b65be8cfc1, type: 2} + - {fileID: 11400000, guid: efcd7af2d7c64234990b4a6869775c57, type: 2} + - {fileID: 11400000, guid: 17f00e73db6a97547895303ee376d177, type: 2} + - {fileID: 11400000, guid: 82ec020b00977e243adf1d5221c67809, type: 2} + - {fileID: 11400000, guid: 93581ed3f5332bc4dab9df1b2bf0fdda, type: 2} + - {fileID: 11400000, guid: 5798b91bdac61d94d82ce5e97582556b, type: 2} + - {fileID: 11400000, guid: e65cf60904ca7ee4e8ee445f7d0a67b8, type: 2} + - {fileID: 11400000, guid: d56cd3a5eb2ad3f48b68183560afa5c9, type: 2} + _skillTreeItemPrefab: {fileID: 7442892309867697477, guid: 07fe615b8cf3559439b9a4b36a21d5b7, type: 3} + _uiLineRendererPrefab: {fileID: 1946587475807645676, guid: 15d6d4e31075baa40b5945d9baa4ceb3, type: 3} + _nodeContainer: {fileID: 1280368214} + _lineContainer: {fileID: 2124872662} +--- !u!1 &586799724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 586799727} + - component: {fileID: 586799726} + - component: {fileID: 586799728} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &586799726 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586799724} + 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 &586799727 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586799724} + 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!114 &586799728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586799724} + 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 &879395221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 879395222} + - component: {fileID: 879395225} + - component: {fileID: 879395224} + - component: {fileID: 879395223} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &879395222 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 879395221} + 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: 1497335522} + m_Father: {fileID: 1615913764} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &879395223 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 879395221} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 1717539779} + m_Horizontal: 1 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 0 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 1497335522} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 0} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &879395224 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 879395221} + 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: 0.16981131, g: 0.16981131, b: 0.16981131, 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_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 &879395225 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 879395221} + m_CullTransparentMesh: 1 +--- !u!1 &1280368213 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1280368214} + m_Layer: 5 + m_Name: Nodes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1280368214 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1280368213} + 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: 1717539779} + 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: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1497335521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1497335522} + - component: {fileID: 1497335525} + - component: {fileID: 1497335524} + - component: {fileID: 1497335523} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1497335522 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497335521} + 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: 1717539779} + m_Father: {fileID: 879395222} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1497335523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497335521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!114 &1497335524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497335521} + 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: 1} + 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: 10917, 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 &1497335525 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497335521} + m_CullTransparentMesh: 1 +--- !u!1 &1615913760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1615913764} + - component: {fileID: 1615913763} + - component: {fileID: 1615913762} + - component: {fileID: 1615913761} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1615913761 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615913760} + 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 &1615913762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615913760} + 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 &1615913763 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615913760} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 1616958551} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1615913764 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615913760} + 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: 879395222} + m_Father: {fileID: 0} + 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!1 &1616958549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1616958552} + - component: {fileID: 1616958551} + - component: {fileID: 1616958550} + - component: {fileID: 1616958553} + 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 &1616958550 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616958549} + m_Enabled: 1 +--- !u!20 &1616958551 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616958549} + 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 &1616958552 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616958549} + 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 &1616958553 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616958549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 +--- !u!1 &1717539778 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1717539779} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1717539779 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1717539778} + 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: 2124872662} + - {fileID: 1280368214} + m_Father: {fileID: 1497335522} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -1920, y: 1080} + m_Pivot: {x: 0, y: 1} +--- !u!1 &2124872661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2124872662} + m_Layer: 5 + m_Name: Lines + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2124872662 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124872661} + 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: 1717539779} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/Scenes/SkillTree.unity.meta b/Assets/Scenes/SkillTree.unity.meta new file mode 100644 index 0000000..88d7486 --- /dev/null +++ b/Assets/Scenes/SkillTree.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 79f0602eee73dc644ad77124a878eae7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree.meta b/Assets/Skill Tree.meta new file mode 100644 index 0000000..e0bacba --- /dev/null +++ b/Assets/Skill Tree.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b22eb1f77eb9f804fb3f25a2f1cef0ac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/SkillTreeItemDisplay.prefab b/Assets/Skill Tree/SkillTreeItemDisplay.prefab new file mode 100644 index 0000000..1f73cc4 --- /dev/null +++ b/Assets/Skill Tree/SkillTreeItemDisplay.prefab @@ -0,0 +1,92 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7442892309867697477 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6570901477560605990} + - component: {fileID: 6652007641718425542} + - component: {fileID: 1180160822018692804} + - component: {fileID: 4031871662976306990} + m_Layer: 5 + m_Name: SkillTreeItemDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6570901477560605990 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7442892309867697477} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6652007641718425542 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7442892309867697477} + m_CullTransparentMesh: 1 +--- !u!114 &1180160822018692804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7442892309867697477} + 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: 1} + 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: 0} + m_Type: 0 + 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!114 &4031871662976306990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7442892309867697477} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bc1c72d277ee98a41ac140be6a69c482, type: 3} + m_Name: + m_EditorClassIdentifier: + _data: {fileID: 0} diff --git a/Assets/Skill Tree/SkillTreeItemDisplay.prefab.meta b/Assets/Skill Tree/SkillTreeItemDisplay.prefab.meta new file mode 100644 index 0000000..4df41d3 --- /dev/null +++ b/Assets/Skill Tree/SkillTreeItemDisplay.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 07fe615b8cf3559439b9a4b36a21d5b7 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1 1.asset b/Assets/Skill Tree/Test1 1.asset new file mode 100644 index 0000000..99f6032 --- /dev/null +++ b/Assets/Skill Tree/Test1 1.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 1 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: [] diff --git a/Assets/Skill Tree/Test1 1.asset.meta b/Assets/Skill Tree/Test1 1.asset.meta new file mode 100644 index 0000000..b35db55 --- /dev/null +++ b/Assets/Skill Tree/Test1 1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce6d0fc74c9e0fd49b412fd37cf62213 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1 2.asset b/Assets/Skill Tree/Test1 2.asset new file mode 100644 index 0000000..a882dea --- /dev/null +++ b/Assets/Skill Tree/Test1 2.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 2 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: + - {fileID: 11400000, guid: ce6d0fc74c9e0fd49b412fd37cf62213, type: 2} diff --git a/Assets/Skill Tree/Test1 2.asset.meta b/Assets/Skill Tree/Test1 2.asset.meta new file mode 100644 index 0000000..16de6d3 --- /dev/null +++ b/Assets/Skill Tree/Test1 2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79fb78f193254c74cb8194aad233ecaa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1 3.asset b/Assets/Skill Tree/Test1 3.asset new file mode 100644 index 0000000..a7065cd --- /dev/null +++ b/Assets/Skill Tree/Test1 3.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 3 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: + - {fileID: 11400000, guid: ce6d0fc74c9e0fd49b412fd37cf62213, type: 2} diff --git a/Assets/Skill Tree/Test1 3.asset.meta b/Assets/Skill Tree/Test1 3.asset.meta new file mode 100644 index 0000000..b168177 --- /dev/null +++ b/Assets/Skill Tree/Test1 3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5fbcfe5e85811524caa187b65be8cfc1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1 4.asset b/Assets/Skill Tree/Test1 4.asset new file mode 100644 index 0000000..2cfaf94 --- /dev/null +++ b/Assets/Skill Tree/Test1 4.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 4 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: + - {fileID: 11400000, guid: ce6d0fc74c9e0fd49b412fd37cf62213, type: 2} diff --git a/Assets/Skill Tree/Test1 4.asset.meta b/Assets/Skill Tree/Test1 4.asset.meta new file mode 100644 index 0000000..b1d7605 --- /dev/null +++ b/Assets/Skill Tree/Test1 4.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: efcd7af2d7c64234990b4a6869775c57 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1 5.asset b/Assets/Skill Tree/Test1 5.asset new file mode 100644 index 0000000..2f811b9 --- /dev/null +++ b/Assets/Skill Tree/Test1 5.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 5 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: + - {fileID: 11400000, guid: 79fb78f193254c74cb8194aad233ecaa, type: 2} + - {fileID: 11400000, guid: 5fbcfe5e85811524caa187b65be8cfc1, type: 2} diff --git a/Assets/Skill Tree/Test1 5.asset.meta b/Assets/Skill Tree/Test1 5.asset.meta new file mode 100644 index 0000000..6e78d92 --- /dev/null +++ b/Assets/Skill Tree/Test1 5.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17f00e73db6a97547895303ee376d177 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1 6.asset b/Assets/Skill Tree/Test1 6.asset new file mode 100644 index 0000000..f7396fe --- /dev/null +++ b/Assets/Skill Tree/Test1 6.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 6 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: + - {fileID: 11400000, guid: 79fb78f193254c74cb8194aad233ecaa, type: 2} + - {fileID: 11400000, guid: 5fbcfe5e85811524caa187b65be8cfc1, type: 2} diff --git a/Assets/Skill Tree/Test1 6.asset.meta b/Assets/Skill Tree/Test1 6.asset.meta new file mode 100644 index 0000000..e44b92c --- /dev/null +++ b/Assets/Skill Tree/Test1 6.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 82ec020b00977e243adf1d5221c67809 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1 7.asset b/Assets/Skill Tree/Test1 7.asset new file mode 100644 index 0000000..f8eea01 --- /dev/null +++ b/Assets/Skill Tree/Test1 7.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 7 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: + - {fileID: 11400000, guid: 5fbcfe5e85811524caa187b65be8cfc1, type: 2} + - {fileID: 11400000, guid: efcd7af2d7c64234990b4a6869775c57, type: 2} diff --git a/Assets/Skill Tree/Test1 7.asset.meta b/Assets/Skill Tree/Test1 7.asset.meta new file mode 100644 index 0000000..4f0c54a --- /dev/null +++ b/Assets/Skill Tree/Test1 7.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93581ed3f5332bc4dab9df1b2bf0fdda +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1 8.asset b/Assets/Skill Tree/Test1 8.asset new file mode 100644 index 0000000..e160419 --- /dev/null +++ b/Assets/Skill Tree/Test1 8.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 8 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: + - {fileID: 11400000, guid: 5fbcfe5e85811524caa187b65be8cfc1, type: 2} + - {fileID: 11400000, guid: efcd7af2d7c64234990b4a6869775c57, type: 2} diff --git a/Assets/Skill Tree/Test1 8.asset.meta b/Assets/Skill Tree/Test1 8.asset.meta new file mode 100644 index 0000000..4a9310c --- /dev/null +++ b/Assets/Skill Tree/Test1 8.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5798b91bdac61d94d82ce5e97582556b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1 9.asset b/Assets/Skill Tree/Test1 9.asset new file mode 100644 index 0000000..89520fa --- /dev/null +++ b/Assets/Skill Tree/Test1 9.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 9 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: + - {fileID: 11400000, guid: 5fbcfe5e85811524caa187b65be8cfc1, type: 2} + - {fileID: 11400000, guid: efcd7af2d7c64234990b4a6869775c57, type: 2} diff --git a/Assets/Skill Tree/Test1 9.asset.meta b/Assets/Skill Tree/Test1 9.asset.meta new file mode 100644 index 0000000..545931b --- /dev/null +++ b/Assets/Skill Tree/Test1 9.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e65cf60904ca7ee4e8ee445f7d0a67b8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/Test1.asset b/Assets/Skill Tree/Test1.asset new file mode 100644 index 0000000..d0e302e --- /dev/null +++ b/Assets/Skill Tree/Test1.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 526e6c18f56dd004bad96452cd958dc3, type: 3} + m_Name: Test1 + m_EditorClassIdentifier: + _displayName: + _description: + _effects: [] + _price: 0 + _prerequisites: + - {fileID: 11400000, guid: e65cf60904ca7ee4e8ee445f7d0a67b8, type: 2} diff --git a/Assets/Skill Tree/Test1.asset.meta b/Assets/Skill Tree/Test1.asset.meta new file mode 100644 index 0000000..77b766a --- /dev/null +++ b/Assets/Skill Tree/Test1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d56cd3a5eb2ad3f48b68183560afa5c9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Skill Tree/UILineRenderer.prefab b/Assets/Skill Tree/UILineRenderer.prefab new file mode 100644 index 0000000..5169b9f --- /dev/null +++ b/Assets/Skill Tree/UILineRenderer.prefab @@ -0,0 +1,70 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1946587475807645676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1946587475807645677} + - component: {fileID: 1946587475807645683} + - component: {fileID: 1946587475807645682} + m_Layer: 0 + m_Name: UILineRenderer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1946587475807645677 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946587475807645676} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1946587475807645683 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946587475807645676} + m_CullTransparentMesh: 1 +--- !u!114 &1946587475807645682 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946587475807645676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0ab86d183f9add24ab1478c914e6965a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0} + m_Color: {r: 0, g: 0, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + points: + - {x: 0, y: 0} + - {x: 265.07, y: 0} + - {x: 263.2, y: 218.11} + - {x: 557.4, y: 218.11} + thickness: 8 diff --git a/Assets/Skill Tree/UILineRenderer.prefab.meta b/Assets/Skill Tree/UILineRenderer.prefab.meta new file mode 100644 index 0000000..7bcdb82 --- /dev/null +++ b/Assets/Skill Tree/UILineRenderer.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 15d6d4e31075baa40b5945d9baa4ceb3 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SkillTreeEffect.cs b/Assets/SkillTreeEffect.cs new file mode 100644 index 0000000..59a2c20 --- /dev/null +++ b/Assets/SkillTreeEffect.cs @@ -0,0 +1,11 @@ +using System; +using UnityEngine; + +[Serializable] +public class SkillTreeEffect +{ + [SerializeField] + private string _stat; + [SerializeField] + private float _modifier; +} \ No newline at end of file diff --git a/Assets/SkillTreeEffect.cs.meta b/Assets/SkillTreeEffect.cs.meta new file mode 100644 index 0000000..2c5c3b3 --- /dev/null +++ b/Assets/SkillTreeEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7646226cbf346494893ab8903b90a66e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SkillTreeItem.cs b/Assets/SkillTreeItem.cs new file mode 100644 index 0000000..be9e3be --- /dev/null +++ b/Assets/SkillTreeItem.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using UnityEngine; + +[CreateAssetMenu(menuName = "Gather And Defend/Skill Tree Item")] +public class SkillTreeItem : ScriptableObject +{ + [SerializeField] + private string _displayName; + [SerializeField] + private string _description; + [SerializeField] + private List _effects; + [SerializeField] + private int _price; + [SerializeField] + private List _prerequisites; + + public IReadOnlyList Effects => _effects; + public int Price => _price; + public IReadOnlyList Prerequisites => _prerequisites; +} \ No newline at end of file diff --git a/Assets/SkillTreeItem.cs.meta b/Assets/SkillTreeItem.cs.meta new file mode 100644 index 0000000..fc68efe --- /dev/null +++ b/Assets/SkillTreeItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 526e6c18f56dd004bad96452cd958dc3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SkillTreeItemDisplay.cs b/Assets/SkillTreeItemDisplay.cs new file mode 100644 index 0000000..7003742 --- /dev/null +++ b/Assets/SkillTreeItemDisplay.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; + +public class SkillTreeItemDisplay : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler +{ + [SerializeField] + SkillTreeItem _data; + public SkillTreeItem Data {get => _data; set => _data = value; } + private RectTransform _rectTransform; + private Vector2 size; + public List RelatedLines { get; } = new(); + + private void Start() + { + _rectTransform = GetComponent(); + size = _rectTransform.sizeDelta; + } + public void OnPointerExit(PointerEventData eventData) + { + RelatedLines.ForEach(line => line.Deselect()); + _rectTransform.sizeDelta = size ; + } + + public void OnPointerEnter(PointerEventData eventData) + { + RelatedLines.ForEach(line => line.Select()); + _rectTransform.sizeDelta = size * 1.05f; + } + + public void OnPointerClick(PointerEventData eventData) + { + Debug.Log("Clicked!"); + } +} diff --git a/Assets/SkillTreeItemDisplay.cs.meta b/Assets/SkillTreeItemDisplay.cs.meta new file mode 100644 index 0000000..3fd6a25 --- /dev/null +++ b/Assets/SkillTreeItemDisplay.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc1c72d277ee98a41ac140be6a69c482 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SkillTreeManager.cs b/Assets/SkillTreeManager.cs new file mode 100644 index 0000000..c7d2c95 --- /dev/null +++ b/Assets/SkillTreeManager.cs @@ -0,0 +1,153 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + + +#if UNITY_EDITOR +using UnityEditor; + +[CustomEditor(typeof(SkillTreeManager))] +public class SkillTreeManagerEditor : Editor +{ + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + if (GUILayout.Button("Generate")) + { + (target as SkillTreeManager).Generate(); + } + } +} +#endif + +public class SkillTreeManager : MonoBehaviour +{ + //[SerializeField] + //private + [SerializeField] + private float _lineColorVariation = 0.2f; + [SerializeField] + private float _lineOffset = 5f; + [SerializeField] + private float _lineThickness = 10f; + [SerializeField] + private Vector2 _startPositionOffset = new Vector2(200, 0); + [SerializeField] + Vector2 _distanceBetweenItems = Vector2.one * 200; + [SerializeField] + List _skillTreeItems; + [SerializeField] + GameObject _skillTreeItemPrefab; + [SerializeField] + GameObject _uiLineRendererPrefab; + [SerializeField] + Transform _nodeContainer; + [SerializeField] + Transform _lineContainer; + + private List DrawColumn(List items, List created) + { + var returnList = new List(); + var ancestors = items.Max(current => GetAncestorCount(current)); + for (int i = 0; i < items.Count; i++) + { + var item = items[i]; + + var comp = created.Find(x => x.Data == item); + if (comp) + { + returnList.Add(comp); + continue; + } + + var x = _startPositionOffset.x + ancestors * _distanceBetweenItems.x; + var y = _startPositionOffset.y + _distanceBetweenItems.y * i - (items.Count / 2) * _distanceBetweenItems.y; + var pos = new Vector2(x, y); + + + var instance = Instantiate(_skillTreeItemPrefab, _nodeContainer.transform); + instance.GetComponent().anchoredPosition = pos; + comp = instance.GetComponent(); + comp.Data = item; + created.Add(comp); + returnList.Add(comp); + } + return returnList; + + static int GetAncestorCount(SkillTreeItem item, int start = 0) + { + var max = start; + foreach(var ancestor in item.Prerequisites) + { + var count = GetAncestorCount(ancestor, start + 1); + if (count > max) max = count; + } + return max; + } + } + + private void Start() + { + Generate(); + } + + public void Generate() + { + foreach (Transform t in _nodeContainer) DestroyImmediate(t.gameObject); + foreach (Transform t in _lineContainer) DestroyImmediate(t.gameObject); + + var dict = new Dictionary>(); + var created = new List(); + var choices = _skillTreeItems.FindAll(x => x.Prerequisites.Count <= 0); + + DrawColumn(choices, created); + + for (int i = 0; i < created.Count; i++) + { + var current = created[i]; + + choices = _skillTreeItems.FindAll(x => x.Prerequisites.Contains(current.Data)); + if (choices.Count <= 0) continue; + + var column = DrawColumn(choices, created); + } + + foreach (var node in created) + { + dict.TryAdd(node.Data.GetHashCode(), new()); + Vector2 colorVariation = new Vector2(Random.value - 0.5f, Random.value - 0.5f) * _lineColorVariation; + var rect1 = node.GetComponent(); + + var prereqs = created.FindAll(x => x.Data.Prerequisites.Contains(node.Data)); + + for (int p = 0; p < prereqs.Count; p++) + { + var prereq = prereqs[p]; + + if (dict[node.Data.GetHashCode()].Contains(prereq.Data.GetHashCode())) continue; + dict[node.Data.GetHashCode()].Add(prereq.Data.GetHashCode()); + + var rect2 = prereq.GetComponent(); + var delta = rect2.anchoredPosition - rect1.anchoredPosition; + + var lineObj = Instantiate(_uiLineRendererPrefab, _lineContainer); + var line = lineObj.GetComponent(); + + node.RelatedLines.Add(line); + prereq.RelatedLines.Add(line); + + line.points.Clear(); + line.points.Add(rect1.anchoredPosition + (p * _lineOffset - prereqs.Count * _lineOffset / 2) * Vector2.one); + line.points.Add(rect1.anchoredPosition + (p * _lineOffset - prereqs.Count * _lineOffset / 2) * Vector2.one + Vector2.right * delta.x / 2); + line.points.Add(rect2.anchoredPosition + (p * _lineOffset - prereqs.Count * _lineOffset / 2) * Vector2.one + Vector2.left * delta.x / 2); + line.points.Add(rect2.anchoredPosition + (p * _lineOffset - prereqs.Count * _lineOffset / 2) * Vector2.one); + line.transform.SetAsFirstSibling(); + + Color.RGBToHSV(line.color, out float H, out float S, out float V); + line.thickness = _lineThickness; + line.color = Color.HSVToRGB(H, S + colorVariation.x, V + colorVariation.y); + } + } + } +} diff --git a/Assets/SkillTreeManager.cs.meta b/Assets/SkillTreeManager.cs.meta new file mode 100644 index 0000000..e4641fd --- /dev/null +++ b/Assets/SkillTreeManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 189af8399b45f804eb767baaa36a9db7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UILineRenderer.cs b/Assets/UILineRenderer.cs new file mode 100644 index 0000000..9a9b105 --- /dev/null +++ b/Assets/UILineRenderer.cs @@ -0,0 +1,82 @@ +using System.Collections; +using System.Collections.Generic; +#if UNITY_EDITOR +using UnityEditor; +#endif +using UnityEngine; +using UnityEngine.UI; + +public class UILineRenderer : Graphic +{ + public List points = new List(); + public float thickness = 10f; + + float GetAngle(Vector2 source, Vector2 target) + { + return (float)(Mathf.Atan2(target.y - source.y, target.x - source.x)) * Mathf.Rad2Deg; + } + protected override void OnPopulateMesh(VertexHelper vh) + { + vh.Clear(); + + if (points.Count < 2) return; + + float angle = 0; + for (int i = 0; i < points.Count; i++) + { + Vector2 point = points[i]; + + if (i < points.Count - 1) + { + angle = GetAngle(points[i], points[i + 1]) + 45f; + } + + DrawVertices(point, vh, angle); + } + + for (int i = 0; i < points.Count - 1; ++i) + { + int index = i * 2; + vh.AddTriangle(index + 0, index + 1, index + 3); + vh.AddTriangle(index + 3, index + 2, index + 0); + } + } + + void DrawVertices(Vector2 point, VertexHelper vh, float angle) + { + UIVertex vertex = UIVertex.simpleVert; + vertex.color = color; + + vertex.position = Quaternion.Euler(0, 0, angle) * new Vector3(-thickness / 2, 0); + vertex.position += new Vector3(point.x, point.y); + vh.AddVert(vertex); + + vertex.position = Quaternion.Euler(0, 0, angle) * new Vector3(thickness / 2, 0); + vertex.position += new Vector3(point.x, point.y); + vh.AddVert(vertex); + } + + private Color previousColor; + public void Select() + { + previousColor = color; + color = Color.yellow; + transform.SetAsLastSibling(); + } + public void Deselect() + { + color = previousColor; + } + +#if UNITY_EDITOR + [MenuItem("GameObject/Gather and Defend/UILineRenderer")] + public static void CreateUILineRenderer() + { + var line = new GameObject("UILineRenderer"); + line.transform.parent = Selection.activeTransform; + line.AddComponent(); + line.AddComponent(); + EditorUtility.SetDirty(line); + } +#endif +} diff --git a/Assets/UILineRenderer.cs.meta b/Assets/UILineRenderer.cs.meta new file mode 100644 index 0000000..0c4823a --- /dev/null +++ b/Assets/UILineRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ab86d183f9add24ab1478c914e6965a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: