From e9ff47db032a9d294d6ae84f14c6bd1f64456150 Mon Sep 17 00:00:00 2001 From: Andy Baker Date: Tue, 18 Jul 2023 20:21:27 +0100 Subject: [PATCH 1/4] Feature/repaint selected (#409) Also includes a UI change needed to maintain consistency between the Repaint Tool and the new "Repaint Selected" (change from using a tray to using a popup for repaint settings) --- Assets/Materials/CloseButton.mat | 7 +- Assets/Materials/TickButton.mat | 40 + Assets/Materials/TickButton.mat.meta | 8 + Assets/Models/PopupWindows/1x5PopupMesh.fbx | Bin 0 -> 25532 bytes .../Models/PopupWindows/1x5PopupMesh.fbx.meta | 106 ++ .../Prefabs/Panels/AdvancedToolsPanel.prefab | 91 +- .../Panels/Widgets/Button_ClosePopup.prefab | 311 +++++ .../Widgets/Button_ClosePopup.prefab.meta | 7 + .../PopUps/PopupWindow_RepaintOptions.prefab | 1147 +++++++++++++++++ .../PopupWindow_RepaintOptions.prefab.meta | 7 + .../Prefabs/UIComponents/RepaintTray.prefab | 86 +- .../Prefabs/UIComponents/SelectionTray.prefab | 218 +++- Assets/Resources/Icons/repaint_options.png | Bin 0 -> 3139 bytes .../Resources/Icons/repaint_options.png.meta | 110 ++ Assets/Resources/Icons/ticktransparent.png | Bin 0 -> 3124 bytes .../Resources/Icons/ticktransparent.png.meta | 110 ++ Assets/Scripts/API/ApiEndpointAttribute.cs | 4 + .../Scripts/API/ApiMethods.ModifyStrokes.cs | 25 +- Assets/Scripts/BrushController.cs | 3 +- .../Scripts/Commands/RepaintStrokeCommand.cs | 69 +- Assets/Scripts/GUI/LongPressActionButton.cs | 28 + .../Scripts/GUI/LongPressActionButton.cs.meta | 3 + .../Scripts/GUI/RepaintOptionsPopUpWindow.cs | 90 ++ .../GUI/RepaintOptionsPopUpWindow.cs.meta | 11 + Assets/Scripts/GUI/RepaintTray.cs | 28 +- Assets/Scripts/GUI/SelectionTray.cs | 14 + Assets/Scripts/GUI/SketchSurfacePanel.cs | 2 + Assets/Scripts/PointerManager.cs | 5 + Assets/Scripts/SketchControlsScript.cs | 4 +- Assets/Scripts/SketchMemoryScript.cs | 99 +- Assets/Scripts/Tools/RepaintTool.cs | 12 +- .../Strings/Strings Shared Data.asset | 4 + .../Localization/Strings/Strings_de.asset | 2 +- .../Localization/Strings/Strings_en.asset | 8 + .../Localization/Strings/Strings_fr.asset | 2 +- 35 files changed, 2495 insertions(+), 166 deletions(-) create mode 100644 Assets/Materials/TickButton.mat create mode 100644 Assets/Materials/TickButton.mat.meta create mode 100644 Assets/Models/PopupWindows/1x5PopupMesh.fbx create mode 100644 Assets/Models/PopupWindows/1x5PopupMesh.fbx.meta create mode 100644 Assets/Prefabs/Panels/Widgets/Button_ClosePopup.prefab create mode 100644 Assets/Prefabs/Panels/Widgets/Button_ClosePopup.prefab.meta create mode 100644 Assets/Prefabs/PopUps/PopupWindow_RepaintOptions.prefab create mode 100644 Assets/Prefabs/PopUps/PopupWindow_RepaintOptions.prefab.meta create mode 100644 Assets/Resources/Icons/repaint_options.png create mode 100644 Assets/Resources/Icons/repaint_options.png.meta create mode 100644 Assets/Resources/Icons/ticktransparent.png create mode 100644 Assets/Resources/Icons/ticktransparent.png.meta create mode 100644 Assets/Scripts/GUI/LongPressActionButton.cs create mode 100644 Assets/Scripts/GUI/LongPressActionButton.cs.meta create mode 100644 Assets/Scripts/GUI/RepaintOptionsPopUpWindow.cs create mode 100644 Assets/Scripts/GUI/RepaintOptionsPopUpWindow.cs.meta diff --git a/Assets/Materials/CloseButton.mat b/Assets/Materials/CloseButton.mat index 63ba00a3e3..377a688084 100644 --- a/Assets/Materials/CloseButton.mat +++ b/Assets/Materials/CloseButton.mat @@ -2,14 +2,15 @@ %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: CloseButton m_Shader: {fileID: 4800000, guid: 0346acd269a0848419e5710885819216, type: 3} - m_ShaderKeywords: + m_ValidKeywords: [] + m_InvalidKeywords: [] m_LightmapFlags: 5 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -27,6 +28,7 @@ Material: m_Texture: {fileID: 2800000, guid: 2f02a4854de83874daef8a5da5355616, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + m_Ints: [] m_Floats: - _BokehDistance: 1 - _Cutoff: 0.5 @@ -35,3 +37,4 @@ Material: m_Colors: - _Color: {r: 1, g: 1, b: 1, a: 1} - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/TickButton.mat b/Assets/Materials/TickButton.mat new file mode 100644 index 0000000000..4e7b8cd900 --- /dev/null +++ b/Assets/Materials/TickButton.mat @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: TickButton + m_Shader: {fileID: 4800000, guid: 0346acd269a0848419e5710885819216, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _Illum: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: ccb038abf33e5644583b3a4eda87027e, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BokehDistance: 1 + - _Cutoff: 0.5 + - _EmissionLM: 0 + - _Grayscale: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} + m_BuildTextureStacks: [] diff --git a/Assets/Materials/TickButton.mat.meta b/Assets/Materials/TickButton.mat.meta new file mode 100644 index 0000000000..dc1d4112d8 --- /dev/null +++ b/Assets/Materials/TickButton.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74d3bc5882102a940acdb0d9192f06c8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Models/PopupWindows/1x5PopupMesh.fbx b/Assets/Models/PopupWindows/1x5PopupMesh.fbx new file mode 100644 index 0000000000000000000000000000000000000000..85ff104d69dd82fb8bffed69a1c15a60437da830 GIT binary patch literal 25532 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 T+E>z9W|O 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 literal 0 HcmV?d00001 diff --git a/Assets/Resources/Icons/repaint_options.png.meta b/Assets/Resources/Icons/repaint_options.png.meta new file mode 100644 index 0000000000..754f4b4cf3 --- /dev/null +++ b/Assets/Resources/Icons/repaint_options.png.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: e19c558a83b463843bb1f2f37c9c5d52 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Icons/ticktransparent.png b/Assets/Resources/Icons/ticktransparent.png new file mode 100644 index 0000000000000000000000000000000000000000..31a81d4a020d7755164b77474ad77751860beeb5 GIT binary patch literal 3124 zcmbVO2~-nz8lP}uM2>=TEsViilF1|>Ni+}$1du}txIzVSm<&mP93+8oUsX{N5Vm~+ zf}nVy>(jEd&w~mqRzXEY^jW1K3Mhyi7LQ_KaVK2$b#=Ghyf>NeKlA&3|KE4~zc+gV z{5=g8SS|nnz`)zfJrKWVsxLhq{Qt5uas$8V%e+Dr06_dqeG!1tGIIdXzAg$5QHJ>W zvQVj*g7Br07$s3G!_fe+!6i|KpfQ*djKl;Y37a%p*FXYAd^Tx|qaW2z#>IppuVgtE zlpq^3B;HZ0Tacs5(O)fO`7Iq;kNoQL;|NF${04uRlOk?;uipN zrE&~pQmAB^Hq1B~}C{ z$uKAoQ%K|GD2BuB=C)EOJrZzv?aC2~S;5n{iI?%YZIp0lk5q`3e*#D1%kFuhq zaxsE;fk=!9Fi0j5kihwBu(;A#sT@xio=&>D(edcidNH{u0ps)JQZYE)fGp8RGB6W? zyT_*^nDOO*GJ1F3Cw-xLF+26dJfnJ(*w{jY<(yXjJMtFfwu- z73L$W!4DgIh7T1Y5&?#fPKcxq9#YSknP{Pzs{EFS>31K@qd7P}s1 zp7-vu=m?+&^se15thTlsC`QT_B}cG2bKMHb{Br;HdY84s>GYrYJttHh-6_)UK~a2w zsdj$&qw8ISl@JB!JrC^b)u84R8ySCQaXQHKicq0bt3%1^$qOe48Ux#_TXHCw%gTVW z=M|}U&t&%2K-nSc=)`YSO<*NlJZ~WIt`z>NTK|ESfKILTC+hjr?A6C ztG=pp^NwZ#U`*`En>=1VI=BNOB!vKwckkqN=hzp!iJ)Qs(fD*T!_KV>!hq*YyGyUu zrnC?3`yofy#M8#wdf(Jf`ihOrH~oEtr?CKNxv!pRe%1ITI^qvR?2K*^WKP*{pk+ z_aDh0dK?r-Jfu6&r~mHlMB2?)Kp}%L)!Mbk#yutk; zy7AJ)0u{GLyWZ$r58TN1zt(U@75avDZJ4_>!`w9gtJ}ZibTD6T+j?TTbL#qgHURXs2pU0+Uux7dUHn%H5_u-&XM~r2*{m;g|(gyqKV+G^?%s(q5 zw6s`^hr?q#+gLVQ*IUfS%L(0fzJ0r4XUz@ZZB~ZqnCG|&^$@Y0neJl|qa|3Q!O+dQt~IP- zF0VcNpm21N@6eqL*V6}>Tifh2wR<-n>r9zg4%T>PwAPpBLPrZZ+xuurUGYT# z?AAQy*J4|k%hUtLc5e@~Xb5lh0QM&^1JYVhJrmpL(~GBy9P~@BNhV6YQmbo1UR#cn z#~g8sgjPcTYd#NiFF0=snqc+=) zkHl`YwIj@hq)9#^n m%e^l-p1c3#jQwCPPwMuIOvXy!cLVD0dT$SZ_cLzWv;Pf7L9)gG literal 0 HcmV?d00001 diff --git a/Assets/Resources/Icons/ticktransparent.png.meta b/Assets/Resources/Icons/ticktransparent.png.meta new file mode 100644 index 0000000000..0904a6ddd6 --- /dev/null +++ b/Assets/Resources/Icons/ticktransparent.png.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: ccb038abf33e5644583b3a4eda87027e +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/API/ApiEndpointAttribute.cs b/Assets/Scripts/API/ApiEndpointAttribute.cs index ba3e98b75d..0579b771c2 100644 --- a/Assets/Scripts/API/ApiEndpointAttribute.cs +++ b/Assets/Scripts/API/ApiEndpointAttribute.cs @@ -76,6 +76,10 @@ public object[] DecodeParams(string commandValue) ParameterInfo paramType = parameterInfo[i]; object paramValue; + // Stop parsing if we run out of tokens and the current param is optional + // (All following params can be assumed to also be optional) + if (i >= tokens.Length && paramType.IsOptional) break; + if (paramType.ParameterType == typeof(string)) { if (parameterInfo.Length == 1 && i == 0) diff --git a/Assets/Scripts/API/ApiMethods.ModifyStrokes.cs b/Assets/Scripts/API/ApiMethods.ModifyStrokes.cs index 72442d86a4..3a6246e22d 100644 --- a/Assets/Scripts/API/ApiMethods.ModifyStrokes.cs +++ b/Assets/Scripts/API/ApiMethods.ModifyStrokes.cs @@ -43,31 +43,22 @@ public static void SelectStrokes(int start, int end) SelectionManager.m_Instance.SelectStrokes(strokes); } - [ApiEndpoint("selection.recolor", "Recolors the currently selected strokes")] - public static void RecolorSelection() + [ApiEndpoint("selection.rebrush", "Rebrushes the currently selected strokes")] + public static void RebrushSelection(bool jitter = false) { - foreach (Stroke stroke in SelectionManager.m_Instance.SelectedStrokes) - { - SketchMemoryScript.m_Instance.MemorizeStrokeRepaint(stroke, true, false, false); - } + SketchMemoryScript.m_Instance.RepaintSelected(true, false, false, jitter); } - [ApiEndpoint("selection.rebrush", "Rebrushes the currently selected strokes")] - public static void RebrushSelection() + [ApiEndpoint("selection.recolor", "Recolors the currently selected strokes")] + public static void RecolorSelection(bool jitter = false) { - foreach (Stroke stroke in SelectionManager.m_Instance.SelectedStrokes) - { - SketchMemoryScript.m_Instance.MemorizeStrokeRepaint(stroke, false, true, false); - } + SketchMemoryScript.m_Instance.RepaintSelected(false, true, false, jitter); } [ApiEndpoint("selection.resize", "Changes the brush size the currently selected strokes")] - public static void ResizeSelection() + public static void ResizeSelection(bool jitter = false) { - foreach (Stroke stroke in SelectionManager.m_Instance.SelectedStrokes) - { - SketchMemoryScript.m_Instance.MemorizeStrokeRepaint(stroke, false, false, true); - } + SketchMemoryScript.m_Instance.RepaintSelected(false, false, true, jitter); } [ApiEndpoint("selection.trim", "Removes a number of points from the currently selected strokes")] diff --git a/Assets/Scripts/BrushController.cs b/Assets/Scripts/BrushController.cs index 808c795103..9b8ad62ade 100644 --- a/Assets/Scripts/BrushController.cs +++ b/Assets/Scripts/BrushController.cs @@ -50,7 +50,8 @@ public void SetActiveBrush(BrushDescriptor brush) m_ActiveBrush = brush; // Reset our tool when the user picks a new brush unless it is repainting. - if (SketchSurfacePanel.m_Instance.GetCurrentToolType() != BaseTool.ToolType.RepaintTool) + if (SketchSurfacePanel.m_Instance.GetCurrentToolType() != BaseTool.ToolType.RepaintTool && + SketchSurfacePanel.m_Instance.m_LastCommand.GetType() != typeof(RepaintStrokeCommand)) { SketchSurfacePanel.m_Instance.EnableDefaultTool(); } diff --git a/Assets/Scripts/Commands/RepaintStrokeCommand.cs b/Assets/Scripts/Commands/RepaintStrokeCommand.cs index 27f76be809..56f9f8001a 100644 --- a/Assets/Scripts/Commands/RepaintStrokeCommand.cs +++ b/Assets/Scripts/Commands/RepaintStrokeCommand.cs @@ -13,53 +13,76 @@ // limitations under the License. using System; +using System.Collections.Generic; +using System.Linq; using UnityEngine; namespace TiltBrush { public class RepaintStrokeCommand : BaseCommand { - private Stroke m_TargetStroke; - private Color m_StartColor; - private Guid m_StartGuid; - private Color m_EndColor; - private Guid m_EndGuid; - private float m_StartSize; - private float m_EndSize; + private List m_TargetStrokes; + private List m_StartColors; + private List m_StartGuids; + private List m_StartSizes; + private List m_EndColors; + private List m_EndGuids; + private List m_EndSizes; public RepaintStrokeCommand( Stroke stroke, Color newcolor, Guid newGuid, float newSize, BaseCommand parent = null) : base(parent) { - m_TargetStroke = stroke; - m_StartColor = stroke.m_Color; - m_StartGuid = stroke.m_BrushGuid; - m_StartSize = stroke.m_BrushSize; - m_EndColor = newcolor; - m_EndGuid = newGuid; - m_EndSize = newSize; + m_TargetStrokes = new List { stroke }; + + m_StartColors = new List { stroke.m_Color }; + m_StartGuids = new List { stroke.m_BrushGuid }; + m_StartSizes = new List { stroke.m_BrushSize }; + + m_EndColors = new List { newcolor }; + m_EndGuids = new List { newGuid }; + m_EndSizes = new List { newSize }; + } + + public RepaintStrokeCommand(List strokes, List newcolors, List newGuids, List newSizes, BaseCommand parent = null) : base(parent) + { + m_TargetStrokes = strokes; + + m_StartColors = strokes.Select(s => s.m_Color).ToList(); + m_StartGuids = strokes.Select(s => s.m_BrushGuid).ToList(); + m_StartSizes = strokes.Select(s => s.m_BrushSize).ToList(); + + m_EndColors = newcolors.ToList(); + m_EndGuids = newGuids.ToList(); + m_EndSizes = newSizes.ToList(); } public override bool NeedsSave { get { return true; } } - private void ApplyColorAndBrushToObject(Color color, Guid brushGuid, float brushSize) + private void ApplyColorAndBrushToObject(Stroke stroke, Color color, Guid brushGuid, float brushSize) { - m_TargetStroke.m_Color = ColorPickerUtils.ClampLuminance( + stroke.m_Color = ColorPickerUtils.ClampLuminance( color, BrushCatalog.m_Instance.GetBrush(brushGuid).m_ColorLuminanceMin); - m_TargetStroke.m_BrushGuid = brushGuid; - m_TargetStroke.m_BrushSize = brushSize; - m_TargetStroke.InvalidateCopy(); - m_TargetStroke.Uncreate(); - m_TargetStroke.Recreate(); + stroke.m_BrushGuid = brushGuid; + stroke.m_BrushSize = brushSize; + stroke.InvalidateCopy(); + stroke.Uncreate(); + stroke.Recreate(); } protected override void OnRedo() { - ApplyColorAndBrushToObject(m_EndColor, m_EndGuid, m_EndSize); + for (var i = 0; i < m_TargetStrokes.Count; i++) + { + ApplyColorAndBrushToObject(m_TargetStrokes[i], m_EndColors[i], m_EndGuids[i], m_EndSizes[i]); + } } protected override void OnUndo() { - ApplyColorAndBrushToObject(m_StartColor, m_StartGuid, m_StartSize); + for (var i = 0; i < m_TargetStrokes.Count; i++) + { + ApplyColorAndBrushToObject(m_TargetStrokes[i], m_StartColors[i], m_StartGuids[i], m_StartSizes[i]); + } } } } // namespace TiltBrush diff --git a/Assets/Scripts/GUI/LongPressActionButton.cs b/Assets/Scripts/GUI/LongPressActionButton.cs new file mode 100644 index 0000000000..b1e59cfe15 --- /dev/null +++ b/Assets/Scripts/GUI/LongPressActionButton.cs @@ -0,0 +1,28 @@ +// Copyright 2020 The Tilt Brush Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using UnityEngine; + +namespace TiltBrush +{ + public class LongPressActionButton : LongPressButton + { + [SerializeField] private UnityEngine.Events.UnityEvent m_Action; + + protected override void OnButtonPressed() + { + m_Action.Invoke(); + } + } +} // namespace TiltBrush diff --git a/Assets/Scripts/GUI/LongPressActionButton.cs.meta b/Assets/Scripts/GUI/LongPressActionButton.cs.meta new file mode 100644 index 0000000000..5bad239c4f --- /dev/null +++ b/Assets/Scripts/GUI/LongPressActionButton.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d1eea6a2cc004b83af9aebb729e1df80 +timeCreated: 1667840815 \ No newline at end of file diff --git a/Assets/Scripts/GUI/RepaintOptionsPopUpWindow.cs b/Assets/Scripts/GUI/RepaintOptionsPopUpWindow.cs new file mode 100644 index 0000000000..92981ab581 --- /dev/null +++ b/Assets/Scripts/GUI/RepaintOptionsPopUpWindow.cs @@ -0,0 +1,90 @@ +// Copyright 2022 The Tilt Brush Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using UnityEngine; + +namespace TiltBrush +{ + + public class RepaintOptionsPopUpWindow : OptionsPopUpWindow + { + public ToggleButton m_RecolorButton; + public ToggleButton m_ResizeButton; + public ToggleButton m_RebrushButton; + public ToggleButton m_JitterButton; + + override public void Init(GameObject rParent, string sText) + { + base.Init(rParent, sText); + var pm = PointerManager.m_Instance; + m_RecolorButton.IsToggledOn = pm.RecolorOn; + m_ResizeButton.IsToggledOn = pm.ResizeOn; + m_RebrushButton.IsToggledOn = pm.RebrushOn; + m_JitterButton.IsToggledOn = pm.JitterOn; + } + + enum ButtonType + { + Recolor, + Rebrush, + Resize, + Jitter, + } + + private void SetRepaintFlags(ButtonType buttonType, bool state) + { + var pm = PointerManager.m_Instance; + switch (buttonType) + { + case ButtonType.Recolor: + pm.RecolorOn = state; + break; + case ButtonType.Rebrush: + pm.RebrushOn = state; + break; + case ButtonType.Resize: + pm.ResizeOn = state; + break; + case ButtonType.Jitter: + pm.JitterOn = state; + break; + } + } + + public void RecolorToggled(ToggleButton button) + { + SetRepaintFlags(ButtonType.Recolor, button.IsToggledOn); + } + + public void HandleOKButton() + { + RequestClose(true); + } + + public void RebrushToggled(ToggleButton button) + { + SetRepaintFlags(ButtonType.Rebrush, button.IsToggledOn); + } + + public void ResizeToggled(ToggleButton button) + { + SetRepaintFlags(ButtonType.Resize, button.IsToggledOn); + } + + public void JitterToggled(ToggleButton button) + { + SetRepaintFlags(ButtonType.Jitter, button.IsToggledOn); + } + } +} // namespace TiltBrush diff --git a/Assets/Scripts/GUI/RepaintOptionsPopUpWindow.cs.meta b/Assets/Scripts/GUI/RepaintOptionsPopUpWindow.cs.meta new file mode 100644 index 0000000000..58b03dc633 --- /dev/null +++ b/Assets/Scripts/GUI/RepaintOptionsPopUpWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b965e56dff02ef46b8e9b165d17ec5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/GUI/RepaintTray.cs b/Assets/Scripts/GUI/RepaintTray.cs index ae451321a2..b4829f0498 100644 --- a/Assets/Scripts/GUI/RepaintTray.cs +++ b/Assets/Scripts/GUI/RepaintTray.cs @@ -20,8 +20,21 @@ namespace TiltBrush { public class RepaintTray : BaseTray { - private RepaintTool m_repaintTool; + public ToggleButton m_RecolorButton; + public ToggleButton m_ResizeButton; + public ToggleButton m_RebrushButton; + public ToggleButton m_JitterButton; + protected override void OnToolChanged() + { + base.OnToolChanged(); + var pm = PointerManager.m_Instance; + m_RecolorButton.IsToggledOn = pm.RecolorOn; + m_ResizeButton.IsToggledOn = pm.ResizeOn; + m_RebrushButton.IsToggledOn = pm.RebrushOn; + m_JitterButton.IsToggledOn = pm.JitterOn; + + } enum ButtonType { Recolor, @@ -32,23 +45,20 @@ enum ButtonType private void SetRepaintFlags(ButtonType buttonType, bool state) { - if (m_repaintTool == null) - { - m_repaintTool = SketchControlsScript.m_Instance.GetComponentInChildren(); - } + var pm = PointerManager.m_Instance; switch (buttonType) { case ButtonType.Recolor: - m_repaintTool.RecolorOn = state; + pm.RecolorOn = state; break; case ButtonType.Rebrush: - m_repaintTool.RebrushOn = state; + pm.RebrushOn = state; break; case ButtonType.Resize: - m_repaintTool.ResizeOn = state; + pm.ResizeOn = state; break; case ButtonType.Jitter: - m_repaintTool.JitterOn = state; + pm.JitterOn = state; break; } } diff --git a/Assets/Scripts/GUI/SelectionTray.cs b/Assets/Scripts/GUI/SelectionTray.cs index 6ad7e47d28..98910844f6 100644 --- a/Assets/Scripts/GUI/SelectionTray.cs +++ b/Assets/Scripts/GUI/SelectionTray.cs @@ -12,7 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +using System; using System.Collections; +using System.Collections.Generic; +using System.Linq; using UnityEngine; namespace TiltBrush @@ -25,6 +28,17 @@ protected override void OnSelectionChanged() { m_GroupButton.UpdateVisuals(); } + + public void RepaintSelected() + { + var pm = PointerManager.m_Instance; + SketchMemoryScript.m_Instance.RepaintSelected( + pm.RebrushOn, + pm.RecolorOn, + pm.ResizeOn, + pm.JitterOn + ); + } } } // namespace TiltBrush diff --git a/Assets/Scripts/GUI/SketchSurfacePanel.cs b/Assets/Scripts/GUI/SketchSurfacePanel.cs index b6f393a95c..f0fd818384 100644 --- a/Assets/Scripts/GUI/SketchSurfacePanel.cs +++ b/Assets/Scripts/GUI/SketchSurfacePanel.cs @@ -37,6 +37,7 @@ public class SketchSurfacePanel : BasePanel private bool m_SurfaceIsDrawable = true; [NonSerialized] public bool m_UpdatedToolThisFrame = false; + [NonSerialized] public BaseCommand m_LastCommand; public bool IsSurfaceDrawable() { return m_SurfaceIsDrawable; } public bool IsSketchSurfaceToolActive() @@ -101,6 +102,7 @@ void OnDisable() } bool m_AddedNewPoseListener = false; + void Update() { // Do this here instead of OnEnable() to ensure that our event handler gets diff --git a/Assets/Scripts/PointerManager.cs b/Assets/Scripts/PointerManager.cs index c050dc503f..ffc7316598 100644 --- a/Assets/Scripts/PointerManager.cs +++ b/Assets/Scripts/PointerManager.cs @@ -158,6 +158,11 @@ struct StoredBrushInfo public float sizeJitter { get; set; } public float positionJitter { get; set; } + [NonSerialized] public bool RecolorOn = true; + [NonSerialized] public bool RebrushOn = false; + [NonSerialized] public bool ResizeOn = false; + [NonSerialized] public bool JitterOn = false; + // These variables are legacy for supporting z-fighting control on the sketch surface // panel in monoscopic mode. private float m_SketchSurfaceLineDepthVarianceBase = 0.0001f; diff --git a/Assets/Scripts/SketchControlsScript.cs b/Assets/Scripts/SketchControlsScript.cs index ab9fb38b0d..52d9acf2cf 100644 --- a/Assets/Scripts/SketchControlsScript.cs +++ b/Assets/Scripts/SketchControlsScript.cs @@ -149,7 +149,8 @@ public enum GlobalCommands SymmetryTwoHanded = 6003, OpenColorOptionsPopup = 7000, ChangeSnapAngle = 8000, - MergeBrushStrokes = 10000 + MergeBrushStrokes = 10000, + RepaintOptions = 11500, } public enum ControlsType @@ -4915,6 +4916,7 @@ public void LoadSketch(SceneFileInfo fileInfo, bool quickload = false, bool addi // TODO refactor code above to use this method OpenUrl($"http://localhost:{App.HttpServer.HttpPort}/examplescripts"); break; + case GlobalCommands.RepaintOptions: break; // Intentionally blank. case GlobalCommands.Null: break; // Intentionally blank. default: Debug.LogError($"Unrecognized command {rEnum}"); diff --git a/Assets/Scripts/SketchMemoryScript.cs b/Assets/Scripts/SketchMemoryScript.cs index 22ab33af69..7368418b47 100644 --- a/Assets/Scripts/SketchMemoryScript.cs +++ b/Assets/Scripts/SketchMemoryScript.cs @@ -373,6 +373,7 @@ public Stroke DuplicateStroke(Stroke srcStroke, CanvasScript canvas, TrTransform public void PerformAndRecordCommand(BaseCommand command, bool discardIfNotMerged = false) { + SketchSurfacePanel.m_Instance.m_LastCommand = command; bool discardCommand = discardIfNotMerged; BaseCommand delta = command; ClearRedo(); @@ -593,46 +594,91 @@ public void MemorizeDeleteSelection(GameObject rObject) } } - public bool MemorizeStrokeRepaint(Stroke stroke, bool recolor, bool rebrush, bool resize, bool jitter = false, bool force = false) + public void RepaintSelected(bool rebrush, bool recolor, bool resize, bool jitter) { - - Guid currentBrushGuid = PointerManager.m_Instance + float desiredSize = (1 / Coords.CanvasPose.scale) * PointerManager.m_Instance.MainPointer.BrushSizeAbsolute; + Guid desiredGuid = PointerManager.m_Instance .GetPointer(InputManager.ControllerName.Brush).CurrentBrush.m_Guid; + Color desiredColor = PointerManager.m_Instance.PointerColor; - float currentBrushSize = (1 / Coords.CanvasPose.scale) * PointerManager.m_Instance.MainPointer.BrushSizeAbsolute; + var strokes = SelectionManager.m_Instance.SelectedStrokes.ToList(); + var newColors = new List(); + var newGuids = new List(); + var newSizes = new List(); - if (force || (recolor && stroke.m_Color != PointerManager.m_Instance.PointerColor) || - (jitter && PointerManager.m_Instance.JitterEnabled) || - (rebrush && stroke.m_BrushGuid != currentBrushGuid) || - (resize && stroke.m_BrushSize != currentBrushSize)) + foreach (var stroke in strokes) { - if (m_RepaintStrokeParent == null) + GetRepaintParams( + stroke, + desiredGuid, desiredColor, desiredSize, + rebrush, recolor, resize, jitter, + out Color newColor, out Guid newGuid, out float newSize + ); + newColors.Add(newColor); + newGuids.Add(newGuid); + newSizes.Add(newSize); + } + PerformAndRecordCommand( + new RepaintStrokeCommand(strokes, newColors, newGuids, newSizes) + ); + } + + + + public void GetRepaintParams( + Stroke stroke, + Guid desiredGuid, Color desiredColor, float desiredSize, + bool rebrush, bool recolor, bool resize, bool jitter, + out Color resultingColor, out Guid resultingGuid, out float resultingSize + ) + { + resultingGuid = rebrush ? desiredGuid : stroke.m_BrushGuid; + resultingColor = recolor ? desiredColor : stroke.m_Color; + resultingSize = resize ? desiredSize : stroke.m_BrushSize; + + // Is Jitter enabled? + if (jitter) + { + float colorLuminanceMin = BrushCatalog.m_Instance.GetBrush(resultingGuid).m_ColorLuminanceMin; + if (recolor) resultingColor = PointerManager.m_Instance.GenerateJitteredColor(colorLuminanceMin); + if (resize) { - m_RepaintStrokeParent = new BaseCommand(); + BrushDescriptor desc = BrushCatalog.m_Instance.GetBrush(resultingGuid); + resultingSize = PointerManager.m_Instance.GenerateJitteredSize(desc, resultingSize); } + } + } - Color newColor = stroke.m_Color; - float newSize = stroke.m_BrushSize; - Guid newGuid = rebrush ? currentBrushGuid : stroke.m_BrushGuid; + public bool MemorizeStrokeRepaint(Stroke stroke, bool recolor, bool rebrush, bool resize, bool jitter = false, bool force = false) + { - if (jitter && PointerManager.m_Instance.JitterEnabled) // Is Jitter enabled? - { - float colorLuminanceMin = BrushCatalog.m_Instance.GetBrush(newGuid).m_ColorLuminanceMin; - if (recolor) newColor = PointerManager.m_Instance.GenerateJitteredColor(colorLuminanceMin); - if (resize) - { - BrushDescriptor desc = BrushCatalog.m_Instance.GetBrush(newGuid); - newSize = PointerManager.m_Instance.GenerateJitteredSize(desc, newSize); - } + float desiredSize = (1 / Coords.CanvasPose.scale) * PointerManager.m_Instance.MainPointer.BrushSizeAbsolute; + Guid desiredGuid = PointerManager.m_Instance + .GetPointer(InputManager.ControllerName.Brush).CurrentBrush.m_Guid; + Color desiredColor = PointerManager.m_Instance.PointerColor; - } - else + // Don't run unless there's something to change + if ( + force || + ((recolor && stroke.m_Color != desiredColor) || + (rebrush && stroke.m_BrushGuid != desiredGuid) || + (resize && stroke.m_BrushSize != desiredSize) || + (jitter && PointerManager.m_Instance.JitterEnabled)) + ) + { + if (m_RepaintStrokeParent == null) { - if (recolor) newColor = PointerManager.m_Instance.PointerColor; - if (resize) newSize = currentBrushSize; + m_RepaintStrokeParent = new BaseCommand(); } + GetRepaintParams( + stroke, + desiredGuid, desiredColor, desiredSize, + rebrush, recolor, resize, jitter && PointerManager.m_Instance.JitterEnabled, + out Color newColor, out Guid newGuid, out float newSize + ); + var positionJitter = PointerManager.m_Instance.positionJitter; if (positionJitter > 0) { @@ -766,6 +812,7 @@ public void ClearMemory() Resources.UnloadUnusedAssets(); } + // Repaint in doesn't relate to the repaint command public IEnumerator RepaintCoroutine() { int numStrokes = m_MemoryList.Count; diff --git a/Assets/Scripts/Tools/RepaintTool.cs b/Assets/Scripts/Tools/RepaintTool.cs index 27a047ca27..317a792489 100644 --- a/Assets/Scripts/Tools/RepaintTool.cs +++ b/Assets/Scripts/Tools/RepaintTool.cs @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -using System; using UnityEngine; namespace TiltBrush @@ -27,11 +26,6 @@ public class RepaintTool : StrokeModificationTool private float m_SpinSpeed; private float m_SpinAmount; - [NonSerialized] public bool RecolorOn = true; - [NonSerialized] public bool RebrushOn = false; - [NonSerialized] public bool ResizeOn = false; - [NonSerialized] public bool JitterOn = false; - override protected void Awake() { base.Awake(); @@ -145,16 +139,18 @@ override protected bool HandleIntersectionWithBatchedStroke(BatchSubset rGroup) } else m_BatchFilter = null; + var pm = PointerManager.m_Instance; var didRepaint = SketchMemoryScript.m_Instance.MemorizeStrokeRepaint( - rGroup.m_Stroke, RecolorOn, RebrushOn, ResizeOn, JitterOn); + rGroup.m_Stroke, pm.RecolorOn, pm.RebrushOn, pm.ResizeOn, pm.JitterOn); if (didRepaint) { PlayModifyStrokeSound(); } return didRepaint; } override protected bool HandleIntersectionWithSolitaryObject(GameObject rGameObject) { + var pm = PointerManager.m_Instance; var didRepaint = SketchMemoryScript.m_Instance.MemorizeStrokeRepaint( - rGameObject, RecolorOn, RebrushOn, ResizeOn, JitterOn); + rGameObject, pm.RecolorOn, pm.RebrushOn, pm.ResizeOn, pm.JitterOn); PlayModifyStrokeSound(); if (didRepaint) { PlayModifyStrokeSound(); } return didRepaint; diff --git a/Assets/Settings/Localization/Strings/Strings Shared Data.asset b/Assets/Settings/Localization/Strings/Strings Shared Data.asset index ac13f04ac2..0154fe8895 100644 --- a/Assets/Settings/Localization/Strings/Strings Shared Data.asset +++ b/Assets/Settings/Localization/Strings/Strings Shared Data.asset @@ -2999,6 +2999,10 @@ MonoBehaviour: m_Key: POPUP_SKETCHMENU_BUTTON_DESCRIPTION_RENAME_SKETCH m_Metadata: m_Items: [] + - m_Id: 109424659466551296 + m_Key: ADVANCEDTOOLS_PANEL_SELECTION_TRAY_REPAINT_SELECTED + m_Metadata: + m_Items: [] m_Metadata: m_Items: [] m_KeyGenerator: diff --git a/Assets/Settings/Localization/Strings/Strings_de.asset b/Assets/Settings/Localization/Strings/Strings_de.asset index 98ad22a7bc..30cb5c71dc 100644 --- a/Assets/Settings/Localization/Strings/Strings_de.asset +++ b/Assets/Settings/Localization/Strings/Strings_de.asset @@ -317,7 +317,7 @@ MonoBehaviour: m_Metadata: m_Items: [] - m_Id: 5146220882010112 - m_Localized: '#N/A' + m_Localized: "Umf\xE4rben Ein" m_Metadata: m_Items: [] - m_Id: 5146583311818752 diff --git a/Assets/Settings/Localization/Strings/Strings_en.asset b/Assets/Settings/Localization/Strings/Strings_en.asset index c2e4ea7866..62fb28aea8 100644 --- a/Assets/Settings/Localization/Strings/Strings_en.asset +++ b/Assets/Settings/Localization/Strings/Strings_en.asset @@ -3184,6 +3184,14 @@ MonoBehaviour: m_Localized: Rename Sketch m_Metadata: m_Items: [] + - m_Id: 109424659466551296 + m_Localized: Repaint Selected + m_Metadata: + m_Items: [] + - m_Id: 5146220882010112 + m_Localized: Recolor On + m_Metadata: + m_Items: [] references: version: 2 RefIds: [] diff --git a/Assets/Settings/Localization/Strings/Strings_fr.asset b/Assets/Settings/Localization/Strings/Strings_fr.asset index ca0e22f7aa..1d6086da2d 100644 --- a/Assets/Settings/Localization/Strings/Strings_fr.asset +++ b/Assets/Settings/Localization/Strings/Strings_fr.asset @@ -315,7 +315,7 @@ MonoBehaviour: m_Metadata: m_Items: [] - m_Id: 5146220882010112 - m_Localized: '#N/A' + m_Localized: "Recoloriage activ\xE9" m_Metadata: m_Items: [] - m_Id: 5146583311818752 From 10e180c931f86924e4e89332e95ed4e427c55b15 Mon Sep 17 00:00:00 2001 From: Mike Nisbet Date: Tue, 18 Jul 2023 22:06:40 +0100 Subject: [PATCH 2/4] Add Quest support to the pure Android XR build (#469) Add oculus category to manifest --- Assets/Plugins/Android/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Plugins/Android/AndroidManifest.xml b/Assets/Plugins/Android/AndroidManifest.xml index 71c50da4fb..fd52ce5206 100644 --- a/Assets/Plugins/Android/AndroidManifest.xml +++ b/Assets/Plugins/Android/AndroidManifest.xml @@ -12,6 +12,7 @@ + From 8cc0b39adfb45a39767f76c43c3edc1412b54882 Mon Sep 17 00:00:00 2001 From: Mike Miller Date: Wed, 19 Jul 2023 06:33:57 +0300 Subject: [PATCH 3/4] Update steam deployment to remove superflous parameters (#470) Same change as the steam-deploy action from https://github.com/game-ci/steam-deploy/pull/57 --- .github/workflows/build.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee0afd1013..028bc89d31 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -597,7 +597,6 @@ jobs: run: | mkdir -p /home/runner/Steam/config echo "${{ secrets.STEAM_CONFIG_VDF}}" | base64 -d - > /home/runner/Steam/config/config.vdf - echo "${{ secrets.STEAM_SSFN }}" | base64 -d - > /home/runner/Steam/${{ secrets.STEAM_SSFN_FILENAME }} - name: Download Build Artifacts (Windows OpenXR) uses: actions/download-artifact@v3 with: @@ -609,10 +608,9 @@ jobs: j2 Support/steam/app.vdf.j2 > build_windows_openxr/app.vdf j2 Support/steam/main_depot.vdf.j2 > build_windows_openxr/main_depot.vdf j2 Support/steam/installscript_win.vdf.j2 > build_windows_openxr/installscript_win.vdf - steamcmd +login $STEAM_USERNAME $STEAM_PASSWORD +run_app_build $(pwd)/build_windows_openxr/app.vdf +quit + steamcmd +login $STEAM_USERNAME +run_app_build $(pwd)/build_windows_openxr/app.vdf +quit env: STEAM_USERNAME: ${{ secrets.STEAM_USERNAME }} - STEAM_PASSWORD: ${{ secrets.STEAM_PASSWORD }} VERSION: ${{ needs.configuration.outputs.version }} OPEN_BRUSH_APP_ID: 1634870 OPEN_BRUSH_WINDOWS_DEPOT_ID: 1634871 From f3588569e26200d817752bfdd6efbd647de3707b Mon Sep 17 00:00:00 2001 From: Mike Miller Date: Wed, 19 Jul 2023 07:28:14 +0300 Subject: [PATCH 4/4] Restore Steam password; it seems to be needed (#471) --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 028bc89d31..8aeb8a154b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -608,9 +608,10 @@ jobs: j2 Support/steam/app.vdf.j2 > build_windows_openxr/app.vdf j2 Support/steam/main_depot.vdf.j2 > build_windows_openxr/main_depot.vdf j2 Support/steam/installscript_win.vdf.j2 > build_windows_openxr/installscript_win.vdf - steamcmd +login $STEAM_USERNAME +run_app_build $(pwd)/build_windows_openxr/app.vdf +quit + steamcmd +login $STEAM_USERNAME $STEAM_PASSWORD +run_app_build $(pwd)/build_windows_openxr/app.vdf +quit env: STEAM_USERNAME: ${{ secrets.STEAM_USERNAME }} + STEAM_PASSWORD: ${{ secrets.STEAM_PASSWORD }} VERSION: ${{ needs.configuration.outputs.version }} OPEN_BRUSH_APP_ID: 1634870 OPEN_BRUSH_WINDOWS_DEPOT_ID: 1634871