Compare commits

...

4 Commits

Author SHA1 Message Date
cf103baf57 chore: 외부 에셋 권한 및 줄바꿈 재기록 반영
- Assets/External 하위 샘플 및 서드파티 에셋 파일의 실행 비트 변경을 별도 커밋으로 분리
- PolygonGeneric, SidekickCharacters, Synty 도구 자산 전반의 줄바꿈 및 재직렬화 차이를 그대로 보존
- 프로젝트 고유 로직 변경과 분리해 이후 히스토리에서 외부 에셋 노이즈 범위를 식별하기 쉽게 정리
2026-04-06 14:04:09 +09:00
c8edf838fd docs: 보스 설계 문서와 Codex YAML 도구 추가
- 프로젝트 AGENTS 지침에 커밋 후 푸시 확인 규칙과 런타임 콘텐츠 에이전트 규칙을 보강
- 보스 설계 플레이북과 멀티플레이 보스 설계 철학 문서를 추가해 사람용 설계 기준을 정리
- Codex-Tools 디렉터리에 Markdown→YAML→검증 파이프라인 스크립트와 프롬프트, 스키마, 설정 파일을 추가
2026-04-06 14:03:49 +09:00
c48d1bee52 chore: 드로그 후속 자산 및 테스트 씬 정리
- 드로그 전용 무기 프리팹과 네트워크 프리팹 등록을 추가하고 관련 솔루션 및 패키지 잠금 파일을 갱신
- Drog 메인 씬 보정과 DrogSidekickAttackReview 테스트 씬을 추가해 후속 검증용 환경을 정리
- SpawnEffect가 BossBehaviorRuntimeState의 현재 대상을 참조하도록 맞추고 TMP 폰트 자산 재생성 결과를 반영
2026-04-06 14:03:27 +09:00
904bc88d36 feat: 드로그 보스 AI 및 런타임 상태 구조 재구성
- 드로그 전투 컨텍스트를 BossBehaviorRuntimeState 중심 구조로 정리하고 BossEnemy, 패턴 액션, 조건 노드가 마지막 실행 결과와 phase 상태를 직접 사용하도록 갱신
- BT_Drog와 재빌드 에디터 스크립트를 확장해 phase 전환, 집행 결과 분기, 거리/쿨타임 기반 패턴 선택을 드로그 전용 자산과 노드 파라미터로 재구성
- 드로그 패턴/스킬/이펙트/애니메이션 플레이스홀더 자산을 재생성하고 보스 프리팹이 새 런타임 상태 및 등록 클립 구성을 참조하도록 정리
2026-04-06 13:56:47 +09:00
335 changed files with 118044 additions and 20084 deletions

View File

@@ -14,7 +14,7 @@ Multiplayer arena game built with **Unity 6000.3.10f1** and **Unity Netcode for
Design docs are maintained in Obsidian Vault: `/mnt/smb/Obsidian Vault/Colosseum`
- Always use the shared Obsidian Vault at `/mnt/smb/Obsidian Vault/Colosseum` for project documentation updates.
- **Obsidian Vault 파일은 반드시 파일 도구(read/write/edit)로만 접근한다.** cmd, powershell, bash 등은 UNC 경로를 정상적으로 처리하지 못하므로 사용하지 않는다.
- 현재 환경에서 접근 가능한 셸(`bash`, `zsh` 등) 기준으로 Obsidian Vault 파일을 열고 수정해도 된다.
- Unless the user explicitly names another file, `체크리스트` means `/mnt/smb/Obsidian Vault/Colosseum/개발/프로토타입 체크리스트.md`.
- After completing work, always check whether the prototype checklist should be updated and reflect the new status when needed.
- If the work also changes a domain-specific checklist such as boss/player/combat, sync that checklist too.
@@ -337,6 +337,7 @@ public class NetworkedComponent : NetworkBehaviour
- After Unity-related edits, check the Unity console for errors before proceeding.
- For networked play tests, prefer a temporary non-conflicting test port when needed and restore the default port after validation.
- The user has a strong project preference that play mode must be stopped before edits because network ports can remain occupied otherwise.
- When the user requests a commit, create the commit and show the message, then **ask before pushing**. Only push after explicit confirmation.
- Commit messages should follow the recent project history style: use a type prefix such as `feat:`, `fix:`, or `chore:` and write the subject in Korean so the gameplay/UI/system change is clear from the log alone.
- When the change is substantial, include a blank line after the subject and add Korean bullet points that summarize the work by feature/purpose, similar to commit `0889bb0` (`feat: 드로그 집행 개시 패턴 및 낙인 디버프 추가`).
- Prefer the format `type: 한글 요약` for the subject, then `- 변경 사항` bullet lines for the body. Use `feat:` for feature work, `fix:` for bug fixes, and `chore:` for non-feature maintenance such as scene/prefab cleanup, asset reorganization, or other miscellaneous upkeep. The body should mention key implementation scope, affected systems/assets, and validation or rollback notes when relevant.
@@ -348,3 +349,19 @@ public class NetworkedComponent : NetworkBehaviour
- 프로젝트 용어로는 `필살기`보다 `고위력 기술`을 우선 사용한다.
- 보호막은 단일 값이 아니라 `타입별 독립 인스턴스`로 취급한다. 같은 타입은 자기 자신만 갱신되고, 서로 다른 타입은 공존하며, 흡수 순서는 적용 순서를 따른다.
- 보스 시그니처 전조는 가능한 한 정확한 진행 수치 UI보다 명확한 모션/VFX로 읽히게 한다. 차단 진행도나 정확한 누적 수치 노출은 명시 요청이 없으면 피한다.
# Runtime Content Agent Rules
Purpose:
Keep boss YAML compatible with game runtime expectations.
Always:
- validate boss YAML shape before commit
- preserve `boss_id` stability
- keep runtime field names machine-readable and snake_case
- prefer additive changes over destructive changes
Never:
- change mechanic intent to satisfy schema formatting
- silently rename IDs
- auto-fill required combat values without a design source

View File

@@ -49,3 +49,8 @@ MonoBehaviour:
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 1094959737035716, guid: ed995920543b2df14ac6fbf81e5aa1af, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}

View File

@@ -2,7 +2,7 @@
// <auto-generated>
// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator
// version 1.18.0
// from Assets/Synty/AnimationBaseLocomotion/Samples/Scripts/InputSystem/Controls.inputactions
// from Assets/External/Animations/AnimationBaseLocomotion/Samples/Scripts/InputSystem/Controls.inputactions
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -16,7 +16,7 @@ using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Utilities;
/// <summary>
/// Provides programmatic access to <see cref="InputActionAsset" />, <see cref="InputActionMap" />, <see cref="InputAction" /> and <see cref="InputControlScheme" /> instances defined in asset "Assets/Synty/AnimationBaseLocomotion/Samples/Scripts/InputSystem/Controls.inputactions".
/// Provides programmatic access to <see cref="InputActionAsset" />, <see cref="InputActionMap" />, <see cref="InputAction" /> and <see cref="InputControlScheme" /> instances defined in asset "Assets/External/Animations/AnimationBaseLocomotion/Samples/Scripts/InputSystem/Controls.inputactions".
/// </summary>
/// <remarks>
/// This class is source generated and any manual edits will be discarded if the associated asset is reimported or modified.

View File

@@ -2,7 +2,7 @@
// <auto-generated>
// This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator
// version 1.18.0
// from Assets/Synty/AnimationGoblinLocomotion/Samples/Scripts/InputSystem/GBL_Controls.inputactions
// from Assets/External/Animations/AnimationGoblinLocomotion/Samples/Scripts/InputSystem/GBL_Controls.inputactions
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -16,7 +16,7 @@ using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Utilities;
/// <summary>
/// Provides programmatic access to <see cref="InputActionAsset" />, <see cref="InputActionMap" />, <see cref="InputAction" /> and <see cref="InputControlScheme" /> instances defined in asset "Assets/Synty/AnimationGoblinLocomotion/Samples/Scripts/InputSystem/GBL_Controls.inputactions".
/// Provides programmatic access to <see cref="InputActionAsset" />, <see cref="InputActionMap" />, <see cref="InputAction" /> and <see cref="InputControlScheme" /> instances defined in asset "Assets/External/Animations/AnimationGoblinLocomotion/Samples/Scripts/InputSystem/GBL_Controls.inputactions".
/// </summary>
/// <remarks>
/// This class is source generated and any manual edits will be discarded if the associated asset is reimported or modified.

View File

@@ -8,21 +8,32 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Dummy_Mat
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Shader: {fileID: -6465566751694194690, guid: 19e269a311c45cd4482cf0ac0e694503, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_ValidKeywords:
- _ALPHATEST_ON
- _OVERLAY_UV_CHANNEL_UV0
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AO_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Base_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@@ -43,6 +54,10 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Emission_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 52475fb4afae07b4384becbad96a4bee, type: 3}
m_Scale: {x: 1, y: 1}
@@ -51,33 +66,202 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Metallic_Smoothness_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Normal_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Overlay_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Emission_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Normal_Texture_Bottom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Normal_Texture_Side:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Normal_Texture_Top:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Texture_Bottom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Texture_Side:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Texture_Top:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AO_Intensity: 1
- _AlphaClip: 1
- _AlphaToMask: 1
- _BUILTIN_AlphaClip: 1
- _BUILTIN_Blend: 0
- _BUILTIN_CullMode: 2
- _BUILTIN_DstBlend: 0
- _BUILTIN_QueueControl: -1
- _BUILTIN_QueueOffset: 0
- _BUILTIN_SrcBlend: 1
- _BUILTIN_Surface: 0
- _BUILTIN_ZTest: 4
- _BUILTIN_ZWrite: 1
- _BUILTIN_ZWriteControl: 0
- _Blend: 0
- _BlendModePreserveSpecular: 0
- _Bottom_Metallic: 0
- _Bottom_Smoothness: 0
- _BumpScale: 1
- _CastShadows: 1
- _Cull: 2
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _Enable_Ambient_Occlusion: 0
- _Enable_Base_Texture: 0
- _Enable_Emission_Texture: 0
- _Enable_Normal_Texture: 0
- _Enable_Overlay_Texture: 0
- _Enable_Snow: 0
- _Enable_Triplanar_Emission: 0
- _Enable_Triplanar_Normals: 0
- _Enable_Triplanar_Texture: 0
- _Generate_From_Base_Normals: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _Normal_Intensity: 1
- _OVERLAY_UV_CHANNEL: 0
- _OcclusionStrength: 1
- _Overlay_Intensity: 1
- _Parallax: 0.02
- _QueueControl: -1
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Side_Metallic: 0
- _Side_Smoothness: 0
- _Smoothness: 0
- _SmoothnessTextureChannel: 0
- _Snow_Level: 0
- _Snow_Metallic: 0.1
- _Snow_Smoothness: 0.5
- _Snow_Transition: 1
- _Snow_Use_World_Up: 1
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _Top_Metallic: 0
- _Top_Smoothness: 0
- _Triplanar_Emission_Blend: 1
- _Triplanar_Emission_Intensity: 1
- _Triplanar_Emission_Tiling: 0.25
- _Triplanar_Fade: 1
- _Triplanar_Intensity: 1
- _Triplanar_Normal_Fade: 0
- _Triplanar_Normal_Intensity_Bottom: 1
- _Triplanar_Normal_Intensity_Side: 1
- _Triplanar_Normal_Intensity_Top: 1
- _Triplanar_Normal_Top_To_Side_Difference: 0.2
- _Triplanar_Top_To_Side_Difference: 0.2
- _UVSec: 0
- _WorkflowMode: 1
- _ZTest: 4
- _ZWrite: 1
- _ZWriteControl: 0
m_Colors:
- _AO_Offset: {r: 0, g: 0, b: 0, a: 0}
- _AO_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Base_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Base_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _Color_Tint: {r: 0, g: 0, b: 0, a: 0}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _Emission_Color_Tint: {r: 0, g: 0, b: 0, a: 0}
- _Emission_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Emission_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Normal_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Normal_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Overlay_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Overlay_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Snow_Color: {r: 0.85, g: 0.85, b: 0.85, a: 0}
- _Triplanar_Emission_Color_Tint: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Normal_Offset_Bottom: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Normal_Offset_Side: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Normal_Offset_Top: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Normal_Tiling_Bottom: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Normal_Tiling_Side: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Normal_Tiling_Top: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Offset_Bottom: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Offset_Side: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Offset_Top: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Tiling_Bottom: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Tiling_Side: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Tiling_Top: {r: 1, g: 1, b: 0, a: 0}
- _UVPan: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &1478222285771911038
MonoBehaviour:
m_ObjectHideFlags: 11
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: 639247ca83abc874e893eb93af2b5e44, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.ShaderGraph.Editor::UnityEditor.Rendering.BuiltIn.AssetVersion
version: 0
--- !u!114 &3036035668096195608
MonoBehaviour:
m_ObjectHideFlags: 11
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
version: 10

View File

@@ -1,24 +1,52 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-300816632722559782
MonoBehaviour:
m_ObjectHideFlags: 11
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
version: 10
--- !u!21 &2100000
Material:
serializedVersion: 6
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Ground_Mat
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_Shader: {fileID: -6465566751694194690, guid: 19e269a311c45cd4482cf0ac0e694503, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords:
- _ALPHATEST_ON
- _OVERLAY_UV_CHANNEL_UV0
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AO_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Base_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@@ -39,6 +67,10 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Emission_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@@ -47,32 +79,189 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Metallic_Smoothness_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Normal_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Overlay_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Emission_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Normal_Texture_Bottom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Normal_Texture_Side:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Normal_Texture_Top:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Texture_Bottom:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Texture_Side:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Triplanar_Texture_Top:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AO_Intensity: 1
- _AlphaClip: 1
- _AlphaToMask: 1
- _BUILTIN_AlphaClip: 1
- _BUILTIN_Blend: 0
- _BUILTIN_CullMode: 2
- _BUILTIN_DstBlend: 0
- _BUILTIN_QueueControl: -1
- _BUILTIN_QueueOffset: 0
- _BUILTIN_SrcBlend: 1
- _BUILTIN_Surface: 0
- _BUILTIN_ZTest: 4
- _BUILTIN_ZWrite: 1
- _BUILTIN_ZWriteControl: 0
- _Blend: 0
- _BlendModePreserveSpecular: 0
- _Bottom_Metallic: 0
- _Bottom_Smoothness: 0
- _BumpScale: 1
- _CastShadows: 1
- _Cull: 2
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _Enable_Ambient_Occlusion: 0
- _Enable_Base_Texture: 0
- _Enable_Emission_Texture: 0
- _Enable_Normal_Texture: 0
- _Enable_Overlay_Texture: 0
- _Enable_Snow: 0
- _Enable_Triplanar_Emission: 0
- _Enable_Triplanar_Normals: 0
- _Enable_Triplanar_Texture: 0
- _Generate_From_Base_Normals: 0
- _GlossMapScale: 1
- _Glossiness: 0.2
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _Normal_Intensity: 1
- _OVERLAY_UV_CHANNEL: 0
- _OcclusionStrength: 1
- _Overlay_Intensity: 1
- _Parallax: 0.02
- _QueueControl: -1
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Side_Metallic: 0
- _Side_Smoothness: 0
- _Smoothness: 0
- _SmoothnessTextureChannel: 0
- _Snow_Level: 0
- _Snow_Metallic: 0.1
- _Snow_Smoothness: 0.5
- _Snow_Transition: 1
- _Snow_Use_World_Up: 1
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _Top_Metallic: 0
- _Top_Smoothness: 0
- _Triplanar_Emission_Blend: 1
- _Triplanar_Emission_Intensity: 1
- _Triplanar_Emission_Tiling: 0.25
- _Triplanar_Fade: 1
- _Triplanar_Intensity: 1
- _Triplanar_Normal_Fade: 0
- _Triplanar_Normal_Intensity_Bottom: 1
- _Triplanar_Normal_Intensity_Side: 1
- _Triplanar_Normal_Intensity_Top: 1
- _Triplanar_Normal_Top_To_Side_Difference: 0.2
- _Triplanar_Top_To_Side_Difference: 0.2
- _UVSec: 0
- _WorkflowMode: 1
- _ZTest: 4
- _ZWrite: 1
- _ZWriteControl: 0
m_Colors:
- _AO_Offset: {r: 0, g: 0, b: 0, a: 0}
- _AO_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Base_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Base_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Color: {r: 0.5553578, g: 0.5795657, b: 0.6037736, a: 1}
- _Color_Tint: {r: 1, g: 1, b: 1, a: 0}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _Emission_Color_Tint: {r: 0, g: 0, b: 0, a: 0}
- _Emission_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Emission_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Normal_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Normal_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Overlay_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Overlay_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Snow_Color: {r: 0.85, g: 0.85, b: 0.85, a: 0}
- _Triplanar_Emission_Color_Tint: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Normal_Offset_Bottom: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Normal_Offset_Side: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Normal_Offset_Top: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Normal_Tiling_Bottom: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Normal_Tiling_Side: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Normal_Tiling_Top: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Offset_Bottom: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Offset_Side: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Offset_Top: {r: 0, g: 0, b: 0, a: 0}
- _Triplanar_Tiling_Bottom: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Tiling_Side: {r: 1, g: 1, b: 0, a: 0}
- _Triplanar_Tiling_Top: {r: 1, g: 1, b: 0, a: 0}
- _UVPan: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &1519216836111423043
MonoBehaviour:
m_ObjectHideFlags: 11
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: 639247ca83abc874e893eb93af2b5e44, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.ShaderGraph.Editor::UnityEditor.Rendering.BuiltIn.AssetVersion
version: 0

View File

@@ -8,7 +8,7 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Dummy
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
@@ -17,12 +17,18 @@ Material:
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
stringTagMap:
RenderType: Opaque
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 2800000, guid: 52475fb4afae07b4384becbad96a4bee, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@@ -59,12 +65,39 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AddPrecomputedVelocity: 0
- _AlphaClip: 0
- _AlphaToMask: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _Cull: 2
- _Cutoff: 0.5
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _EnvironmentReflections: 1
- _GlossMapScale: 1
- _Glossiness: 0.5
- _GlossyReflections: 1
@@ -72,12 +105,35 @@ Material:
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Smoothness: 0.5
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _UVSec: 0
- _WorkflowMode: 1
- _XRMotionVectorsPass: 1
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &8796169509839380165
MonoBehaviour:
m_ObjectHideFlags: 11
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
version: 10

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ba9ac54bb93ffaf4f9d335d994ebfabd
guid: 7181c4f41342f22d8bfa7ed36730f373
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000

View File

@@ -8,7 +8,7 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Ground
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
@@ -17,12 +17,18 @@ Material:
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
stringTagMap:
RenderType: Opaque
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@@ -59,12 +65,39 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AddPrecomputedVelocity: 0
- _AlphaClip: 0
- _AlphaToMask: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _Cull: 2
- _Cutoff: 0.5
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _EnvironmentReflections: 1
- _GlossMapScale: 1
- _Glossiness: 0.2
- _GlossyReflections: 1
@@ -72,12 +105,35 @@ Material:
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Smoothness: 0.2
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _UVSec: 0
- _WorkflowMode: 1
- _XRMotionVectorsPass: 1
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.5553578, g: 0.5795657, b: 0.6037736, a: 1}
- _BaseColor: {r: 0.55535775, g: 0.5795657, b: 0.6037736, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &686116854676397900
MonoBehaviour:
m_ObjectHideFlags: 11
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
version: 10

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: a8382f46b72a5d64283c4060b7311644
guid: 6292c9818a88933b89f67a3b92eec4c7
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000

View File

@@ -2,23 +2,33 @@
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: M_Sky
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_Shader: {fileID: 4800000, guid: 650dd9526735d5b46b79224bc6e94025, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
stringTagMap:
RenderType: Opaque
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
@@ -55,11 +65,19 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AddPrecomputedVelocity: 0
- _AlphaClip: 0
- _AlphaToMask: 0
- _Blend: 0
- _BlendOp: 0
- _BumpScale: 1
- _Cull: 2
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _GlossyReflections: 1
@@ -67,12 +85,32 @@ Material:
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _QueueOffset: 0
- _SampleGI: 0
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _UVSec: 0
- _XRMotionVectorsPass: 1
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.53333336, g: 0.5764706, b: 0.6, a: 1}
- _BaseColor: {r: 0.5333333, g: 0.57647055, b: 0.6, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &7601943180835571591
MonoBehaviour:
m_ObjectHideFlags: 11
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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion
version: 10

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e91303e74a336ee4eaf3299ee34d991d
guid: f9d20658359836af8a2e03271e776196
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 887c2720749571e41b36e668ec74a639
guid: 983ae9de876815b0894058ef6ddc6f42
TextureImporter:
internalIDToNameTable: []
externalObjects: {}

View File

@@ -45,7 +45,7 @@ Material:
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
m_CustomRenderQueue: 2450
stringTagMap: {}
disabledShaderPasses:
- MOTIONVECTORS
@@ -57,6 +57,10 @@ Material:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Alpha_Texture:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _Base_Texture:
m_Texture: {fileID: 2800000, guid: 9614e1c2eb9ea3240a97d2245414317b, type: 3}
m_Scale: {x: 1, y: 1}
@@ -158,6 +162,8 @@ Material:
- _AO_Intensity: 1
- _AlphaClip: 1
- _AlphaToMask: 1
- _Alpha_Clip_Threshold: 0.5
- _Alpha_Transparency: 1
- _BUILTIN_AlphaClip: 0
- _BUILTIN_Blend: 0
- _BUILTIN_CullMode: 2
@@ -179,12 +185,14 @@ Material:
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _Enable_Ambient_Occlusion: 0
- _Enable_Base_Texture: 1
- _Enable_Emission_Texture: 0
- _Enable_Normal_Texture: 1
- _Enable_Overlay_Texture: 0
- _Enable_Snow: 0
- _Enable_Transparency: 0
- _Enable_Triplanar_Emission: 0
- _Enable_Triplanar_Normals: 0
- _Enable_Triplanar_Texture: 1
@@ -213,6 +221,7 @@ Material:
- _Snow_Use_World_Up: 1
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _Top_Metallic: 0
- _Top_Smoothness: 0
@@ -228,6 +237,7 @@ Material:
- _Triplanar_Normal_Top_To_Side_Difference: 0.2
- _Triplanar_Top_To_Side_Difference: 0.2
- _UVSec: 0
- _Use_Separate_Alpha_Map: 0
- _WorkflowMode: 1
- _ZTest: 4
- _ZWrite: 1
@@ -235,6 +245,8 @@ Material:
m_Colors:
- _AO_Offset: {r: 0, g: 0, b: 0, a: 0}
- _AO_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Alpha_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Alpha_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Base_Offset: {r: 0, g: 0, b: 0, a: 0}
- _Base_Tiling: {r: 1, g: 1, b: 0, a: 0}
- _Color: {r: 1, g: 1, b: 1, a: 1}

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

0
Assets/External/Models/PolygonGeneric/Materials/Skybox_01.mat.meta vendored Normal file → Executable file
View File

View File

70
Assets/External/Models/PolygonGeneric/Scripts/Generic_SimpleRotate.cs vendored Normal file → Executable file
View File

@@ -1,35 +1,35 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generic_SimpleRotate : MonoBehaviour
{
public bool rotX;
public float rotXSpeed = 50f;
public bool rotY;
public float rotYSpeed = 50f;
public bool rotZ;
public float rotZSpeed = 50f;
// Update is called once per frame
void Update()
{
if (rotX == true)
{
transform.Rotate(Vector3.left * Time.deltaTime * rotXSpeed);
}
if (rotY == true)
{
transform.Rotate(Vector3.up * Time.deltaTime * rotYSpeed);
}
if (rotZ == true)
{
transform.Rotate(Vector3.back * Time.deltaTime * rotZSpeed);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generic_SimpleRotate : MonoBehaviour
{
public bool rotX;
public float rotXSpeed = 50f;
public bool rotY;
public float rotYSpeed = 50f;
public bool rotZ;
public float rotZSpeed = 50f;
// Update is called once per frame
void Update()
{
if (rotX == true)
{
transform.Rotate(Vector3.left * Time.deltaTime * rotXSpeed);
}
if (rotY == true)
{
transform.Rotate(Vector3.up * Time.deltaTime * rotYSpeed);
}
if (rotZ == true)
{
transform.Rotate(Vector3.back * Time.deltaTime * rotZSpeed);
}
}
}

View File

View File

@@ -1,31 +1,31 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generic_SimpleTranslate : MonoBehaviour
{
public bool moveX;
public float moveXSpeed = 2f;
public bool moveY;
public float moveYSpeed = 2f;
public bool moveZ;
public float moveZSpeed = 2f;
void Update()
{
if (moveX == true)
{
transform.Translate(Vector3.left * Time.deltaTime * moveXSpeed);
}
if (moveY == true)
{
transform.Translate(Vector3.up * Time.deltaTime * moveYSpeed);
}
if (moveZ == true)
{
transform.Translate(Vector3.back * Time.deltaTime * moveZSpeed);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generic_SimpleTranslate : MonoBehaviour
{
public bool moveX;
public float moveXSpeed = 2f;
public bool moveY;
public float moveYSpeed = 2f;
public bool moveZ;
public float moveZSpeed = 2f;
void Update()
{
if (moveX == true)
{
transform.Translate(Vector3.left * Time.deltaTime * moveXSpeed);
}
if (moveY == true)
{
transform.Translate(Vector3.up * Time.deltaTime * moveYSpeed);
}
if (moveZ == true)
{
transform.Translate(Vector3.back * Time.deltaTime * moveZSpeed);
}
}
}

View File

88
Assets/External/Models/PolygonGeneric/Scripts/Generic_WaterBob.cs vendored Normal file → Executable file
View File

@@ -1,44 +1,44 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generic_WaterBob : MonoBehaviour
{
public float bobbingHeight = 0.08f; // The height the object will bob up and down
public float bobbingSpeed = 1.5f; // The speed of the bobbing motion
public float rotationAmount = 0.8f; // The amount of rotation applied to the object
public bool randomOffset = true; // Determines if random offsets are applied to speed and rotation
public Vector2 randomRange = new Vector2(0.1f, 1f); // The range for the random offset
private Vector3 startPos;
private Quaternion startRotation;
void Start()
{
startPos = transform.position;
startRotation = transform.rotation; // Save the initial rotation
if (randomOffset)
{
bobbingSpeed += UnityEngine.Random.Range(randomRange.x, randomRange.y);
rotationAmount += UnityEngine.Random.Range(randomRange.x, randomRange.y);
}
}
void Update()
{
// Calculate the vertical bobbing motion
float newY = startPos.y + Mathf.Sin(Time.time * bobbingSpeed) * bobbingHeight;
Vector3 newPos = new Vector3(transform.position.x, newY, transform.position.z);
transform.position = newPos;
// Calculate rotation offsets based on time
float rotationX = Mathf.Sin(Time.time * bobbingSpeed * 0.5f) * rotationAmount;
float rotationY = Mathf.Sin(Time.time * bobbingSpeed * 0.7f) * rotationAmount;
float rotationZ = Mathf.Sin(Time.time * bobbingSpeed * 0.9f) * rotationAmount;
// Apply the incremental rotation as an offset to the existing rotation
Quaternion incrementalRotation = Quaternion.Euler(rotationX, rotationY, rotationZ);
transform.rotation = startRotation * incrementalRotation;
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Generic_WaterBob : MonoBehaviour
{
public float bobbingHeight = 0.08f; // The height the object will bob up and down
public float bobbingSpeed = 1.5f; // The speed of the bobbing motion
public float rotationAmount = 0.8f; // The amount of rotation applied to the object
public bool randomOffset = true; // Determines if random offsets are applied to speed and rotation
public Vector2 randomRange = new Vector2(0.1f, 1f); // The range for the random offset
private Vector3 startPos;
private Quaternion startRotation;
void Start()
{
startPos = transform.position;
startRotation = transform.rotation; // Save the initial rotation
if (randomOffset)
{
bobbingSpeed += UnityEngine.Random.Range(randomRange.x, randomRange.y);
rotationAmount += UnityEngine.Random.Range(randomRange.x, randomRange.y);
}
}
void Update()
{
// Calculate the vertical bobbing motion
float newY = startPos.y + Mathf.Sin(Time.time * bobbingSpeed) * bobbingHeight;
Vector3 newPos = new Vector3(transform.position.x, newY, transform.position.z);
transform.position = newPos;
// Calculate rotation offsets based on time
float rotationX = Mathf.Sin(Time.time * bobbingSpeed * 0.5f) * rotationAmount;
float rotationY = Mathf.Sin(Time.time * bobbingSpeed * 0.7f) * rotationAmount;
float rotationZ = Mathf.Sin(Time.time * bobbingSpeed * 0.9f) * rotationAmount;
// Apply the incremental rotation as an offset to the existing rotation
Quaternion incrementalRotation = Quaternion.Euler(rotationX, rotationY, rotationZ);
transform.rotation = startRotation * incrementalRotation;
}
}

View File

View File

@@ -1,204 +1,204 @@
using UnityEditor;
public class PolygonShaderGUI : ShaderGUI
{
private bool _showBaseTexture = false;
private bool _showOverlayTexture = false;
private bool _showAlphaTexture = false;
private bool _showNormalTexture = false;
private bool _showTriplanar = false;
private bool _showNormalTriplanar = false;
private bool _showEmissionTexture = false;
private bool _showSnow = false;
private bool _showWave = false;
private bool CreatePropertyGroup(string title, string[] groupProperties, bool foldout, MaterialEditor materialEditor, MaterialProperty[] allProperties)
{
foldout = EditorGUILayout.BeginFoldoutHeaderGroup(foldout, title);
if (foldout)
{
foreach (string property in groupProperties)
{
MaterialProperty propertyReference = FindProperty(property, allProperties);
materialEditor.ShaderProperty(propertyReference, propertyReference.displayName, 1);
}
}
EditorGUILayout.EndFoldoutHeaderGroup();
return foldout;
}
override public void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
{
EditorGUILayout.LabelField("Basic Parameters", EditorStyles.boldLabel);
// Ungrouped Basic Parameters
string[] shaderProperties =
{
"_Color_Tint",
"_Metallic",
"_Smoothness",
"_Metallic_Smoothness_Texture",
"_Ambient_Occlusion",
"_Specular_Color",
"_Alpha_Transparency"
};
foreach (string property in shaderProperties)
{
MaterialProperty propertyReference = FindProperty(property, properties);
materialEditor.ShaderProperty(propertyReference, propertyReference.displayName, 0);
}
EditorGUILayout.Separator();
// Base Texture Parameters
shaderProperties = new[]
{
"_Enable_Base_Texture",
"_Base_Texture",
"_Base_Tiling",
"_Base_Offset"
};
_showBaseTexture = CreatePropertyGroup("Base Texture", shaderProperties, _showBaseTexture, materialEditor, properties);
// Alpha Texture Parameters
shaderProperties = new[]
{
"_Enable_Alpha_Texture",
"_Alpha_Texture",
"_Alpha_Tiling",
"_Alpha_Offset"
};
_showAlphaTexture = CreatePropertyGroup("Alpha Texture", shaderProperties, _showAlphaTexture, materialEditor, properties);
// Normal Texture Parameters
shaderProperties = new[]
{
"_Enable_Normal_Texture",
"_Normal_Texture",
"_Normal_Tiling",
"_Normal_Offset"
};
_showNormalTexture = CreatePropertyGroup("Normal Texture", shaderProperties, _showNormalTexture, materialEditor, properties);
// Emission Texture Parameters
shaderProperties = new[]
{
"_Enable_Emission_Texture",
"_Emission_Texture",
"_Emission_Tiling",
"_Emission_Offset"
};
_showEmissionTexture = CreatePropertyGroup("Emission Texture", shaderProperties, _showEmissionTexture, materialEditor, properties);
EditorGUILayout.Separator();
EditorGUILayout.LabelField("Advanced Parameters", EditorStyles.boldLabel);
// Overlay Texture Parameters
shaderProperties = new[]
{
"_Enable_Overlay_Texture",
"_Overlay_Texture",
"_Overlay_Tiling",
"_Overlay_Offset",
"_OVERLAY_UV_CHANNEL",
"_Overlay_Intensity"
};
_showOverlayTexture = CreatePropertyGroup("Overlay Texture", shaderProperties, _showOverlayTexture, materialEditor, properties);
// Triplanar Texture Parameters
shaderProperties = new[]
{
"_Enable_Triplanar_Texture",
"_Triplanar_Texture_Top",
"_Triplanar_Tiling_Top",
"_Triplanar_Offset_Top",
"_Triplanar_Texture_Bottom",
"_Triplanar_Tiling_Bottom",
"_Triplanar_Offset_Bottom",
"_Triplanar_Texture_Side",
"_Triplanar_Tiling_Side",
"_Triplanar_Offset_Side",
"_Triplanar_Top_To_Side_Difference",
"_Triplanar_Fade", "_Triplanar_Intensity"
};
_showTriplanar = CreatePropertyGroup("Triplanar Texture", shaderProperties, _showTriplanar, materialEditor, properties);
// Triplanar Normal Texture Parameters
shaderProperties = new[]
{
"_Enable_Triplanar_Normals",
"_Triplanar_Normal_Texture_Top",
"_Triplanar_Normal_Intensity_Top",
"_Triplanar_Normal_Tiling_Top",
"_Triplanar_Normal_Offset_Top",
"_Triplanar_Normal_Texture_Bottom",
"_Triplanar_Normal_Intensity_Bottom",
"_Triplanar_Normal_Tiling_Bottom",
"_Triplanar_Normal_Offset_Bottom",
"_Triplanar_Normal_Texture_Side",
"_Triplanar_Normal_Intensity_Side",
"_Triplanar_Normal_Tiling_Side",
"_Triplanar_Normal_Offset_Side",
"_Triplanar_Normal_Top_To_Side_Difference",
"_Triplanar_Normal_Fade"
};
_showNormalTriplanar = CreatePropertyGroup("Triplanar Normal Texture", shaderProperties, _showNormalTriplanar, materialEditor, properties);
// Snow Parameters
shaderProperties = new[]
{
"_Enable_Snow",
"_Snow_Metallic",
"_Snow_Smoothness",
"_Snow_Level",
"_Snow_Transition",
"_Snow_Transition_Threshold",
"_Snow_Transition_Threshold_Steps",
"_Snow_Transition_Threshold_Step_Count",
"_Snow_Angle_Threshold",
"_Snow_Color",
"_Sea_Level",
"_Snow_Edge_Noise",
"_Snow_Noise_Tiling",
"_Snow_Noise_Offset",
"_Snow_Noise_Fade",
"_Snow_Noise_Top_To_Side_Difference",
"_Snow_Normal_Texture",
"_Snow_Overrides_Normals",
"_Snow_Normal_Intensity",
"_Snow_Normal_Tiling",
"_Snow_Normal_Offset",
"_Snow_Normal_Fade",
"_Snow_Metallic_Smoothness_Texture",
"_Snow_Metallic_Smoothness_Tiling",
"_Snow_Metallic_Smoothness_Offset"
};
_showSnow = CreatePropertyGroup("Snow", shaderProperties, _showSnow, materialEditor, properties);
// Wave Parameters
shaderProperties = new[]
{
"_Enable_Wave",
"_Wave_Direction_Vector",
"_Wave_Scale",
"_Wave_Noise_Tiling",
"_Wave_Speed",
"_Fade_Wave_To_Object_Origin",
"_Fade_Wave_Scale",
"_Fade_Wave_Vertical_Offset",
"_Wave_Object_Offset"
};
_showWave = CreatePropertyGroup("Wave", shaderProperties, _showWave, materialEditor, properties);
}
}
using UnityEditor;
public class PolygonShaderGUI : ShaderGUI
{
private bool _showBaseTexture = false;
private bool _showOverlayTexture = false;
private bool _showAlphaTexture = false;
private bool _showNormalTexture = false;
private bool _showTriplanar = false;
private bool _showNormalTriplanar = false;
private bool _showEmissionTexture = false;
private bool _showSnow = false;
private bool _showWave = false;
private bool CreatePropertyGroup(string title, string[] groupProperties, bool foldout, MaterialEditor materialEditor, MaterialProperty[] allProperties)
{
foldout = EditorGUILayout.BeginFoldoutHeaderGroup(foldout, title);
if (foldout)
{
foreach (string property in groupProperties)
{
MaterialProperty propertyReference = FindProperty(property, allProperties);
materialEditor.ShaderProperty(propertyReference, propertyReference.displayName, 1);
}
}
EditorGUILayout.EndFoldoutHeaderGroup();
return foldout;
}
override public void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
{
EditorGUILayout.LabelField("Basic Parameters", EditorStyles.boldLabel);
// Ungrouped Basic Parameters
string[] shaderProperties =
{
"_Color_Tint",
"_Metallic",
"_Smoothness",
"_Metallic_Smoothness_Texture",
"_Ambient_Occlusion",
"_Specular_Color",
"_Alpha_Transparency"
};
foreach (string property in shaderProperties)
{
MaterialProperty propertyReference = FindProperty(property, properties);
materialEditor.ShaderProperty(propertyReference, propertyReference.displayName, 0);
}
EditorGUILayout.Separator();
// Base Texture Parameters
shaderProperties = new[]
{
"_Enable_Base_Texture",
"_Base_Texture",
"_Base_Tiling",
"_Base_Offset"
};
_showBaseTexture = CreatePropertyGroup("Base Texture", shaderProperties, _showBaseTexture, materialEditor, properties);
// Alpha Texture Parameters
shaderProperties = new[]
{
"_Enable_Alpha_Texture",
"_Alpha_Texture",
"_Alpha_Tiling",
"_Alpha_Offset"
};
_showAlphaTexture = CreatePropertyGroup("Alpha Texture", shaderProperties, _showAlphaTexture, materialEditor, properties);
// Normal Texture Parameters
shaderProperties = new[]
{
"_Enable_Normal_Texture",
"_Normal_Texture",
"_Normal_Tiling",
"_Normal_Offset"
};
_showNormalTexture = CreatePropertyGroup("Normal Texture", shaderProperties, _showNormalTexture, materialEditor, properties);
// Emission Texture Parameters
shaderProperties = new[]
{
"_Enable_Emission_Texture",
"_Emission_Texture",
"_Emission_Tiling",
"_Emission_Offset"
};
_showEmissionTexture = CreatePropertyGroup("Emission Texture", shaderProperties, _showEmissionTexture, materialEditor, properties);
EditorGUILayout.Separator();
EditorGUILayout.LabelField("Advanced Parameters", EditorStyles.boldLabel);
// Overlay Texture Parameters
shaderProperties = new[]
{
"_Enable_Overlay_Texture",
"_Overlay_Texture",
"_Overlay_Tiling",
"_Overlay_Offset",
"_OVERLAY_UV_CHANNEL",
"_Overlay_Intensity"
};
_showOverlayTexture = CreatePropertyGroup("Overlay Texture", shaderProperties, _showOverlayTexture, materialEditor, properties);
// Triplanar Texture Parameters
shaderProperties = new[]
{
"_Enable_Triplanar_Texture",
"_Triplanar_Texture_Top",
"_Triplanar_Tiling_Top",
"_Triplanar_Offset_Top",
"_Triplanar_Texture_Bottom",
"_Triplanar_Tiling_Bottom",
"_Triplanar_Offset_Bottom",
"_Triplanar_Texture_Side",
"_Triplanar_Tiling_Side",
"_Triplanar_Offset_Side",
"_Triplanar_Top_To_Side_Difference",
"_Triplanar_Fade", "_Triplanar_Intensity"
};
_showTriplanar = CreatePropertyGroup("Triplanar Texture", shaderProperties, _showTriplanar, materialEditor, properties);
// Triplanar Normal Texture Parameters
shaderProperties = new[]
{
"_Enable_Triplanar_Normals",
"_Triplanar_Normal_Texture_Top",
"_Triplanar_Normal_Intensity_Top",
"_Triplanar_Normal_Tiling_Top",
"_Triplanar_Normal_Offset_Top",
"_Triplanar_Normal_Texture_Bottom",
"_Triplanar_Normal_Intensity_Bottom",
"_Triplanar_Normal_Tiling_Bottom",
"_Triplanar_Normal_Offset_Bottom",
"_Triplanar_Normal_Texture_Side",
"_Triplanar_Normal_Intensity_Side",
"_Triplanar_Normal_Tiling_Side",
"_Triplanar_Normal_Offset_Side",
"_Triplanar_Normal_Top_To_Side_Difference",
"_Triplanar_Normal_Fade"
};
_showNormalTriplanar = CreatePropertyGroup("Triplanar Normal Texture", shaderProperties, _showNormalTriplanar, materialEditor, properties);
// Snow Parameters
shaderProperties = new[]
{
"_Enable_Snow",
"_Snow_Metallic",
"_Snow_Smoothness",
"_Snow_Level",
"_Snow_Transition",
"_Snow_Transition_Threshold",
"_Snow_Transition_Threshold_Steps",
"_Snow_Transition_Threshold_Step_Count",
"_Snow_Angle_Threshold",
"_Snow_Color",
"_Sea_Level",
"_Snow_Edge_Noise",
"_Snow_Noise_Tiling",
"_Snow_Noise_Offset",
"_Snow_Noise_Fade",
"_Snow_Noise_Top_To_Side_Difference",
"_Snow_Normal_Texture",
"_Snow_Overrides_Normals",
"_Snow_Normal_Intensity",
"_Snow_Normal_Tiling",
"_Snow_Normal_Offset",
"_Snow_Normal_Fade",
"_Snow_Metallic_Smoothness_Texture",
"_Snow_Metallic_Smoothness_Tiling",
"_Snow_Metallic_Smoothness_Offset"
};
_showSnow = CreatePropertyGroup("Snow", shaderProperties, _showSnow, materialEditor, properties);
// Wave Parameters
shaderProperties = new[]
{
"_Enable_Wave",
"_Wave_Direction_Vector",
"_Wave_Scale",
"_Wave_Noise_Tiling",
"_Wave_Speed",
"_Fade_Wave_To_Object_Origin",
"_Fade_Wave_Scale",
"_Fade_Wave_Vertical_Offset",
"_Wave_Object_Offset"
};
_showWave = CreatePropertyGroup("Wave", shaderProperties, _showWave, materialEditor, properties);
}
}

View File

@@ -1,145 +1,145 @@
using UnityEditor;
public class PolygonTransparencyShaderGUI : ShaderGUI
{
private bool _showBaseTexture = false;
private bool _showOverlayTexture = false;
private bool _showAlphaTexture = false;
private bool _showNormalTexture = false;
private bool _showEmissionTexture = false;
private bool _showSnow = false;
private bool CreatePropertyGroup(string title, string[] groupProperties, bool foldout, MaterialEditor materialEditor, MaterialProperty[] allProperties)
{
foldout = EditorGUILayout.BeginFoldoutHeaderGroup(foldout, title);
if (foldout)
{
foreach (string property in groupProperties)
{
MaterialProperty propertyReference = FindProperty(property, allProperties);
materialEditor.ShaderProperty(propertyReference, propertyReference.displayName, 1);
}
}
EditorGUILayout.EndFoldoutHeaderGroup();
return foldout;
}
override public void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
{
EditorGUILayout.LabelField("Basic Parameters", EditorStyles.boldLabel);
// Ungrouped Basic Parameters
string[] shaderProperties =
{
"_Color_Tint",
"_Metallic",
"_Smoothness",
"_Metallic_Smoothness_Texture",
"_Ambient_Occlusion",
"_Alpha_Transparency",
"_Alpha_Clip_Threshold"
};
foreach (string property in shaderProperties)
{
MaterialProperty propertyReference = FindProperty(property, properties);
materialEditor.ShaderProperty(propertyReference, propertyReference.displayName, 0);
}
EditorGUILayout.Separator();
// Base Texture Parameters
shaderProperties = new[]
{
"_Enable_Base_Texture",
"_Base_Texture",
"_Base_Tiling",
"_Base_Offset"
};
_showBaseTexture = CreatePropertyGroup("Base Texture", shaderProperties, _showBaseTexture, materialEditor, properties);
// Alpha Texture Parameters
shaderProperties = new[]
{
"_Enable_Alpha_Texture",
"_Alpha_Texture",
"_Alpha_Tiling",
"_Alpha_Offset"
};
_showAlphaTexture = CreatePropertyGroup("Alpha Texture", shaderProperties, _showAlphaTexture, materialEditor, properties);
// Normal Texture Parameters
shaderProperties = new[]
{
"_Enable_Normal_Texture",
"_Normal_Texture",
"_Normal_Tiling",
"_Normal_Offset"
};
_showNormalTexture = CreatePropertyGroup("Normal Texture", shaderProperties, _showNormalTexture, materialEditor, properties);
// Emission Texture Parameters
shaderProperties = new[]
{
"_Enable_Emission_Texture",
"_Emission_Texture",
"_Emission_Tiling",
"_Emission_Offset"
};
_showEmissionTexture = CreatePropertyGroup("Emission Texture", shaderProperties, _showEmissionTexture, materialEditor, properties);
EditorGUILayout.Separator();
EditorGUILayout.LabelField("Advanced Parameters", EditorStyles.boldLabel);
// Overlay Texture Parameters
shaderProperties = new[]
{
"_Enable_Overlay_Texture",
"_Overlay_Texture",
"_Overlay_Tiling",
"_Overlay_Offset",
"_OVERLAY_UV_CHANNEL",
"_Overlay_Intensity"
};
_showOverlayTexture = CreatePropertyGroup("Overlay Texture", shaderProperties, _showOverlayTexture, materialEditor, properties);
// Snow Parameters
shaderProperties = new[]
{
"_Enable_Snow",
"_Snow_Metallic",
"_Snow_Smoothness",
"_Snow_Level",
"_Snow_Transition",
"_Snow_Transition_Threshold",
"_Snow_Transition_Threshold_Steps",
"_Snow_Transition_Threshold_Step_Count",
"_Snow_Angle_Threshold",
"_Snow_Color",
"_Sea_Level",
"_Snow_Edge_Noise",
"_Snow_Noise_Tiling",
"_Snow_Noise_Offset",
"_Snow_Noise_Fade",
"_Snow_Noise_Top_To_Side_Difference",
"_Snow_Normal_Texture",
"_Snow_Overrides_Normals",
"_Snow_Normal_Intensity",
"_Snow_Normal_Tiling",
"_Snow_Normal_Offset",
"_Snow_Normal_Fade",
"_Snow_Metallic_Smoothness_Texture",
"_Snow_Metallic_Smoothness_Tiling",
"_Snow_Metallic_Smoothness_Offset"
};
_showSnow = CreatePropertyGroup("Snow", shaderProperties, _showSnow, materialEditor, properties);
}
}
using UnityEditor;
public class PolygonTransparencyShaderGUI : ShaderGUI
{
private bool _showBaseTexture = false;
private bool _showOverlayTexture = false;
private bool _showAlphaTexture = false;
private bool _showNormalTexture = false;
private bool _showEmissionTexture = false;
private bool _showSnow = false;
private bool CreatePropertyGroup(string title, string[] groupProperties, bool foldout, MaterialEditor materialEditor, MaterialProperty[] allProperties)
{
foldout = EditorGUILayout.BeginFoldoutHeaderGroup(foldout, title);
if (foldout)
{
foreach (string property in groupProperties)
{
MaterialProperty propertyReference = FindProperty(property, allProperties);
materialEditor.ShaderProperty(propertyReference, propertyReference.displayName, 1);
}
}
EditorGUILayout.EndFoldoutHeaderGroup();
return foldout;
}
override public void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
{
EditorGUILayout.LabelField("Basic Parameters", EditorStyles.boldLabel);
// Ungrouped Basic Parameters
string[] shaderProperties =
{
"_Color_Tint",
"_Metallic",
"_Smoothness",
"_Metallic_Smoothness_Texture",
"_Ambient_Occlusion",
"_Alpha_Transparency",
"_Alpha_Clip_Threshold"
};
foreach (string property in shaderProperties)
{
MaterialProperty propertyReference = FindProperty(property, properties);
materialEditor.ShaderProperty(propertyReference, propertyReference.displayName, 0);
}
EditorGUILayout.Separator();
// Base Texture Parameters
shaderProperties = new[]
{
"_Enable_Base_Texture",
"_Base_Texture",
"_Base_Tiling",
"_Base_Offset"
};
_showBaseTexture = CreatePropertyGroup("Base Texture", shaderProperties, _showBaseTexture, materialEditor, properties);
// Alpha Texture Parameters
shaderProperties = new[]
{
"_Enable_Alpha_Texture",
"_Alpha_Texture",
"_Alpha_Tiling",
"_Alpha_Offset"
};
_showAlphaTexture = CreatePropertyGroup("Alpha Texture", shaderProperties, _showAlphaTexture, materialEditor, properties);
// Normal Texture Parameters
shaderProperties = new[]
{
"_Enable_Normal_Texture",
"_Normal_Texture",
"_Normal_Tiling",
"_Normal_Offset"
};
_showNormalTexture = CreatePropertyGroup("Normal Texture", shaderProperties, _showNormalTexture, materialEditor, properties);
// Emission Texture Parameters
shaderProperties = new[]
{
"_Enable_Emission_Texture",
"_Emission_Texture",
"_Emission_Tiling",
"_Emission_Offset"
};
_showEmissionTexture = CreatePropertyGroup("Emission Texture", shaderProperties, _showEmissionTexture, materialEditor, properties);
EditorGUILayout.Separator();
EditorGUILayout.LabelField("Advanced Parameters", EditorStyles.boldLabel);
// Overlay Texture Parameters
shaderProperties = new[]
{
"_Enable_Overlay_Texture",
"_Overlay_Texture",
"_Overlay_Tiling",
"_Overlay_Offset",
"_OVERLAY_UV_CHANNEL",
"_Overlay_Intensity"
};
_showOverlayTexture = CreatePropertyGroup("Overlay Texture", shaderProperties, _showOverlayTexture, materialEditor, properties);
// Snow Parameters
shaderProperties = new[]
{
"_Enable_Snow",
"_Snow_Metallic",
"_Snow_Smoothness",
"_Snow_Level",
"_Snow_Transition",
"_Snow_Transition_Threshold",
"_Snow_Transition_Threshold_Steps",
"_Snow_Transition_Threshold_Step_Count",
"_Snow_Angle_Threshold",
"_Snow_Color",
"_Sea_Level",
"_Snow_Edge_Noise",
"_Snow_Noise_Tiling",
"_Snow_Noise_Offset",
"_Snow_Noise_Fade",
"_Snow_Noise_Top_To_Side_Difference",
"_Snow_Normal_Texture",
"_Snow_Overrides_Normals",
"_Snow_Normal_Intensity",
"_Snow_Normal_Tiling",
"_Snow_Normal_Offset",
"_Snow_Normal_Fade",
"_Snow_Metallic_Smoothness_Texture",
"_Snow_Metallic_Smoothness_Tiling",
"_Snow_Metallic_Smoothness_Offset"
};
_showSnow = CreatePropertyGroup("Snow", shaderProperties, _showSnow, materialEditor, properties);
}
}

View File

@@ -8,16 +8,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: FantasyKnights_01
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -164,6 +168,7 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &1358846705396397422
MonoBehaviour:
m_ObjectHideFlags: 11
@@ -176,7 +181,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10
--- !u!114 &7967226135815873431
MonoBehaviour:
m_ObjectHideFlags: 11

View File

@@ -8,16 +8,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: FantasyKnights_02
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -164,6 +168,7 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &7993738256033606102
MonoBehaviour:
m_ObjectHideFlags: 11
@@ -189,4 +194,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10

View File

@@ -8,16 +8,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: FantasyKnights_03
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -164,6 +168,7 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &5122993062315569858
MonoBehaviour:
m_ObjectHideFlags: 11
@@ -176,7 +181,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10
--- !u!114 &8780454250115516571
MonoBehaviour:
m_ObjectHideFlags: 11

View File

@@ -21,16 +21,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: FantasyKnights_04
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -177,6 +181,7 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &6809264838136373543
MonoBehaviour:
m_ObjectHideFlags: 11
@@ -189,4 +194,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10

View File

@@ -25,7 +25,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10
--- !u!21 &2100000
Material:
serializedVersion: 8
@@ -34,16 +34,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: FantasyKnights_05
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -190,3 +194,4 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@@ -8,16 +8,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: FantasyKnights_06
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -164,6 +168,7 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &1513622437145775386
MonoBehaviour:
m_ObjectHideFlags: 11
@@ -176,7 +181,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10
--- !u!114 &5488310361178818670
MonoBehaviour:
m_ObjectHideFlags: 11

View File

@@ -21,16 +21,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HumanSpecies_01
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -177,6 +181,7 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &153752790335324610
MonoBehaviour:
m_ObjectHideFlags: 11
@@ -189,4 +194,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10

View File

@@ -21,16 +21,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HumanSpecies_02
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -148,6 +152,7 @@ Material:
- _DirtAmount: 0.306
- _DstBlend: 0
- _EnvironmentReflections: 1
- _EyelinerAmount: 0
- _FeminieAmount: 0
- _GlossMapScale: 1
- _Glossiness: 0.5
@@ -176,6 +181,7 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &1793314631237679544
MonoBehaviour:
m_ObjectHideFlags: 11
@@ -188,4 +194,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10

View File

@@ -21,16 +21,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HumanSpecies_03
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -177,6 +181,7 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &7804425326570313428
MonoBehaviour:
m_ObjectHideFlags: 11
@@ -189,4 +194,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10

View File

@@ -21,16 +21,20 @@ Material:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: HumanSpecies_04
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322,
type: 3}
m_Shader: {fileID: -6465566751694194690, guid: db628544640279b41a4a7aa5d75c0322, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_InvalidKeywords:
- _EMISSION
m_LightmapFlags: 2
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
@@ -177,6 +181,7 @@ Material:
- _Grey: {r: 0.59748423, g: 0.59748423, b: 0.59748423, a: 0}
- _SkinColor: {r: 0, g: 0, b: 0, a: 0}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &6958986610217973014
MonoBehaviour:
m_ObjectHideFlags: 11
@@ -189,4 +194,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 5
version: 10

View File

View File

@@ -1,29 +1,29 @@
using System.Resources;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SQLite-net Official Portable Library")]
[assembly: AssemblyDescription("Light weight library providing easy SQLite database storage")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Krueger Systems, Inc.")]
[assembly: AssemblyProduct("SQLite-net")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
using System.Resources;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SQLite-net Official Portable Library")]
[assembly: AssemblyDescription("Light weight library providing easy SQLite database storage")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Krueger Systems, Inc.")]
[assembly: AssemblyProduct("SQLite-net")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,15 @@
// Copyright (c) 2024 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// For additional details, see the LICENSE.MD file bundled with this software.
namespace Synty.SidekickCharacters
{
public class DatabaseUpdateController
{
// This class is no longer required, and will be deleted in the future.
// Included as an empty class to remove code dependencies to allow for deletion without causing project errors.
}
}
// Copyright (c) 2024 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// For additional details, see the LICENSE.MD file bundled with this software.
namespace Synty.SidekickCharacters
{
public class DatabaseUpdateController
{
// This class is no longer required, and will be deleted in the future.
// Included as an empty class to remove code dependencies to allow for deletion without causing project errors.
}
}

View File

@@ -1,396 +1,354 @@
// Copyright (c) 2025 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// For additional details, see the LICENSE.MD file bundled with this software.
using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace Synty.SidekickCharacters
{
public class ToolDownloader : EditorWindow
{
private const string _GIT_URL = "https://github.com/SyntyStudios/SidekicksToolRelease/releases/latest/download/Sidekicks.unitypackage";
private const string _GIT_DB_URL = "https://github.com/SyntyStudios/SidekicksToolRelease/releases/latest/download/SidekicksDatabase.unitypackage";
private const string _PACKAGE_CACHE = "Assets/DownloadCache/Sidekicks.unitypackage";
private const string _DB_PACKAGE_CACHE = "Assets/DownloadCache/SidekicksDatabase.unitypackage";
private const string _VERSION_FILE_NAME = "version.txt";
private const string _VERSION_TAG = "\"tag_name\":";
private const string _VERSION_KEY = "sk_current_tool_version";
private const string _SIDEKICK_TOOL_MENU_ITEM = "Synty/Sidekick Character Tool";
private string _version = "-";
private Label _latestVersion;
public void Awake()
{
BackgroundUpdateCheck();
}
public void CreateGUI()
{
VisualElement root = rootVisualElement;
root.Clear();
Button downloadButton = new Button(DownloadLatestDBVersion)
{
text = "Download and Install",
style =
{
height = 40
}
};
root.Add(downloadButton);
Label textPrompt = new Label("This tool will download and install the latest version of the Sidekicks Tool.");
Label textPrompt2 = new Label("Or you can manually download from this link:\nhttps://github.com/SyntyStudios/SidekicksToolRelease/releases/latest/");
root.Add(textPrompt);
root.Add(textPrompt2);
string version = LoadCurrentInstalledVersion();
Label currentVersion = new Label("Currently Installed: " + (string.IsNullOrEmpty(version) ? "N/A" : version))
{
style =
{
marginTop = 5
}
};
_latestVersion = new Label("Latest Version: " + _version);
root.Add(currentVersion);
root.Add(_latestVersion);
Button changeLogButton = new Button()
{
text = "Show Changelog"
};
root.Add(changeLogButton);
changeLogButton.clickable.clicked += delegate
{
Application.OpenURL("https://syntystore.com/pages/sidekicks-changelog");
};
}
public async void BackgroundUpdateCheck()
{
_version = await CheckAvailableVersion();
if (_latestVersion != null)
{
_latestVersion.text = "Latest Version: " + _version;
}
if (IsNewVersionAvailable(_version))
{
DownloaderBackgroundService.ShowToolDownloaderWindow();
}
}
private async Task<string> CheckAvailableVersion()
{
HttpClient client = new HttpClient();
string uri = "http://api.github.com/repos/SyntyStudios/SidekicksToolRelease/releases/latest";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
request.Headers.Add("Accept", "application/vnd.github+json");
request.Headers.Add("X-GitHub-Api-Version", "2022-11-28");
request.Headers.Add("User-Agent", "Sidekicks Download Tool");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
// Read the response content as a string
string responseBody = await response.Content.ReadAsStringAsync();
return GetVersionNumber(responseBody);
}
private string GetVersionNumber(string data)
{
int index = data.IndexOf(_VERSION_TAG, StringComparison.OrdinalIgnoreCase) + _VERSION_TAG.Length;
string portion = data.Substring(index, data.Length - index);
string number = portion.Substring(0, portion.IndexOf(',')).Replace("\"", "").Replace(" ", "");
return number;
}
private bool IsNewVersionAvailable(string version)
{
string currentVersion = LoadCurrentInstalledVersion();
if (string.IsNullOrEmpty(currentVersion))
{
return true;
}
if (!currentVersion.Contains('.') || !version.Contains('.'))
{
return false;
}
string[] currentSplitVersion = currentVersion.Split('.');
string[] newSplitVersion = version.Split('.');
if (currentSplitVersion.Length != newSplitVersion.Length)
{
return false;
}
for (int i = 0; i < newSplitVersion.Length; i++)
{
if (int.TryParse(currentSplitVersion[i], out int current))
{
if (int.TryParse(newSplitVersion[i], out int newVersion))
{
if (newVersion > current)
{
return true;
}
}
}
}
return false;
}
private void SaveCurrentInstalledVersion(string version)
{
string versionFilePath = GetVersionFilePath();
if (string.IsNullOrEmpty(versionFilePath))
{
Debug.LogWarning("Unable to resolve Sidekick version file path.");
return;
}
File.WriteAllText(versionFilePath, version);
}
private string LoadCurrentInstalledVersion()
{
string versionFilePath = GetVersionFilePath();
if (string.IsNullOrEmpty(versionFilePath))
{
return null;
}
if (File.Exists(versionFilePath))
{
return File.ReadAllText(versionFilePath);
}
return null;
}
private string GetVersionFilePath()
{
MonoScript currentScript = MonoScript.FromScriptableObject(this);
if (currentScript == null)
{
return null;
}
string scriptPath = AssetDatabase.GetAssetPath(currentScript);
if (string.IsNullOrEmpty(scriptPath))
{
return null;
}
string utilityDirectory = Path.GetDirectoryName(scriptPath);
if (string.IsNullOrEmpty(utilityDirectory))
{
return null;
}
string editorDirectory = Path.GetDirectoryName(utilityDirectory);
if (string.IsNullOrEmpty(editorDirectory))
{
return null;
}
return Path.GetFullPath(Path.Combine(editorDirectory, _VERSION_FILE_NAME));
}
private void DownloadLatestDBVersion()
{
WebClient client = new WebClient();
client.DownloadFileCompleted += (sender, e) =>
{
if (e.Error == null)
{
CloseOpenToolWindow();
AssetDatabase.ImportPackage(_DB_PACKAGE_CACHE, false);
AssetDatabase.importPackageCompleted += ProceedWithInstall;
}
else
{
Debug.LogError("Error downloading file: " + e.Error.Message);
}
};
// Ensure the directory exists
string directory = Path.GetDirectoryName(_DB_PACKAGE_CACHE);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
client.DownloadFileAsync(new System.Uri(_GIT_DB_URL), _DB_PACKAGE_CACHE);
}
private async void DownloadLatestToolVersion()
{
WebClient client = new WebClient();
_version = await CheckAvailableVersion();
client.DownloadFileCompleted += (sender, e) =>
{
if (e.Error == null)
{
SaveCurrentInstalledVersion(_version);
AssetDatabase.ImportPackage(_PACKAGE_CACHE, false);
AssetDatabase.importPackageCompleted += ProceedWithInstall;
}
else
{
Debug.LogError("Error downloading file: " + e.Error.Message);
}
};
// Ensure the directory exists
string directory = Path.GetDirectoryName(_PACKAGE_CACHE);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
client.DownloadFileAsync(new System.Uri(_GIT_URL), _PACKAGE_CACHE);
}
private void ProceedWithInstall(string packageName)
{
if (packageName == "SidekicksDatabase")
{
AssetDatabase.importPackageCompleted -= ProceedWithInstall;
DownloadLatestToolVersion();
}
else if (packageName == "Sidekicks")
{
AssetDatabase.importPackageCompleted -= ProceedWithInstall;
DownloaderBackgroundService.RefreshWindow();
if (EditorUtility.DisplayDialog("Installation Finished", "Sidekick Tool installation has completed.", "Re-open Sidekicks Tool",
"Close"))
{
ReopenToolWindow();
}
}
}
private bool CloseOpenToolWindow()
{
EditorWindow[] allWindows = Resources.FindObjectsOfTypeAll<EditorWindow>();
// Filter the windows to find the one with the desired type name
EditorWindow foundWindow = allWindows.FirstOrDefault(window => window.GetType().Name == "ModularCharacterWindow");
if (foundWindow != null)
{
foundWindow.Close();
Thread.Sleep(1500);
return true;
}
return false;
}
private void ReopenToolWindow()
{
try
{
EditorApplication.ExecuteMenuItem(_SIDEKICK_TOOL_MENU_ITEM);
}
catch (Exception ex)
{
Debug.LogWarning("Sidekicks Tool menu item not found. Please verify installation.");
Debug.LogWarning("Exception details: " + ex.Message);
}
}
}
/// <summary>
/// Creates an instance of the Downloader Tool, to allow checks for new versions on editor startup.
/// </summary>
[InitializeOnLoad]
public static class DownloaderBackgroundService
{
private static ToolDownloader _instance;
static DownloaderBackgroundService()
{
EditorApplication.update += CreateToolInstance;
}
static void CreateToolInstance()
{
EditorApplication.update -= CreateToolInstance;
EditorWindow[] allWindows = Resources.FindObjectsOfTypeAll<EditorWindow>();
// Filter the windows to find the one with the desired type name
EditorWindow foundWindow = allWindows.FirstOrDefault(window => window.GetType().Name == "ToolDownloader");
if (foundWindow != null)
{
_instance = (ToolDownloader) foundWindow;
}
else
{
_instance = ScriptableObject.CreateInstance<ToolDownloader>();
}
_instance.titleContent.text = "Sidekick Tool Downloader";
_instance.minSize = new Vector2(600, 150);
}
/// <summary>
/// Refreshes the Tool Downloader window to ensure it shows the latest version. Repaint is unreliable.
/// </summary>
public static void RefreshWindow()
{
if (_instance == null)
{
CreateToolInstance();
}
_instance.Close();
if (_instance == null)
{
CreateToolInstance();
}
_instance.Show();
}
[MenuItem("Synty/Sidekick Tool Downloader")]
public static void ShowToolDownloaderWindow()
{
if (_instance == null)
{
CreateToolInstance();
}
_instance.Show();
}
}
}
// Copyright (c) 2025 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// For additional details, see the LICENSE.MD file bundled with this software.
using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace Synty.SidekickCharacters
{
public class ToolDownloader : EditorWindow
{
private const string _GIT_URL = "https://github.com/SyntyStudios/SidekicksToolRelease/releases/latest/download/Sidekicks.unitypackage";
private const string _GIT_DB_URL = "https://github.com/SyntyStudios/SidekicksToolRelease/releases/latest/download/SidekicksDatabase.unitypackage";
private const string _PACKAGE_CACHE = "Assets/DownloadCache/Sidekicks.unitypackage";
private const string _DB_PACKAGE_CACHE = "Assets/DownloadCache/SidekicksDatabase.unitypackage";
private const string _VERSION_FILE = "Assets/External/Models/SidekickCharacters/Scripts/Editor/version.txt";
private const string _VERSION_TAG = "\"tag_name\":";
private const string _VERSION_KEY = "sk_current_tool_version";
private const string _SIDEKICK_TOOL_MENU_ITEM = "Synty/Sidekick Character Tool";
private string _version = "-";
private Label _latestVersion;
public void Awake()
{
BackgroundUpdateCheck();
}
public void CreateGUI()
{
VisualElement root = rootVisualElement;
root.Clear();
Button downloadButton = new Button(DownloadLatestDBVersion)
{
text = "Download and Install",
style =
{
height = 40
}
};
root.Add(downloadButton);
Label textPrompt = new Label("This tool will download and install the latest version of the Sidekicks Tool.");
Label textPrompt2 = new Label("Or you can manually download from this link:\nhttps://github.com/SyntyStudios/SidekicksToolRelease/releases/latest/");
root.Add(textPrompt);
root.Add(textPrompt2);
string version = LoadCurrentInstalledVersion();
Label currentVersion = new Label("Currently Installed: " + (string.IsNullOrEmpty(version) ? "N/A" : version))
{
style =
{
marginTop = 5
}
};
_latestVersion = new Label("Latest Version: " + _version);
root.Add(currentVersion);
root.Add(_latestVersion);
Button changeLogButton = new Button()
{
text = "Show Changelog"
};
root.Add(changeLogButton);
changeLogButton.clickable.clicked += delegate
{
Application.OpenURL("https://syntystore.com/pages/sidekicks-changelog");
};
}
public async void BackgroundUpdateCheck()
{
_version = await CheckAvailableVersion();
if (_latestVersion != null)
{
_latestVersion.text = "Latest Version: " + _version;
}
if (IsNewVersionAvailable(_version))
{
DownloaderBackgroundService.ShowToolDownloaderWindow();
}
}
private async Task<string> CheckAvailableVersion()
{
HttpClient client = new HttpClient();
string uri = "http://api.github.com/repos/SyntyStudios/SidekicksToolRelease/releases/latest";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri);
request.Headers.Add("Accept", "application/vnd.github+json");
request.Headers.Add("X-GitHub-Api-Version", "2022-11-28");
request.Headers.Add("User-Agent", "Sidekicks Download Tool");
HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
// Read the response content as a string
string responseBody = await response.Content.ReadAsStringAsync();
return GetVersionNumber(responseBody);
}
private string GetVersionNumber(string data)
{
int index = data.IndexOf(_VERSION_TAG, StringComparison.OrdinalIgnoreCase) + _VERSION_TAG.Length;
string portion = data.Substring(index, data.Length - index);
string number = portion.Substring(0, portion.IndexOf(',')).Replace("\"", "").Replace(" ", "");
return number;
}
private bool IsNewVersionAvailable(string version)
{
string currentVersion = LoadCurrentInstalledVersion();
if (string.IsNullOrEmpty(currentVersion))
{
return true;
}
if (!currentVersion.Contains('.') || !version.Contains('.'))
{
return false;
}
string[] currentSplitVersion = currentVersion.Split('.');
string[] newSplitVersion = version.Split('.');
if (currentSplitVersion.Length != newSplitVersion.Length)
{
return false;
}
for (int i = 0; i < newSplitVersion.Length; i++)
{
if (int.TryParse(currentSplitVersion[i], out int current))
{
if (int.TryParse(newSplitVersion[i], out int newVersion))
{
if (newVersion > current)
{
return true;
}
}
}
}
return false;
}
private void SaveCurrentInstalledVersion(string version)
{
File.WriteAllText(_VERSION_FILE, version);
}
private string LoadCurrentInstalledVersion()
{
if (File.Exists(_VERSION_FILE))
{
return File.ReadAllText(_VERSION_FILE);
}
return null;
}
private void DownloadLatestDBVersion()
{
WebClient client = new WebClient();
client.DownloadFileCompleted += (sender, e) =>
{
if (e.Error == null)
{
CloseOpenToolWindow();
AssetDatabase.ImportPackage(_DB_PACKAGE_CACHE, false);
AssetDatabase.importPackageCompleted += ProceedWithInstall;
}
else
{
Debug.LogError("Error downloading file: " + e.Error.Message);
}
};
// Ensure the directory exists
string directory = Path.GetDirectoryName(_DB_PACKAGE_CACHE);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
client.DownloadFileAsync(new System.Uri(_GIT_DB_URL), _DB_PACKAGE_CACHE);
}
private async void DownloadLatestToolVersion()
{
WebClient client = new WebClient();
_version = await CheckAvailableVersion();
client.DownloadFileCompleted += (sender, e) =>
{
if (e.Error == null)
{
SaveCurrentInstalledVersion(_version);
AssetDatabase.ImportPackage(_PACKAGE_CACHE, false);
AssetDatabase.importPackageCompleted += ProceedWithInstall;
}
else
{
Debug.LogError("Error downloading file: " + e.Error.Message);
}
};
// Ensure the directory exists
string directory = Path.GetDirectoryName(_PACKAGE_CACHE);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
client.DownloadFileAsync(new System.Uri(_GIT_URL), _PACKAGE_CACHE);
}
private void ProceedWithInstall(string packageName)
{
if (packageName == "SidekicksDatabase")
{
AssetDatabase.importPackageCompleted -= ProceedWithInstall;
DownloadLatestToolVersion();
}
else if (packageName == "Sidekicks")
{
AssetDatabase.importPackageCompleted -= ProceedWithInstall;
DownloaderBackgroundService.RefreshWindow();
if (EditorUtility.DisplayDialog("Installation Finished", "Sidekick Tool installation has completed.", "Re-open Sidekicks Tool",
"Close"))
{
ReopenToolWindow();
}
}
}
private bool CloseOpenToolWindow()
{
EditorWindow[] allWindows = Resources.FindObjectsOfTypeAll<EditorWindow>();
// Filter the windows to find the one with the desired type name
EditorWindow foundWindow = allWindows.FirstOrDefault(window => window.GetType().Name == "ModularCharacterWindow");
if (foundWindow != null)
{
foundWindow.Close();
Thread.Sleep(1500);
return true;
}
return false;
}
private void ReopenToolWindow()
{
try
{
EditorApplication.ExecuteMenuItem(_SIDEKICK_TOOL_MENU_ITEM);
}
catch (Exception ex)
{
Debug.LogWarning("Sidekicks Tool menu item not found. Please verify installation.");
Debug.LogWarning("Exception details: " + ex.Message);
}
}
}
/// <summary>
/// Creates an instance of the Downloader Tool, to allow checks for new versions on editor startup.
/// </summary>
[InitializeOnLoad]
public static class DownloaderBackgroundService
{
private static ToolDownloader _instance;
static DownloaderBackgroundService()
{
EditorApplication.update += CreateToolInstance;
}
static void CreateToolInstance()
{
EditorApplication.update -= CreateToolInstance;
EditorWindow[] allWindows = Resources.FindObjectsOfTypeAll<EditorWindow>();
// Filter the windows to find the one with the desired type name
EditorWindow foundWindow = allWindows.FirstOrDefault(window => window.GetType().Name == "ToolDownloader");
if (foundWindow != null)
{
_instance = (ToolDownloader) foundWindow;
}
else
{
_instance = ScriptableObject.CreateInstance<ToolDownloader>();
}
_instance.titleContent.text = "Sidekick Tool Downloader";
_instance.minSize = new Vector2(600, 150);
}
/// <summary>
/// Refreshes the Tool Downloader window to ensure it shows the latest version. Repaint is unreliable.
/// </summary>
public static void RefreshWindow()
{
if (_instance == null)
{
CreateToolInstance();
}
_instance.Close();
if (_instance == null)
{
CreateToolInstance();
}
_instance.Show();
}
[MenuItem("Synty/Sidekick Tool Downloader")]
public static void ShowToolDownloaderWindow()
{
if (_instance == null)
{
CreateToolInstance();
}
_instance.Show();
}
}
}

View File

@@ -1 +1 @@
1.0.37
1.0.38

View File

@@ -230,42 +230,6 @@ namespace Synty.SidekickCharacters.API
await runtime.PopulatePresetLibrary();
}
private static List<string> GetSidekickPartFiles()
{
string packageRootPath = DatabaseManager.GetPackageRootAbsolutePath();
if (!string.IsNullOrEmpty(packageRootPath))
{
string meshesRootPath = Path.Combine(packageRootPath, "Resources", "Meshes");
if (Directory.Exists(meshesRootPath))
{
return Directory
.GetFiles(meshesRootPath, "SK_*_*_*_*_*.fbx", SearchOption.AllDirectories)
.Select(ToAssetPath)
.ToList();
}
}
return Directory.GetFiles("Assets", "SK_*_*_*_*_*.fbx", SearchOption.AllDirectories).ToList();
}
private static string ToAssetPath(string fullPath)
{
if (string.IsNullOrWhiteSpace(fullPath))
{
return fullPath;
}
string normalizedFullPath = fullPath.Replace('\\', '/');
string normalizedAssetsPath = Application.dataPath.Replace('\\', '/');
if (!normalizedFullPath.StartsWith(normalizedAssetsPath, StringComparison.OrdinalIgnoreCase))
{
return normalizedFullPath;
}
return "Assets" + normalizedFullPath.Substring(normalizedAssetsPath.Length);
}
/// <summary>
/// Takes all the parts selected in the window, and combines them into a single model in the scene.
/// </summary>
@@ -548,7 +512,7 @@ namespace Synty.SidekickCharacters.API
_partOutfitToggleMap = new Dictionary<string, bool>();
_partCount = 0;
List<string> files = GetSidekickPartFiles();
List<string> files = Directory.GetFiles("Assets", "SK_*_*_*_*_*.fbx", SearchOption.AllDirectories).ToList();
foreach (CharacterPartType partType in Enum.GetValues(typeof(CharacterPartType)))
{
@@ -646,7 +610,7 @@ namespace Synty.SidekickCharacters.API
_speciesDictionary = new Dictionary<string, SidekickSpecies>();
_partCount = 0;
List<string> files = GetSidekickPartFiles();
List<string> files = Directory.GetFiles("Assets", "SK_*_*_*_*_*.fbx", SearchOption.AllDirectories).ToList();
Dictionary<string, string> filesOnDisk = new Dictionary<string, string>();
foreach (string file in files)
{

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
fileFormatVersion: 2
guid: 37c1c136edf8d3744be383c6fac071a8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 37c1c136edf8d3744be383c6fac071a8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,347 +1,347 @@
// Copyright (c) 2024 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// For additional details, see the LICENSE.MD file bundled with this software.
using SQLite;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace Synty.SidekickCharacters.Database.DTO
{
[Table("sk_color_row")]
public class SidekickColorRow
{
private SidekickColorSet _colorSet;
private SidekickColorProperty _colorProperty;
private Color? _niceColor;
private Color? _niceMetallic;
private Color? _niceSmoothness;
private Color? _niceReflection;
private Color? _niceEmission;
private Color? _niceOpacity;
[PrimaryKey, AutoIncrement, Column("id")]
public int ID { get; set; }
[Column("ptr_color_set")]
public int PtrColorSet { get; set; }
[Column("ptr_color_property")]
public int PtrColorProperty { get; set; }
[Column("color")]
public string MainColor { get; set; }
[Column("metallic")]
public string Metallic { get; set; }
[Column("smoothness")]
public string Smoothness { get; set; }
[Column("reflection")]
public string Reflection { get; set; }
[Column("emission")]
public string Emission { get; set; }
[Column("opacity")]
public string Opacity { get; set; }
[Ignore]
public SidekickColorSet ColorSet
{
get => _colorSet;
set
{
_colorSet = value;
PtrColorSet = value.ID;
}
}
[Ignore]
public SidekickColorProperty ColorProperty
{
get => _colorProperty;
set
{
_colorProperty = value;
PtrColorProperty = value.ID;
}
}
[Ignore]
public Color NiceColor
{
get
{
_niceColor ??= ColorUtility.TryParseHtmlString("#" + MainColor, out Color color) ? color : Color.white;
return (Color) _niceColor;
}
set
{
_niceColor = value;
MainColor = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceMetallic
{
get
{
_niceMetallic ??= ColorUtility.TryParseHtmlString("#" + Metallic, out Color color) ? color : Color.white;
return (Color) _niceMetallic;
}
set
{
_niceMetallic = value;
Metallic = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceSmoothness
{
get
{
_niceSmoothness ??= ColorUtility.TryParseHtmlString("#" + Smoothness, out Color color) ? color : Color.white;
return (Color) _niceSmoothness;
}
set
{
_niceSmoothness = value;
Smoothness = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceReflection
{
get
{
_niceReflection ??= ColorUtility.TryParseHtmlString("#" + Reflection, out Color color) ? color : Color.white;
return (Color) _niceReflection;
}
set
{
_niceReflection = value;
Reflection = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceEmission
{
get
{
_niceEmission ??= ColorUtility.TryParseHtmlString("#" + Emission, out Color color) ? color : Color.white;
return (Color) _niceEmission;
}
set
{
_niceEmission = value;
Emission = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceOpacity
{
get
{
_niceOpacity ??= ColorUtility.TryParseHtmlString("#" + Opacity, out Color color) ? color : Color.white;
return (Color) _niceOpacity;
}
set
{
_niceOpacity = value;
Opacity = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public bool IsLocked { get; set; }
[Ignore]
public Image ButtonImage { get; set; }
/// <summary>
/// Gets a list of all the Color Rows in the database.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <returns>A list of all Color Rows in the database.</returns>
public static List<SidekickColorRow> GetAll(DatabaseManager dbManager)
{
List<SidekickColorRow> rows = dbManager.GetCurrentDbConnection().Table<SidekickColorRow>().ToList();
foreach (SidekickColorRow row in rows)
{
Decorate(dbManager, row);
}
return rows;
}
/// <summary>
/// Gets a specific Color Row by its database ID.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="id">The id of the required Color Row.</param>
/// <returns>The specific Color Row if it exists; otherwise null.</returns>
public static SidekickColorRow GetByID(DatabaseManager dbManager, int id)
{
SidekickColorRow row = dbManager.GetCurrentDbConnection().Find<SidekickColorRow>(id);
Decorate(dbManager, row);
return row;
}
/// <summary>
/// Gets a list of all the Color Rows in the database that have the matching Property.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="property">The property to get all the color rows for.</param>
/// <returns>A list of all color rows in the database for the given property.</returns>
public static List<SidekickColorRow> GetAllByProperty(DatabaseManager dbManager, SidekickColorProperty property)
{
List<SidekickColorRow> rows = dbManager.GetCurrentDbConnection().Table<SidekickColorRow>()
.Where(row => row.PtrColorProperty == property.ID)
.ToList();
foreach (SidekickColorRow row in rows)
{
row.ColorProperty = property;
Decorate(dbManager, row);
}
return rows;
}
/// <summary>
/// Gets a list of all the Color Rows in the database that have the matching Set and Property.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="set">The color set to get the color rows for.</param>
/// <param name="property">The property to get all the color rows for.</param>
/// <returns>A list of all color rows in the database for the given set and property.</returns>
public static List<SidekickColorRow> GetAllBySetAndProperty(DatabaseManager dbManager, SidekickColorSet set, SidekickColorProperty property)
{
List<SidekickColorRow> rows = dbManager.GetCurrentDbConnection().Table<SidekickColorRow>()
.Where(row => row.PtrColorSet == set.ID && row.PtrColorProperty == property.ID)
.ToList();
foreach (SidekickColorRow row in rows)
{
row.ColorSet = set;
row.ColorProperty = property;
Decorate(dbManager, row);
}
return rows;
}
/// <summary>
/// Gets a list of all the Color Rows in the database that have the matching Set.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="set">The color set to get the color rows for.</param>
/// <returns>A list of all color rows in the database for the given set.</returns>
public static List<SidekickColorRow> GetAllBySet(DatabaseManager dbManager, SidekickColorSet set)
{
List<SidekickColorRow> rows = dbManager.GetCurrentDbConnection().Table<SidekickColorRow>()
.Where(row => row.PtrColorSet == set.ID)
.ToList();
foreach (SidekickColorRow row in rows)
{
row.ColorSet = set;
Decorate(dbManager, row);
}
return rows;
}
/// <summary>
/// Creates a SidekickColorRow from a SidekickColorPresetRow.
/// </summary>
/// <param name="row">The SidekickColorPresetRow to convert.</param>
/// <returns>A SidekickColorRow created from a SidekickColorPresetRow.</returns>
public static SidekickColorRow CreateFromPresetColorRow(SidekickColorPresetRow row)
{
SidekickColorRow newRow = new SidekickColorRow()
{
MainColor = row.MainColor,
Emission = row.Emission,
Metallic = row.Metallic,
Opacity = row.Opacity,
Reflection = row.Reflection,
Smoothness = row.Smoothness,
ColorProperty = row.ColorProperty
};
return newRow;
}
/// <summary>
/// Ensures that the given row has its nice DTO class properties set
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="row">The color row to decorate</param>
/// <returns>A color row with all DTO class properties set</returns>
private static void Decorate(DatabaseManager dbManager, SidekickColorRow row)
{
// don't need PtrColorProperty check as should always be >= 0; if it's not, we have bad data and want the error
row.ColorProperty ??= SidekickColorProperty.GetByID(dbManager, row.PtrColorProperty);
if (row.ColorSet == null && row.PtrColorSet >= 0)
{
row.ColorSet = SidekickColorSet.GetByID(dbManager, row.PtrColorSet);
}
}
/// <summary>
/// Delete this color row from the database.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
public void Delete(DatabaseManager dbManager)
{
int deletedCount = dbManager.GetCurrentDbConnection().Delete<SidekickColorRow>(ID);
if (deletedCount == 0)
{
throw new Exception($"Could not delete color set with ID '{ID}'");
}
}
/// <summary>
/// Inserts, or updates the values in the database, depending on this object has been saved before or not.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
public void Save(DatabaseManager dbManager)
{
if (ID < 0)
{
SaveToDB(dbManager);
}
else
{
UpdateDB(dbManager);
}
}
/// <summary>
/// Saves this Color Set to the database with the current values.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
private void SaveToDB(DatabaseManager dbManager)
{
SQLiteConnection connection = dbManager.GetCurrentDbConnection();
int insertCount = connection.Insert(this);
if (insertCount == 0)
{
throw new Exception("Unable to save current color row");
}
// in theory this could return a different ID, but in practice it's highly unlikely
ID = (int) SQLite3.LastInsertRowid(connection.Handle);
}
/// <summary>
/// Updates this Color Set in the database with the current values.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
private void UpdateDB(DatabaseManager dbManager)
{
int updatedCount = dbManager.GetCurrentDbConnection().Update(this);
if (updatedCount == 0)
{
throw new Exception($"Could not update color row with ID '{ID}'");
}
}
}
}
// Copyright (c) 2024 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// For additional details, see the LICENSE.MD file bundled with this software.
using SQLite;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
namespace Synty.SidekickCharacters.Database.DTO
{
[Table("sk_color_row")]
public class SidekickColorRow
{
private SidekickColorSet _colorSet;
private SidekickColorProperty _colorProperty;
private Color? _niceColor;
private Color? _niceMetallic;
private Color? _niceSmoothness;
private Color? _niceReflection;
private Color? _niceEmission;
private Color? _niceOpacity;
[PrimaryKey, AutoIncrement, Column("id")]
public int ID { get; set; }
[Column("ptr_color_set")]
public int PtrColorSet { get; set; }
[Column("ptr_color_property")]
public int PtrColorProperty { get; set; }
[Column("color")]
public string MainColor { get; set; }
[Column("metallic")]
public string Metallic { get; set; }
[Column("smoothness")]
public string Smoothness { get; set; }
[Column("reflection")]
public string Reflection { get; set; }
[Column("emission")]
public string Emission { get; set; }
[Column("opacity")]
public string Opacity { get; set; }
[Ignore]
public SidekickColorSet ColorSet
{
get => _colorSet;
set
{
_colorSet = value;
PtrColorSet = value.ID;
}
}
[Ignore]
public SidekickColorProperty ColorProperty
{
get => _colorProperty;
set
{
_colorProperty = value;
PtrColorProperty = value.ID;
}
}
[Ignore]
public Color NiceColor
{
get
{
_niceColor ??= ColorUtility.TryParseHtmlString("#" + MainColor, out Color color) ? color : Color.white;
return (Color) _niceColor;
}
set
{
_niceColor = value;
MainColor = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceMetallic
{
get
{
_niceMetallic ??= ColorUtility.TryParseHtmlString("#" + Metallic, out Color color) ? color : Color.white;
return (Color) _niceMetallic;
}
set
{
_niceMetallic = value;
Metallic = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceSmoothness
{
get
{
_niceSmoothness ??= ColorUtility.TryParseHtmlString("#" + Smoothness, out Color color) ? color : Color.white;
return (Color) _niceSmoothness;
}
set
{
_niceSmoothness = value;
Smoothness = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceReflection
{
get
{
_niceReflection ??= ColorUtility.TryParseHtmlString("#" + Reflection, out Color color) ? color : Color.white;
return (Color) _niceReflection;
}
set
{
_niceReflection = value;
Reflection = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceEmission
{
get
{
_niceEmission ??= ColorUtility.TryParseHtmlString("#" + Emission, out Color color) ? color : Color.white;
return (Color) _niceEmission;
}
set
{
_niceEmission = value;
Emission = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public Color NiceOpacity
{
get
{
_niceOpacity ??= ColorUtility.TryParseHtmlString("#" + Opacity, out Color color) ? color : Color.white;
return (Color) _niceOpacity;
}
set
{
_niceOpacity = value;
Opacity = ColorUtility.ToHtmlStringRGB(value);
}
}
[Ignore]
public bool IsLocked { get; set; }
[Ignore]
public Image ButtonImage { get; set; }
/// <summary>
/// Gets a list of all the Color Rows in the database.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <returns>A list of all Color Rows in the database.</returns>
public static List<SidekickColorRow> GetAll(DatabaseManager dbManager)
{
List<SidekickColorRow> rows = dbManager.GetCurrentDbConnection().Table<SidekickColorRow>().ToList();
foreach (SidekickColorRow row in rows)
{
Decorate(dbManager, row);
}
return rows;
}
/// <summary>
/// Gets a specific Color Row by its database ID.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="id">The id of the required Color Row.</param>
/// <returns>The specific Color Row if it exists; otherwise null.</returns>
public static SidekickColorRow GetByID(DatabaseManager dbManager, int id)
{
SidekickColorRow row = dbManager.GetCurrentDbConnection().Find<SidekickColorRow>(id);
Decorate(dbManager, row);
return row;
}
/// <summary>
/// Gets a list of all the Color Rows in the database that have the matching Property.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="property">The property to get all the color rows for.</param>
/// <returns>A list of all color rows in the database for the given property.</returns>
public static List<SidekickColorRow> GetAllByProperty(DatabaseManager dbManager, SidekickColorProperty property)
{
List<SidekickColorRow> rows = dbManager.GetCurrentDbConnection().Table<SidekickColorRow>()
.Where(row => row.PtrColorProperty == property.ID)
.ToList();
foreach (SidekickColorRow row in rows)
{
row.ColorProperty = property;
Decorate(dbManager, row);
}
return rows;
}
/// <summary>
/// Gets a list of all the Color Rows in the database that have the matching Set and Property.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="set">The color set to get the color rows for.</param>
/// <param name="property">The property to get all the color rows for.</param>
/// <returns>A list of all color rows in the database for the given set and property.</returns>
public static List<SidekickColorRow> GetAllBySetAndProperty(DatabaseManager dbManager, SidekickColorSet set, SidekickColorProperty property)
{
List<SidekickColorRow> rows = dbManager.GetCurrentDbConnection().Table<SidekickColorRow>()
.Where(row => row.PtrColorSet == set.ID && row.PtrColorProperty == property.ID)
.ToList();
foreach (SidekickColorRow row in rows)
{
row.ColorSet = set;
row.ColorProperty = property;
Decorate(dbManager, row);
}
return rows;
}
/// <summary>
/// Gets a list of all the Color Rows in the database that have the matching Set.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="set">The color set to get the color rows for.</param>
/// <returns>A list of all color rows in the database for the given set.</returns>
public static List<SidekickColorRow> GetAllBySet(DatabaseManager dbManager, SidekickColorSet set)
{
List<SidekickColorRow> rows = dbManager.GetCurrentDbConnection().Table<SidekickColorRow>()
.Where(row => row.PtrColorSet == set.ID)
.ToList();
foreach (SidekickColorRow row in rows)
{
row.ColorSet = set;
Decorate(dbManager, row);
}
return rows;
}
/// <summary>
/// Creates a SidekickColorRow from a SidekickColorPresetRow.
/// </summary>
/// <param name="row">The SidekickColorPresetRow to convert.</param>
/// <returns>A SidekickColorRow created from a SidekickColorPresetRow.</returns>
public static SidekickColorRow CreateFromPresetColorRow(SidekickColorPresetRow row)
{
SidekickColorRow newRow = new SidekickColorRow()
{
MainColor = row.MainColor,
Emission = row.Emission,
Metallic = row.Metallic,
Opacity = row.Opacity,
Reflection = row.Reflection,
Smoothness = row.Smoothness,
ColorProperty = row.ColorProperty
};
return newRow;
}
/// <summary>
/// Ensures that the given row has its nice DTO class properties set
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
/// <param name="row">The color row to decorate</param>
/// <returns>A color row with all DTO class properties set</returns>
private static void Decorate(DatabaseManager dbManager, SidekickColorRow row)
{
// don't need PtrColorProperty check as should always be >= 0; if it's not, we have bad data and want the error
row.ColorProperty ??= SidekickColorProperty.GetByID(dbManager, row.PtrColorProperty);
if (row.ColorSet == null && row.PtrColorSet >= 0)
{
row.ColorSet = SidekickColorSet.GetByID(dbManager, row.PtrColorSet);
}
}
/// <summary>
/// Delete this color row from the database.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
public void Delete(DatabaseManager dbManager)
{
int deletedCount = dbManager.GetCurrentDbConnection().Delete<SidekickColorRow>(ID);
if (deletedCount == 0)
{
throw new Exception($"Could not delete color set with ID '{ID}'");
}
}
/// <summary>
/// Inserts, or updates the values in the database, depending on this object has been saved before or not.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
public void Save(DatabaseManager dbManager)
{
if (ID < 0)
{
SaveToDB(dbManager);
}
else
{
UpdateDB(dbManager);
}
}
/// <summary>
/// Saves this Color Set to the database with the current values.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
private void SaveToDB(DatabaseManager dbManager)
{
SQLiteConnection connection = dbManager.GetCurrentDbConnection();
int insertCount = connection.Insert(this);
if (insertCount == 0)
{
throw new Exception("Unable to save current color row");
}
// in theory this could return a different ID, but in practice it's highly unlikely
ID = (int) SQLite3.LastInsertRowid(connection.Handle);
}
/// <summary>
/// Updates this Color Set in the database with the current values.
/// </summary>
/// <param name="dbManager">The Database Manager to use.</param>
private void UpdateDB(DatabaseManager dbManager)
{
int updatedCount = dbManager.GetCurrentDbConnection().Update(this);
if (updatedCount == 0)
{
throw new Exception($"Could not update color row with ID '{ID}'");
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More