Files
BITFALL/Assets/Plugins/FImpossible Creations/Plugins - Level Design/PGG/Rules Logics/Utilities/QuarterRotationCheck.cs
CortexCore ba342d6627 1
2023-11-30 00:23:23 +08:00

142 lines
4.1 KiB
C#

#if UNITY_EDITOR
using System;
using UnityEditor;
using UnityEngine;
#endif
namespace FIMSpace.Generating
{
[System.Serializable]
public class QuarterRotationCheck
{
/// <summary> 0° to 90° </summary>
public bool q1 = true;
/// <summary> 90° to 180° </summary>
public bool q2 = false;
/// <summary> 180° to 270° </summary>
public bool q3 = false;
/// <summary> 270° to 360° </summary>
public bool q4 = false;
#region Methods
/// <param name="quarter">0,90,180 or 270</param>
public bool ISDegrees(int degree)
{
if (degree == 0 || degree == 360) return q1;
if (degree == 90 || degree == -270) return q2;
if (degree == 180 || degree == -180) return q3;
if (degree == 270 || degree == -90) return q4;
return false;
}
/// <param name="quarter">1,2,3 or 4</param>
public bool ISQuarter(int quarter = 1)
{
if (quarter == 1) return q1;
if (quarter == 2) return q2;
if (quarter == 3) return q3;
if (quarter == 4) return q4;
return false;
}
public void SetOnDegrees(int degree, bool value)
{
if (degree == 0 || degree == 360) q1 = value;
if (degree == 90 || degree == -270) q2 = value;
if (degree == 180 || degree == -180) q3 = value;
if (degree == 270 || degree == -90) q4 = value;
}
public void SetOnQuarter(int quarter, bool value)
{
if (quarter == 1) q1 = value;
if (quarter == 2) q2 = value;
if (quarter == 3) q3 = value;
if (quarter == 4) q4 = value;
}
public bool AllChecked()
{
return q1 && q2 && q3 && q4;
}
public bool OnlyOneChecked()
{
return CountChecked() == 1;
}
public bool AnyChecked()
{
return CountChecked() > 0;
}
public int CountChecked()
{
int checkedq = 0;
if (q1) checkedq++;
if (q2) checkedq++;
if (q3) checkedq++;
if (q4) checkedq++;
return checkedq;
}
public bool Only180Checked()
{
if ( q1 && q3)
{
if (q2 == false && q4 == false) return true;
}
if (q2 && q4)
{
if (q1 == false && q3 == false) return true;
}
return false;
}
#endregion
#region Editor
#if UNITY_EDITOR
private static string[] guiSet = new string[] { "0°", "╔", "╚", "╝" };
//private static string[] guiSet = new string[] { "╗", "╔", "╚", "╝" };
public static void DrawGUI(QuarterRotationCheck quart, string[] customSet = null, int width = 25, int height = 25)
{
if (customSet == null) customSet = guiSet;
string[] s = customSet;
Color c = GUI.color;
EditorGUILayout.BeginVertical();
GUILayoutOption[] opt = new GUILayoutOption[] { GUILayout.Width(width), GUILayout.Height(height) };
EditorGUILayout.BeginHorizontal();
Color unused = new Color(0.3f, 0.3f, 0.3f, 0.3f);
if (!quart.ISQuarter(2)) GUI.color = unused; if (GUILayout.Button(s[1], opt)) quart.SetOnQuarter(2, !quart.ISQuarter(2)); GUI.color = c;
if (!quart.ISQuarter(1)) GUI.color = unused; if (GUILayout.Button(s[0], opt)) quart.SetOnQuarter(1, !quart.ISQuarter(1)); GUI.color = c;
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
if (!quart.ISQuarter(3)) GUI.color = unused; if (GUILayout.Button(s[2], opt)) quart.SetOnQuarter(3, !quart.ISQuarter(3)); GUI.color = c;
if (!quart.ISQuarter(4)) GUI.color = unused; if (GUILayout.Button(s[3], opt)) quart.SetOnQuarter(4, !quart.ISQuarter(4)); GUI.color = c;
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
}
#endif
#endregion
}
}