From e5667b55a174ca19055fde83ad56df4a1b1ad4b6 Mon Sep 17 00:00:00 2001 From: "ALIENJACK\\alien" Date: Fri, 10 Jan 2025 15:49:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E6=A4=8D=E6=9D=A5=E8=87=AA=20github.c?= =?UTF-8?q?om/yunoda-3DCG/Simple-CRT-Shader=20=E7=9A=84crtshader=20?= =?UTF-8?q?=E6=BB=A4=E9=95=9C=E5=8F=82=E6=95=B0=E7=8E=B0=E5=9C=A8=E6=94=AF?= =?UTF-8?q?=E6=8C=81int=E7=B1=BB=E5=9E=8B=20=E6=BB=A4=E9=95=9C=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E6=94=AF=E6=8C=81=E8=87=AA=E5=AE=9A=E4=B9=89=E5=91=BD?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Resources/UIPrefabs/OptionUI.prefab | 646 ++++++++++++++++++ .../AppSettings/Filter/FilterEffect.cs | 25 +- .../AppSettings/Filter/FilterManager.cs | 6 + .../AppSettings/Filter/FilterParamerter.cs | 29 +- .../Manager/AppSettings/Filter/SimpleCRT.meta | 8 + .../AppSettings/Filter/SimpleCRT/SimpleCRT.cs | 196 ++++++ .../Filter/SimpleCRT/SimpleCRT.cs.meta | 2 + .../Filter/SimpleCRT/SimpleCRT.shader | 237 +++++++ .../Filter/SimpleCRT/SimpleCRT.shader.meta | 9 + .../AppMain/UI/BgSettingsUI/UI_FilterItem.cs | 2 +- .../UI/OptionUI/OptionUI_ValueEditItem.cs | 7 + .../OptionUI_ValueEditItem_IntEdit.cs | 58 ++ .../OptionUI_ValueEditItem_IntEdit.cs.meta | 2 + 13 files changed, 1216 insertions(+), 11 deletions(-) create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT.meta create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.cs.meta create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.shader create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.shader.meta create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem_IntEdit.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem_IntEdit.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab index 87e53efb..e9517367 100644 --- a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab +++ b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab @@ -723,6 +723,81 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: animator: {fileID: 8744505332349586225} +--- !u!1 &2011250662246569413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2971252204166660888} + - component: {fileID: 8603130728764424453} + - component: {fileID: 5558698359590655883} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2971252204166660888 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2011250662246569413} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 623010347094537687} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8603130728764424453 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2011250662246569413} + m_CullTransparentMesh: 1 +--- !u!114 &5558698359590655883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2011250662246569413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &2471254561136382013 GameObject: m_ObjectHideFlags: 0 @@ -877,6 +952,42 @@ MonoBehaviour: m_Icon: {fileID: 394891843266770919} ExpandFlag: {fileID: 1501213187178026014} ApplyFlag: {fileID: 3335801350916860509} +--- !u!1 &2660711182228429640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5502792356073001137} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5502792356073001137 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2660711182228429640} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 9033422041994042558} + m_Father: {fileID: 623010347094537687} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &3335801350916860509 GameObject: m_ObjectHideFlags: 0 @@ -1260,6 +1371,7 @@ RectTransform: m_Children: - {fileID: 2450201408575734812} - {fileID: 7216060871118576844} + - {fileID: 3461365397350504029} - {fileID: 816049057894123782} m_Father: {fileID: 4478785627166277610} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1283,6 +1395,7 @@ MonoBehaviour: m_MenuNameTxt: {fileID: 6349204039935213934} m_Icon: {fileID: 1062489471918314902} com_floatEdit: {fileID: 3979886008433050043} + com_intEdit: {fileID: 7283495606979218283} com_enumEdit: {fileID: 3614321873420207159} --- !u!114 &4314371315188452187 MonoBehaviour: @@ -1330,6 +1443,178 @@ MonoBehaviour: m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 +--- !u!1 &5368404913088401643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5211094055976679099} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5211094055976679099 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5368404913088401643} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4027954690118145370} + m_Father: {fileID: 623010347094537687} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &5564584920301875764 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7900345916139696652} + - component: {fileID: 4039086934110648845} + m_Layer: 5 + m_Name: content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7900345916139696652 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5564584920301875764} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 623010347094537687} + - {fileID: 345486178931433765} + m_Father: {fileID: 3461365397350504029} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &4039086934110648845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5564584920301875764} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &5830336849912211446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3461365397350504029} + - component: {fileID: 9093150501524936851} + - component: {fileID: 7283495606979218283} + m_Layer: 5 + m_Name: IntEdit + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3461365397350504029 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5830336849912211446} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7900345916139696652} + m_Father: {fileID: 278706555072840209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &9093150501524936851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5830336849912211446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &7283495606979218283 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5830336849912211446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: abad743de1574354f99efc5054aa6b43, type: 3} + m_Name: + m_EditorClassIdentifier: + slider: {fileID: 5919193658528722431} + txt_value: {fileID: 6075532957906331759} --- !u!1 &5894141955990945432 GameObject: m_ObjectHideFlags: 0 @@ -1394,6 +1679,117 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 +--- !u!1 &6058311224544485353 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 623010347094537687} + - component: {fileID: 5919193658528722431} + - component: {fileID: 5682207136112565641} + m_Layer: 5 + m_Name: Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &623010347094537687 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6058311224544485353} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2971252204166660888} + - {fileID: 5502792356073001137} + - {fileID: 5211094055976679099} + m_Father: {fileID: 7900345916139696652} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &5919193658528722431 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6058311224544485353} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3790767580891084363} + m_FillRect: {fileID: 9033422041994042558} + m_HandleRect: {fileID: 4027954690118145370} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &5682207136112565641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6058311224544485353} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 5 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &6312116949113707702 GameObject: m_ObjectHideFlags: 0 @@ -1466,6 +1862,106 @@ MonoBehaviour: m_EditorClassIdentifier: slider: {fileID: 6489571631904078165} txt_value: {fileID: 6176548475786947694} +--- !u!1 &6551251729527098609 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 345486178931433765} + - component: {fileID: 7323868397581272064} + - component: {fileID: 6075532957906331759} + - component: {fileID: 6388778664118236617} + m_Layer: 5 + m_Name: value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &345486178931433765 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6551251729527098609} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7900345916139696652} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7323868397581272064 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6551251729527098609} + m_CullTransparentMesh: 1 +--- !u!114 &6075532957906331759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6551251729527098609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 33a3bdf8f6bd1ec4eba7c4bc58183212, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 20 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 0 +--- !u!114 &6388778664118236617 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6551251729527098609} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 50 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &6669948312920191200 GameObject: m_ObjectHideFlags: 0 @@ -1675,6 +2171,81 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} m_EffectDistance: {x: 1.5, y: -1.5} m_UseGraphicAlpha: 1 +--- !u!1 &7579340952198812870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9033422041994042558} + - component: {fileID: 9210239002563918603} + - component: {fileID: 4055457614720979564} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &9033422041994042558 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7579340952198812870} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5502792356073001137} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9210239002563918603 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7579340952198812870} + m_CullTransparentMesh: 1 +--- !u!114 &4055457614720979564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7579340952198812870} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &8045610840842517781 GameObject: m_ObjectHideFlags: 0 @@ -2064,6 +2635,81 @@ MonoBehaviour: m_FlexibleWidth: -1 m_FlexibleHeight: -1 m_LayoutPriority: 1 +--- !u!1 &8670820869058111882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4027954690118145370} + - component: {fileID: 4961390550090550147} + - component: {fileID: 3790767580891084363} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4027954690118145370 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8670820869058111882} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5211094055976679099} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4961390550090550147 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8670820869058111882} + m_CullTransparentMesh: 1 +--- !u!114 &3790767580891084363 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8670820869058111882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &8884391103430529053 GameObject: m_ObjectHideFlags: 0 diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterEffect.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterEffect.cs index edbf0ba1..c8c37020 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterEffect.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterEffect.cs @@ -1,6 +1,7 @@ using Assets.Script.AppMain.Filter; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Reflection; using UnityEngine; @@ -53,12 +54,12 @@ namespace AxibugEmuOnline.Client var rangeAtt = param.GetCustomAttribute(); float min = 0; float max = 10; - if (rangeAtt != null) - { - min = rangeAtt.min; max = rangeAtt.max; - } + if (rangeAtt != null) { min = rangeAtt.min; max = rangeAtt.max; } + + var descrip = param.GetCustomAttribute(); + string name = descrip != null ? descrip.Description : param.Name; - var editableParam = new EditableParamerter(param.Name, paramObj, min, max); + var editableParam = new EditableParamerter(name, paramObj, min, max); m_editableParamList.Add(editableParam); } } @@ -86,15 +87,23 @@ namespace AxibugEmuOnline.Client public object MinValue { get; private set; } public object MaxValue { get; private set; } - public EditableParamerter(string name, FilterParameter paramObject, object minValue, object maxValue) + public EditableParamerter(string name, FilterParameter paramObject, float minValue, float maxValue) { m_paramObject = paramObject; Name = name; var paramType = paramObject.GetType(); - MinValue = minValue; - MaxValue = maxValue; + if (paramObject.ValueType == typeof(int)) + { + MinValue = (int)minValue; + MaxValue = (int)maxValue; + } + else if (paramObject.ValueType == typeof(float)) + { + MinValue = minValue; + MaxValue = maxValue; + } } public void ResetToDefault() => m_paramObject.Value = null; diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterManager.cs index 869df7b4..cf69a1f0 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterManager.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterManager.cs @@ -331,6 +331,12 @@ namespace AxibugEmuOnline.Client float.TryParse(rawStr, out floatVal); return floatVal; } + else if (valueType == typeof(int)) + { + int intVal; + int.TryParse(rawStr, out intVal); + return intVal; + } else if (valueType.IsEnum) { var names = Enum.GetNames(valueType); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterParamerter.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterParamerter.cs index b155f072..e1614a9c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterParamerter.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/FilterParamerter.cs @@ -13,7 +13,7 @@ namespace Assets.Script.AppMain.Filter { get => m_overrideValue ?? m_defaultValue; set => m_overrideValue = value; - } + } } public class FilterParameter : FilterParameter @@ -34,15 +34,40 @@ namespace Assets.Script.AppMain.Filter public class BoolParameter : FilterParameter { public BoolParameter(bool defaultValue) : base(defaultValue) { } + + public static implicit operator bool(BoolParameter value) + { + return value.GetValue(); + } } public class Vector2Parameter : FilterParameter { - public Vector2Parameter(Vector2 defaultValue) : base(defaultValue) { } + public Vector2Parameter(Vector2 defaultValue) : base(defaultValue) { } + + public static implicit operator Vector2(Vector2Parameter value) + { + return value.GetValue(); + } } public class FloatParameter : FilterParameter { public FloatParameter(float defaultValue) : base(defaultValue) { } + + public static implicit operator float(FloatParameter value) + { + return value.GetValue(); + } + } + + public class IntParameter : FilterParameter + { + public IntParameter(int defaultValue) : base(defaultValue) { } + + public static implicit operator int(IntParameter value) + { + return value.GetValue(); + } } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT.meta new file mode 100644 index 00000000..60bec35b --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36463068bd4c2274cb302669fa552345 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.cs new file mode 100644 index 00000000..6a59d3de --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.cs @@ -0,0 +1,196 @@ +using Assets.Script.AppMain.Filter; +using AxibugEmuOnline.Client; +using System.ComponentModel; +using UnityEngine; +using Random = UnityEngine.Random; + + +public class SimpleCRT : FilterEffect +{ + public override string Name => nameof(SimpleCRT); + + protected override string ShaderName => "Filter/yunoda-3DCG/SimpleCRT"; + + [Range(0, 1000)] + [Description("White Noise Freq")] + public IntParameter whiteNoiseFrequency = new IntParameter(1); + [Range(0, 1)] + [Description("White Noise Time Left (sec)")] + public FloatParameter whiteNoiseLength = new FloatParameter(0.1f); + private float whiteNoiseTimeLeft; + + public int screenJumpFrequency = 1; + public float screenJumpLength = 0.2f; + public float screenJumpMinLevel = 0.1f; + public float screenJumpMaxLevel = 0.9f; + private float screenJumpTimeLeft; + + public float flickeringStrength = 0.002f; + public float flickeringCycle = 111f; + + public bool isSlippage = true; + public bool isSlippageNoise = true; + public float slippageStrength = 0.005f; + public float slippageInterval = 1f; + public float slippageScrollSpeed = 33f; + public float slippageSize = 11f; + + public float chromaticAberrationStrength = 0.005f; + public bool isChromaticAberration = true; + + public bool isMultipleGhost = true; + public float multipleGhostStrength = 0.01f; + + public bool isScanline = true; + public bool isMonochrome = false; + + public bool isLetterBox = false; + public bool isLetterBoxEdgeBlur = false; + public LeterBoxType letterBoxType; + public enum LeterBoxType + { + Black, + Blur + } + + public bool isFilmDirt = false; + public Texture2D filmDirtTex; + + public bool isDecalTex = false; + public Texture2D decalTex; + public Vector2 decalTexPos; + public Vector2 decalTexScale; + + public Vector2Int resolutions; + + #region Properties in shader + private int _WhiteNoiseOnOff; + private int _ScanlineOnOff; + private int _MonochormeOnOff; + private int _ScreenJumpLevel; + private int _FlickeringStrength; + private int _FlickeringCycle; + private int _SlippageStrength; + private int _SlippageSize; + private int _SlippageInterval; + private int _SlippageScrollSpeed; + private int _SlippageNoiseOnOff; + private int _SlippageOnOff; + private int _ChromaticAberrationStrength; + private int _ChromaticAberrationOnOff; + private int _MultipleGhostOnOff; + private int _MultipleGhostStrength; + private int _LetterBoxOnOff; + private int _LetterBoxType; + private int _LetterBoxEdgeBlurOnOff; + private int _DecalTex; + private int _DecalTexOnOff; + private int _DecalTexPos; + private int _DecalTexScale; + private int _FilmDirtOnOff; + private int _FilmDirtTex; + #endregion + + protected override void OnInit(Material renderMat) + { + base.OnInit(renderMat); + + _WhiteNoiseOnOff = Shader.PropertyToID("_WhiteNoiseOnOff"); + _ScanlineOnOff = Shader.PropertyToID("_ScanlineOnOff"); + _MonochormeOnOff = Shader.PropertyToID("_MonochormeOnOff"); + _ScreenJumpLevel = Shader.PropertyToID("_ScreenJumpLevel"); + _FlickeringStrength = Shader.PropertyToID("_FlickeringStrength"); + _FlickeringCycle = Shader.PropertyToID("_FlickeringCycle"); + _SlippageStrength = Shader.PropertyToID("_SlippageStrength"); + _SlippageSize = Shader.PropertyToID("_SlippageSize"); + _SlippageInterval = Shader.PropertyToID("_SlippageInterval"); + _SlippageScrollSpeed = Shader.PropertyToID("_SlippageScrollSpeed"); + _SlippageNoiseOnOff = Shader.PropertyToID("_SlippageNoiseOnOff"); + _SlippageOnOff = Shader.PropertyToID("_SlippageOnOff"); + _ChromaticAberrationStrength = Shader.PropertyToID("_ChromaticAberrationStrength"); + _ChromaticAberrationOnOff = Shader.PropertyToID("_ChromaticAberrationOnOff"); + _MultipleGhostOnOff = Shader.PropertyToID("_MultipleGhostOnOff"); + _MultipleGhostStrength = Shader.PropertyToID("_MultipleGhostStrength"); + _LetterBoxOnOff = Shader.PropertyToID("_LetterBoxOnOff"); + _LetterBoxType = Shader.PropertyToID("_LetterBoxType"); + _DecalTex = Shader.PropertyToID("_DecalTex"); + _DecalTexOnOff = Shader.PropertyToID("_DecalTexOnOff"); + _DecalTexPos = Shader.PropertyToID("_DecalTexPos"); + _DecalTexScale = Shader.PropertyToID("_DecalTexScale"); + _FilmDirtOnOff = Shader.PropertyToID("_FilmDirtOnOff"); + _FilmDirtTex = Shader.PropertyToID("_FilmDirtTex"); + } + + protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result) + { + SetShaderParameter(renderMat); + + Graphics.Blit(src, result, renderMat); + } + + private void SetShaderParameter(Material material) + { + ///////White noise + whiteNoiseTimeLeft -= 0.01f; + if (whiteNoiseTimeLeft <= 0) + { + if (Random.Range(0, 1000) < whiteNoiseFrequency) + { + material.SetInteger(_WhiteNoiseOnOff, 1); + whiteNoiseTimeLeft = whiteNoiseLength; + } + else + { + material.SetInteger(_WhiteNoiseOnOff, 0); + } + } + ////// + + material.SetInteger(_LetterBoxOnOff, isLetterBox ? 0 : 1); + //material.SetInteger(_LetterBoxEdgeBlurOnOff, isLetterBoxEdgeBlur ? 0 : 1); + material.SetInteger(_LetterBoxType, (int)letterBoxType); + + material.SetInteger(_ScanlineOnOff, isScanline ? 1 : 0); + material.SetInteger(_MonochormeOnOff, isMonochrome ? 1 : 0); + material.SetFloat(_FlickeringStrength, flickeringStrength); + material.SetFloat(_FlickeringCycle, flickeringCycle); + material.SetFloat(_ChromaticAberrationStrength, chromaticAberrationStrength); + material.SetInteger(_ChromaticAberrationOnOff, isChromaticAberration ? 1 : 0); + material.SetInteger(_MultipleGhostOnOff, isMultipleGhost ? 1 : 0); + material.SetFloat(_MultipleGhostStrength, multipleGhostStrength); + material.SetInteger(_FilmDirtOnOff, isFilmDirt ? 1 : 0); + material.SetTexture(_FilmDirtTex, filmDirtTex); + + //////Slippage + material.SetInteger(_SlippageOnOff, isSlippage ? 1 : 0); + material.SetFloat(_SlippageInterval, slippageInterval); + material.SetFloat(_SlippageNoiseOnOff, isSlippageNoise ? Random.Range(0, 1f) : 1); + material.SetFloat(_SlippageScrollSpeed, slippageScrollSpeed); + material.SetFloat(_SlippageStrength, slippageStrength); + material.SetFloat(_SlippageSize, slippageSize); + ////// + + //////Screen Jump Noise + screenJumpTimeLeft -= 0.01f; + if (screenJumpTimeLeft <= 0) + { + if (Random.Range(0, 1000) < screenJumpFrequency) + { + var level = Random.Range(screenJumpMinLevel, screenJumpMaxLevel); + material.SetFloat(_ScreenJumpLevel, level); + screenJumpTimeLeft = screenJumpLength; + } + else + { + material.SetFloat(_ScreenJumpLevel, 0); + } + } + ////// + + //////Decal Texture + material.SetTexture(_DecalTex, decalTex); + material.SetInteger(_DecalTexOnOff, isDecalTex ? 1 : 0); + material.SetVector(_DecalTexPos, decalTexPos); + material.SetVector(_DecalTexScale, decalTexScale); + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.cs.meta new file mode 100644 index 00000000..7530d4b6 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d4ffc7492874c2241827f1d70c24a1e3 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.shader b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.shader new file mode 100644 index 00000000..6dca2950 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.shader @@ -0,0 +1,237 @@ +Shader "Filter/yunoda-3DCG/SimpleCRT" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + _DecalTex ("Decal Texture", 2D) = "white" {} + _FilmDirtTex ("Dirt Texture", 2D) = "white" {} + } + SubShader + { + Pass + { + CGPROGRAM + #include "UnityCG.cginc" + + #pragma vertex vert + #pragma fragment frag + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float2 decaluv : TEXCOORD1; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + float4 _MainTex_TexelSize; + + int _WhiteNoiseOnOff; + int _ScanlineOnOff; + int _MonochormeOnOff; + + int _LetterBoxOnOff; + int _LetterBoxEdgeBlur; + int _LetterBoxType; + + float _ScreenJumpLevel; + + float _FlickeringStrength; + float _FlickeringCycle; + + int _SlippageOnOff; + float _SlippageStrength; + float _SlippageInterval; + float _SlippageScrollSpeed; + float _SlippageNoiseOnOff; + float _SlippageSize; + + float _ChromaticAberrationStrength; + int _ChromaticAberrationOnOff; + + int _MultipleGhostOnOff; + float _MultipleGhostStrength; + + sampler2D _DecalTex; + float4 _DecalTex_ST; + int _DecalTexOnOff; + float2 _DecalTexPos; + float2 _DecalTexScale; + + int _FilmDirtOnOff; + sampler2D _FilmDirtTex; + float4 _FilmDirtTex_ST; + + float GetRandom(float x); + float EaseIn(float t0, float t1, float t); + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + o.decaluv = TRANSFORM_TEX(v.uv, _DecalTex); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + float2 uv = i.uv; + + /////Jump noise + uv.y = frac(uv.y + _ScreenJumpLevel); + ///// + + /////frickering + float flickeringNoise = GetRandom(_Time.y); + float flickeringMask = pow(abs(sin(i.uv.y * _FlickeringCycle + _Time.y)), 10); + uv.x = uv.x + (flickeringNoise * _FlickeringStrength * flickeringMask); + ///// + + /////slippage + float scrollSpeed = _Time.x * _SlippageScrollSpeed; + float slippageMask = pow(abs(sin(i.uv.y * _SlippageInterval + scrollSpeed)), _SlippageSize); + float stepMask = round(sin(i.uv.y * _SlippageInterval + scrollSpeed - 1)); + uv.x = uv.x + (_SlippageNoiseOnOff * _SlippageStrength * slippageMask * stepMask) * _SlippageOnOff; + ///// + + /////Chromatic Aberration + float red = tex2D(_MainTex, float2(uv.x - _ChromaticAberrationStrength * _ChromaticAberrationOnOff, uv.y)).r; + float green = tex2D(_MainTex, float2(uv.x, uv.y)).g; + float blue = tex2D(_MainTex, float2(uv.x + _ChromaticAberrationStrength * _ChromaticAberrationOnOff, uv.y)).b; + float4 color = float4(red, green, blue, 1); + ///// + + /////Multiple Ghost + float4 ghost1st = tex2D(_MainTex, uv - float2(1, 0) * _MultipleGhostStrength * _MultipleGhostOnOff); + float4 ghost2nd = tex2D(_MainTex, uv - float2(1, 0) * _MultipleGhostStrength * 2 * _MultipleGhostOnOff); + color = color * 0.8 + ghost1st * 0.15 + ghost2nd * 0.05; + ///// + + /////File dirt + float2 pp = -1.0 + 2.0 * uv; + float time = _Time.x; + float aaRad = 0.1; + float2 nseLookup2 = pp + time * 1000; + float3 nse2 = + tex2D(_FilmDirtTex, 0.1 * nseLookup2.xy).xyz + + tex2D(_FilmDirtTex, 0.01 * nseLookup2.xy).xyz + + tex2D(_FilmDirtTex, 0.004 * nseLookup2.xy).xyz; + float thresh = 0.6; + float mul1 = smoothstep(thresh - aaRad, thresh + aaRad, nse2.x); + float mul2 = smoothstep(thresh - aaRad, thresh + aaRad, nse2.y); + float mul3 = smoothstep(thresh - aaRad, thresh + aaRad, nse2.z); + + float seed = tex2D(_FilmDirtTex, float2(time * 0.35, time)).x; + + float result = clamp(0, 1, seed + 0.7); + + result += 0.06 * EaseIn(19.2, 19.4, time); + + float band = 0.05; + if(_FilmDirtOnOff == 1) + { + if( 0.3 < seed && 0.3 + band > seed ) + color *= mul1 * result; + else if( 0.6 < seed && 0.6 + band > seed ) + color *= mul2 * result; + else if( 0.9 < seed && 0.9 + band > seed ) + color *= mul3 * result; + } + ///// + + /////Letter box + float band_uv = fmod(_MainTex_TexelSize.z, 640) / _MainTex_TexelSize.z / 2; + if(i.uv.x < band_uv || 1 - band_uv < i.uv.x) + { + float pi = 6.28318530718; + float directions = 16.0; + float quality = 3.0; + float size = 8.0; + + float2 Radius = size * _MainTex_ST.zw; + float4 samplingColor = tex2D(_MainTex, uv); + + for(float d = 0.0; d < pi; d += pi / directions) + { + for(float i = 1.0 / quality; i <= 1.0; i += 1.0 / quality) + { + samplingColor += tex2D(_MainTex, uv + float2(cos(d), sin(d)) * 0.015 * i); + } + } + samplingColor /= quality * directions - 15.0; + + if(_LetterBoxOnOff == 1) + { + color = color; + } + else if(_LetterBoxType == 0) // LetterBox is Black + { + color = 0; + } + else if(_LetterBoxType == 1) // LetterBox is Blur + { + color = samplingColor; + } + } + ///// + + /////White noise + if(_WhiteNoiseOnOff == 1) + { + return frac(sin(dot(i.uv, float2(12.9898, 78.233)) + _Time.x) * 43758.5453); + } + ///// + + /////Decal texture + float4 decal = tex2D(_DecalTex, (i.decaluv - _DecalTexPos) * _DecalTexScale) * _DecalTexOnOff; + color = color * (1 - decal.a) + decal; + ///// + + /////Scanline + float scanline = sin((i.uv.y + _Time.x) * 800.0) * 0.04; + color -= scanline * _ScanlineOnOff; + ///// + + //////scanline noise + float noiseAlpha = 1; + if(pow(sin(uv.y + _Time.y * 2), 200) >= 0.999) + { + noiseAlpha = GetRandom(uv.y); + //color *= noiseAlpha; + } + ////// + + //////Monochorome + if(_MonochormeOnOff == 1) + { + color.xyz = 0.299f * color.r + 0.587f * color.g + 0.114f * color.b; + } + ////// + + return color; + } + + float GetRandom(float x) + { + return frac(sin(dot(x, float2(12.9898, 78.233))) * 43758.5453); + } + + float EaseIn(float t0, float t1, float t) + { + return 2.0 * smoothstep(t0, 2.0 * t1 - t0, t); + } + ENDCG + } + } +} + + + diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.shader.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.shader.meta new file mode 100644 index 00000000..d1237e56 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/Filter/SimpleCRT/SimpleCRT.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fdf9f1937116ab84c97a58a4cf82fbf8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/BgSettingsUI/UI_FilterItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/BgSettingsUI/UI_FilterItem.cs index e7dd6ab2..eaa92acb 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/BgSettingsUI/UI_FilterItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/BgSettingsUI/UI_FilterItem.cs @@ -153,7 +153,7 @@ namespace AxibugEmuOnline.Client private FilterEffect.EditableParamerter m_param; private FilterPreset m_preset; - public override bool Visible => m_param.ValueType.IsEnum || m_param.ValueType == typeof(float); + public override bool Visible => true; public override string Name => m_param.Name; public Opt_ParamEditor(Filter filter, FilterEffect.EditableParamerter editParam, FilterPreset preset) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem.cs index 1581768c..3800fbf5 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem.cs @@ -8,6 +8,8 @@ namespace AxibugEmuOnline.Client [SerializeField] OptionUI_ValueEditItem_FloatEdit com_floatEdit; [SerializeField] + OptionUI_ValueEditItem_IntEdit com_intEdit; + [SerializeField] OptionUI_ValueEditItem_EnumEdit com_enumEdit; IValueEditControl m_currentCom; @@ -15,6 +17,7 @@ namespace AxibugEmuOnline.Client protected override void OnSetData(OptionMenu menuData) { com_floatEdit.gameObject.SetActive(false); + com_intEdit.gameObject.SetActive(false); com_enumEdit.gameObject.SetActive(false); if (menuData is ValueSetMenu) @@ -24,6 +27,10 @@ namespace AxibugEmuOnline.Client { m_currentCom = com_floatEdit; } + else if(valueMenu.ValueType == typeof(int)) + { + m_currentCom = com_intEdit; + } else if (valueMenu.ValueType.IsEnum) { m_currentCom = com_enumEdit; diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem_IntEdit.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem_IntEdit.cs new file mode 100644 index 00000000..1d7813c3 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem_IntEdit.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace AxibugEmuOnline.Client +{ + public class OptionUI_ValueEditItem_IntEdit : MonoBehaviour, IValueEditControl + { + [SerializeField] + Slider slider; + [SerializeField] + Text txt_value; + + int m_step; + private ValueSetMenu m_valueMenu; + + private void Awake() + { + slider.onValueChanged.AddListener(OnSliderValueChanged); + } + + private void OnSliderValueChanged(float value) + { + int intValue = (int)value; + txt_value.text = $"{intValue}"; + + if (!m_dataSetting) m_valueMenu.OnValueChanged(intValue); + } + + bool m_dataSetting; + public void SetData(ValueSetMenu valueMenu) + { + m_dataSetting = true; + m_valueMenu = valueMenu; + slider.minValue = (int)valueMenu.Min; + slider.maxValue = (int)valueMenu.Max; + slider.value = (int)valueMenu.ValueRaw; + slider.wholeNumbers = true; + m_step = 1; + m_dataSetting = false; + } + + public void OnLeft() + { + var newValue = Mathf.Clamp(slider.value - m_step, slider.minValue, slider.maxValue); + slider.value = newValue; + } + + public void OnRight() + { + var newValue = Mathf.Clamp(slider.value + m_step, slider.minValue, slider.maxValue); + slider.value = newValue; + } + + public void OnExecute() + { + } + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem_IntEdit.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem_IntEdit.cs.meta new file mode 100644 index 00000000..1224e4aa --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_ValueEditItem_IntEdit.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: abad743de1574354f99efc5054aa6b43 \ No newline at end of file