using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEditor; using UnityEngine; using UnityEngine.UI; namespace VketCloudGUITools.Runtime { [RequireComponent(typeof(Canvas))] [RequireComponent(typeof(CanvasScaler))] [System.Serializable] [DisallowMultipleComponent] public class VCCanvas : MonoBehaviour { public static readonly Vector2 CANVAS_SIZE_LANDSCAPE = new Vector2(1280, 720); public static readonly Vector2 CANVAS_SIZE_PORTRAIT = new Vector2(1280, 2276); #region Delegate public delegate void OnButtonPressedDelegate(VCButton button, List guiActionListItems); public delegate void OnSliderValueChangedDelegate(VCSlider slider, float value); #endregion public int Version; public CanvasType CanvasType; public int Z; public List layerList = new List(); [HideInInspector] public List Scripts = new List(); public event OnButtonPressedDelegate onButtonPress; public event OnSliderValueChangedDelegate onSliderValueChanged; public void ApplyValues() { var canvasScaler = this.GetComponent(); switch (this.CanvasType) { case CanvasType.None: canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ConstantPixelSize; break; case CanvasType.LandScape: canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; canvasScaler.referenceResolution = CANVAS_SIZE_LANDSCAPE; canvasScaler.matchWidthOrHeight = 0; break; case CanvasType.Portrait: canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; canvasScaler.referenceResolution = CANVAS_SIZE_PORTRAIT; canvasScaler.matchWidthOrHeight = 1; break; } this.transform.localPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, 0 - Z); } [ContextMenu("Resolve References")] public void OnResolveReferences() { layerList = GetComponentsInChildren(includeInactive: true).ToList(); foreach (var layer in layerList) { layer.OnResolveReferences(this); } } public void OnButtonPress(VCButton button, List guiActionListItems) { onButtonPress.Invoke(button, guiActionListItems); } public void OnSliderValueChanged(VCSlider slider, float value) { onSliderValueChanged.Invoke(slider, value); } } }