2023-09-07 22:15:24 +00:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Collections.ObjectModel;
|
2023-04-09 14:35:38 +00:00
|
|
|
using UnityEngine;
|
2023-09-07 22:15:24 +00:00
|
|
|
using UnityEngine.EventSystems;
|
2023-04-09 14:35:38 +00:00
|
|
|
using UnityEngine.UI;
|
|
|
|
|
|
|
|
public class TargetUIController : MonoBehaviour
|
|
|
|
{
|
|
|
|
// Controller to control the UI of the target,
|
|
|
|
// select target type, select prefeb to set or sth.
|
2023-06-30 09:30:12 +00:00
|
|
|
public GameObject targetControllerObj;
|
2023-09-07 22:15:24 +00:00
|
|
|
|
2023-06-30 09:30:12 +00:00
|
|
|
public GameObject mouseSelectorObj;
|
|
|
|
public GameObject environmentUIObj;
|
2023-04-09 14:35:38 +00:00
|
|
|
|
2023-09-07 22:15:24 +00:00
|
|
|
public float levelButtonHeight = 30;
|
|
|
|
|
|
|
|
[Header("PrimaryButton")]
|
|
|
|
public Button clearGameButton;
|
|
|
|
public Button setEnemyButton;
|
2023-04-09 14:35:38 +00:00
|
|
|
public Button setAttackButton;
|
|
|
|
public Button setGotoButton;
|
|
|
|
public Button setFreeButton;
|
|
|
|
public Button setStayButton;
|
2023-09-07 22:15:24 +00:00
|
|
|
public int primaryButtonNumber = 6;
|
|
|
|
|
|
|
|
[Header("LevelPanel")]
|
|
|
|
public GameObject gotoLevelPanel;
|
|
|
|
|
|
|
|
public GameObject attackLevelPanel;
|
|
|
|
public float levelPanelAnimeTime = 0.2f;
|
2023-04-09 14:35:38 +00:00
|
|
|
|
|
|
|
private MouseInMap mouseInMapCon;
|
2023-06-29 06:18:10 +00:00
|
|
|
private EnvironmentUIControl envUICon;
|
|
|
|
private TargetController targetCon;
|
2023-09-07 22:15:24 +00:00
|
|
|
private MessageBoxController messageBoxController;
|
2023-09-09 12:04:57 +00:00
|
|
|
private ButtonActivateColorChanger buttonColorChanger;
|
2023-09-07 22:15:24 +00:00
|
|
|
|
|
|
|
public enum PrimaryButtonType
|
|
|
|
{ Goto, Attack, Free }
|
|
|
|
|
|
|
|
public delegate void PointerInOutUIEventDelegate(Button button, GameObject panel, BaseEventData eventData);
|
2023-04-09 14:35:38 +00:00
|
|
|
|
|
|
|
private void Start()
|
|
|
|
{
|
2023-06-30 09:30:12 +00:00
|
|
|
targetCon = targetControllerObj.GetComponent<TargetController>();
|
|
|
|
mouseInMapCon = mouseSelectorObj.GetComponent<MouseInMap>();
|
|
|
|
envUICon = environmentUIObj.GetComponent<EnvironmentUIControl>();
|
2023-09-07 22:15:24 +00:00
|
|
|
messageBoxController = GetComponent<MessageBoxController>();
|
2023-09-09 12:04:57 +00:00
|
|
|
buttonColorChanger = GetComponent<ButtonActivateColorChanger>();
|
2023-09-07 22:15:24 +00:00
|
|
|
|
|
|
|
gotoLevelPanel.GetComponent<LevelPanel>().InitLevelPanel(
|
|
|
|
targetCon.gotoLevelNum,
|
|
|
|
setGotoButton,
|
|
|
|
levelButtonHeight);
|
|
|
|
attackLevelPanel.GetComponent<LevelPanel>().InitLevelPanel(
|
|
|
|
targetCon.attackLevelNum,
|
|
|
|
setAttackButton,
|
|
|
|
levelButtonHeight);
|
|
|
|
AddLevelButtonToColorChanger(gotoLevelPanel);
|
|
|
|
AddLevelButtonToColorChanger(attackLevelPanel);
|
|
|
|
AddPointerEnterButtonTrigger(setGotoButton, gotoLevelPanel, PointerEnterButtonAction);
|
|
|
|
AddPointerEnterButtonTrigger(setAttackButton, attackLevelPanel, PointerEnterButtonAction);
|
|
|
|
AddPointerExitButtonTrigger(setGotoButton, gotoLevelPanel, PointerExitButtonAction);
|
|
|
|
AddPointerExitButtonTrigger(setAttackButton, attackLevelPanel, PointerExitButtonAction);
|
|
|
|
AddPointerExitLevelPanelTrigger(setGotoButton, gotoLevelPanel, PointerExitLevelPanelAction);
|
|
|
|
AddPointerExitLevelPanelTrigger(setAttackButton, attackLevelPanel, PointerExitLevelPanelAction);
|
|
|
|
buttonColorChanger.InitializeAllButtonColor();
|
2023-07-28 10:44:02 +00:00
|
|
|
ClearGamePressed();
|
2023-04-09 14:35:38 +00:00
|
|
|
}
|
|
|
|
|
2023-09-07 22:15:24 +00:00
|
|
|
public void LevelButtonPressed(PrimaryButtonType primaryButtonType, int level = 0)
|
|
|
|
{
|
|
|
|
switch (primaryButtonType)
|
|
|
|
{
|
|
|
|
case PrimaryButtonType.Goto:
|
|
|
|
SetGotoPressed(level);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PrimaryButtonType.Attack:
|
|
|
|
SetAttackPressed(level);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
messageBoxController.PushMessage(new List<string> { "TargetUIController.LevelButtonPressed:", "Button Type Wrong, not level included button" },
|
|
|
|
new List<string> { messageBoxController.errorColor });
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Clear Game Button Pressed, delete all enemies and targets
|
2023-06-30 09:30:12 +00:00
|
|
|
public void ClearGamePressed()
|
2023-04-09 14:35:38 +00:00
|
|
|
{
|
|
|
|
// Clear all enemies and targets. set gamemode to Stay mode
|
2023-06-30 09:30:12 +00:00
|
|
|
targetCon.StayModeChange();
|
2023-08-22 17:58:50 +00:00
|
|
|
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.Default);
|
2023-04-09 14:35:38 +00:00
|
|
|
// disable setStayButton and enable other buttons
|
2023-09-07 22:15:24 +00:00
|
|
|
buttonColorChanger.ChangeInteractableColor(clearGameButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setEnemyButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setAttackButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setGotoButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setFreeButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setStayButton, false);
|
2023-06-30 09:30:12 +00:00
|
|
|
targetCon.PlayInitialize();
|
2023-04-09 14:35:38 +00:00
|
|
|
}
|
2023-06-30 09:30:12 +00:00
|
|
|
|
2023-09-07 22:15:24 +00:00
|
|
|
// Set Free Button Pressed, change Target mode to free mode
|
|
|
|
public void SetFreePressed()
|
|
|
|
{
|
|
|
|
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.Default);
|
|
|
|
targetCon.FreeModeChange();
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setStayButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setAttackButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setGotoButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setFreeButton, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set Stay Button Pressed, change Target mode to stay mode
|
|
|
|
public void SetStayPressed()
|
|
|
|
{
|
|
|
|
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.Default);
|
|
|
|
targetCon.StayModeChange();
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setStayButton, false);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setAttackButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setGotoButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setFreeButton, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set Enemy Button Pressed, change mouse mode to EnemySetMode
|
2023-06-30 09:30:12 +00:00
|
|
|
public void SetEnemyPressed()
|
2023-04-09 14:35:38 +00:00
|
|
|
{
|
2023-08-22 17:58:50 +00:00
|
|
|
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.EnemySet);
|
2023-04-09 14:35:38 +00:00
|
|
|
}
|
2023-06-30 09:30:12 +00:00
|
|
|
|
2023-09-07 22:15:24 +00:00
|
|
|
// Set Goto Button Pressed, change mouse mode to GotoSetMode
|
|
|
|
private void SetGotoPressed(int level)
|
2023-04-09 14:35:38 +00:00
|
|
|
{
|
2023-09-07 22:15:24 +00:00
|
|
|
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.GotoSet, level);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(clearGameButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setEnemyButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setStayButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setAttackButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setGotoButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setFreeButton, true);
|
2023-04-09 14:35:38 +00:00
|
|
|
}
|
2023-06-30 09:30:12 +00:00
|
|
|
|
2023-09-07 22:15:24 +00:00
|
|
|
// Set Attack Button Pressed, change mouse mode to AttackSetMode
|
|
|
|
private void SetAttackPressed(int level)
|
2023-04-09 14:35:38 +00:00
|
|
|
{
|
2023-09-07 22:15:24 +00:00
|
|
|
mouseInMapCon.ChangeMouseMode(MouseInMap.MouseMode.AttackSet, level);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(clearGameButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setEnemyButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setStayButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setAttackButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setGotoButton, true);
|
|
|
|
buttonColorChanger.ChangeInteractableColor(setFreeButton, true);
|
2023-04-09 14:35:38 +00:00
|
|
|
}
|
2023-06-30 09:30:12 +00:00
|
|
|
|
2023-09-07 22:15:24 +00:00
|
|
|
/// <summary>
|
|
|
|
/// Adds level buttons from a level panel to the color changer, making them got interactable color.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="levelPanel">The level panel object containing the level buttons.</param>
|
|
|
|
private void AddLevelButtonToColorChanger(GameObject levelPanel)
|
2023-04-09 14:35:38 +00:00
|
|
|
{
|
2023-09-07 22:15:24 +00:00
|
|
|
foreach(Button btn in levelPanel.GetComponent<LevelPanel>().LevelButtonList)
|
|
|
|
{
|
|
|
|
buttonColorChanger.AddButtonToColorChangerButtonList(btn,true);
|
|
|
|
}
|
2023-04-09 14:35:38 +00:00
|
|
|
}
|
|
|
|
|
2023-09-07 22:15:24 +00:00
|
|
|
/// <summary>
|
|
|
|
/// sign up pointer enter event for button
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="triggerButton">target button</param>
|
|
|
|
/// <param name="panel">target panel</param>
|
|
|
|
/// <param name="inAction">enter event trigered action</param>
|
|
|
|
private void AddPointerEnterButtonTrigger(Button triggerButton, GameObject panel, PointerInOutUIEventDelegate inAction)
|
2023-04-09 14:35:38 +00:00
|
|
|
{
|
2023-09-07 22:15:24 +00:00
|
|
|
EventTrigger.Entry inEntry = new EventTrigger.Entry();
|
|
|
|
inEntry.eventID = EventTriggerType.PointerEnter;
|
|
|
|
inEntry.callback.AddListener((eventData) => inAction(triggerButton, panel, eventData));
|
|
|
|
triggerButton.GetComponent<EventTrigger>().triggers.Add(inEntry);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// sign up pointer exit event for button
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="triggerButton">target button</param>
|
|
|
|
/// <param name="panel">target panel</param>
|
|
|
|
/// <param name="inAction">exit event trigered action</param>
|
|
|
|
private void AddPointerExitButtonTrigger(Button triggerButton, GameObject panel, PointerInOutUIEventDelegate outAction)
|
|
|
|
{
|
|
|
|
EventTrigger.Entry outEntry = new EventTrigger.Entry();
|
|
|
|
outEntry.eventID = EventTriggerType.PointerExit;
|
|
|
|
outEntry.callback.AddListener((eventData) => outAction(triggerButton, panel, eventData));
|
|
|
|
triggerButton.GetComponent<EventTrigger>().triggers.Add(outEntry);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// sign up pointer exit event for panel
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="triggerButton">target button</param>
|
|
|
|
/// <param name="panel">target panel</param>
|
|
|
|
/// <param name="inAction">exit event trigered action</param>
|
|
|
|
private void AddPointerExitLevelPanelTrigger(Button triggerButton, GameObject panel, PointerInOutUIEventDelegate outAction)
|
|
|
|
{
|
|
|
|
EventTrigger.Entry entry = new EventTrigger.Entry();
|
|
|
|
entry.eventID = EventTriggerType.PointerExit;
|
|
|
|
entry.callback.AddListener((eventData) => outAction(triggerButton, panel, eventData));
|
|
|
|
panel.GetComponent<EventTrigger>().triggers.Add(entry);
|
2023-04-09 14:35:38 +00:00
|
|
|
}
|
2023-08-22 17:58:50 +00:00
|
|
|
|
2023-09-07 22:15:24 +00:00
|
|
|
/// <summary>
|
|
|
|
/// pointer enter event action for button
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="button">target button</param>
|
|
|
|
/// <param name="panel">target panel</param>
|
|
|
|
/// <param name="baseEventData">EventTrigger Parameter</param>
|
|
|
|
private void PointerEnterButtonAction(Button button, GameObject panel, BaseEventData baseEventData)
|
2023-08-22 17:58:50 +00:00
|
|
|
{
|
2023-09-07 22:15:24 +00:00
|
|
|
panel.GetComponent<LevelPanel>().ExpandLevelPanel(levelPanelAnimeTime);
|
|
|
|
}
|
2023-08-22 17:58:50 +00:00
|
|
|
|
2023-09-07 22:15:24 +00:00
|
|
|
/// <summary>
|
|
|
|
/// pointer exit event action for button
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="button">target button</param>
|
|
|
|
/// <param name="panel">target panel</param>
|
|
|
|
/// <param name="baseEventData">EventTrigger Parameter</param>
|
|
|
|
private void PointerExitButtonAction(Button button, GameObject panel, BaseEventData baseEventData)
|
|
|
|
{
|
|
|
|
bool pointerInPanel = RectTransformUtility.RectangleContainsScreenPoint(panel.GetComponent<RectTransform>(), Input.mousePosition);
|
|
|
|
if (!pointerInPanel)
|
|
|
|
{
|
|
|
|
panel.GetComponent<LevelPanel>().FoldLevelPanel(levelPanelAnimeTime);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// pointer enter event action for level panel
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="button">target button</param>
|
|
|
|
/// <param name="panel">target panel</param>
|
|
|
|
/// <param name="baseEventData">EventTrigger Parameter</param>
|
|
|
|
private void PointerExitLevelPanelAction(Button button, GameObject panel, BaseEventData baseEventData)
|
|
|
|
{
|
|
|
|
bool pointerInButton = RectTransformUtility.RectangleContainsScreenPoint(button.GetComponent<RectTransform>(), Input.mousePosition);
|
|
|
|
if (!pointerInButton)
|
|
|
|
{
|
|
|
|
panel.GetComponent<LevelPanel>().FoldLevelPanel(levelPanelAnimeTime);
|
|
|
|
}
|
2023-08-22 17:58:50 +00:00
|
|
|
}
|
2023-06-30 09:30:12 +00:00
|
|
|
}
|