239 lines
4.5 KiB
C#
239 lines
4.5 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using UnityEngine;
|
|
|
|
[RequireComponent(typeof(BoxCollider))]
|
|
public class Button : Widget
|
|
{
|
|
public EventSender EventToSend
|
|
{
|
|
get
|
|
{
|
|
return this.eventToSend;
|
|
}
|
|
}
|
|
|
|
public MethodCaller MethodToCall
|
|
{
|
|
get
|
|
{
|
|
return this.methodToCall;
|
|
}
|
|
}
|
|
|
|
public void Lock(bool lockState)
|
|
{
|
|
this.m_locked = lockState;
|
|
}
|
|
|
|
public void SetInputDelegate(InputDelegate handler)
|
|
{
|
|
this.m_inputDelegate = (InputDelegate)Delegate.Combine(this.m_inputDelegate, handler);
|
|
}
|
|
|
|
public void RemoveInputDelegate(InputDelegate handler)
|
|
{
|
|
this.m_inputDelegate = (InputDelegate)Delegate.Remove(this.m_inputDelegate, handler);
|
|
}
|
|
|
|
public void SetActivateOnRelease(bool activate)
|
|
{
|
|
this.activateOnRelease = activate;
|
|
}
|
|
|
|
private void Awake()
|
|
{
|
|
this.originalScale = base.transform.localScale;
|
|
this.BindTarget();
|
|
this.methodToCall.PrepareCall();
|
|
this.eventToSend.PrepareSend();
|
|
this.ButtonAwake();
|
|
if (this.activateOnHold)
|
|
{
|
|
this.activateOnRelease = false;
|
|
}
|
|
if (this.activateOnPress)
|
|
{
|
|
this.activateOnRelease = false;
|
|
}
|
|
if (this.soundEffect == null && !this.disableSound)
|
|
{
|
|
this.soundEffect = Singleton<GuiManager>.Instance.DefaultButtonAudio;
|
|
}
|
|
}
|
|
|
|
protected virtual void ButtonAwake()
|
|
{
|
|
}
|
|
|
|
private void BindTarget()
|
|
{
|
|
}
|
|
|
|
protected override void OnActivate()
|
|
{
|
|
if (this.eventToSend.HasEvent())
|
|
{
|
|
this.eventToSend.Send();
|
|
}
|
|
if (this.methodToCall.TargetComponent != null)
|
|
{
|
|
this.methodToCall.Call();
|
|
}
|
|
}
|
|
|
|
protected override void OnInput(InputEvent input)
|
|
{
|
|
AudioManager instance = Singleton<AudioManager>.Instance;
|
|
if (input.type == InputEvent.EventType.Press)
|
|
{
|
|
this.mouseOver = true;
|
|
this.down = true;
|
|
if (this.activateOnPress)
|
|
{
|
|
if (this.animate && this.soundEffect)
|
|
{
|
|
instance.Play2dEffect(this.soundEffect);
|
|
}
|
|
if (!this.m_locked)
|
|
{
|
|
base.Activate();
|
|
}
|
|
}
|
|
}
|
|
else if (input.type == InputEvent.EventType.Release)
|
|
{
|
|
this.down = false;
|
|
if (this.activateOnRelease)
|
|
{
|
|
if (this.animate && this.soundEffect)
|
|
{
|
|
instance.Play2dEffect(this.soundEffect);
|
|
}
|
|
if (!this.m_locked)
|
|
{
|
|
base.Activate();
|
|
}
|
|
}
|
|
if (this.activateOnPress)
|
|
{
|
|
base.Release();
|
|
}
|
|
}
|
|
else if (input.type == InputEvent.EventType.MouseEnter)
|
|
{
|
|
this.mouseOver = true;
|
|
}
|
|
else if (input.type == InputEvent.EventType.MouseReturn)
|
|
{
|
|
this.down = true;
|
|
if (this.activateOnPress)
|
|
{
|
|
base.Activate();
|
|
}
|
|
}
|
|
else if (input.type == InputEvent.EventType.MouseLeave)
|
|
{
|
|
if (this.activateOnPress && this.down)
|
|
{
|
|
base.Release();
|
|
}
|
|
this.mouseOver = false;
|
|
this.down = false;
|
|
}
|
|
if (this.m_inputDelegate != null)
|
|
{
|
|
this.m_inputDelegate(input);
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (this.activateOnHold && this.down && !this.m_locked)
|
|
{
|
|
base.Activate();
|
|
}
|
|
if (this.animate)
|
|
{
|
|
bool flag = !this.down && this.mouseOver;
|
|
if (Singleton<InputManager>.Instance.UsesTouchInput)
|
|
{
|
|
flag = (this.down || this.mouseOver);
|
|
}
|
|
float num = base.transform.localScale.x / this.originalScale.x;
|
|
if (flag && num < this.mouseOverScale)
|
|
{
|
|
num = Mathf.Min(num + GameTime.RealTimeDelta * 7f, this.mouseOverScale);
|
|
base.transform.localScale = num * this.originalScale;
|
|
}
|
|
else if (!flag && num > 1f)
|
|
{
|
|
num = Mathf.Max(num - GameTime.RealTimeDelta * 7f, 1f);
|
|
base.transform.localScale = num * this.originalScale;
|
|
}
|
|
}
|
|
this.ButtonUpdate();
|
|
}
|
|
|
|
protected virtual void ButtonUpdate()
|
|
{
|
|
}
|
|
|
|
[SerializeField]
|
|
private MethodCaller methodToCall;
|
|
|
|
[SerializeField]
|
|
private GameObject messageTargetObject;
|
|
|
|
[SerializeField]
|
|
private string targetComponent;
|
|
|
|
[SerializeField]
|
|
private string methodToInvoke;
|
|
|
|
[SerializeField]
|
|
private string messageParameter;
|
|
|
|
[SerializeField]
|
|
private EventSender eventToSend = new EventSender();
|
|
|
|
[SerializeField]
|
|
private bool animate = true;
|
|
|
|
[SerializeField]
|
|
private float mouseOverScale = 1.2f;
|
|
|
|
[SerializeField]
|
|
private bool activateOnHold;
|
|
|
|
[SerializeField]
|
|
private bool activateOnPress;
|
|
|
|
[SerializeField]
|
|
protected AudioSource soundEffect;
|
|
|
|
[SerializeField]
|
|
private bool disableSound;
|
|
|
|
private Component component;
|
|
|
|
private MethodInfo methodInfo;
|
|
|
|
private object[] parameterArray;
|
|
|
|
private bool mouseOver;
|
|
|
|
private bool down;
|
|
|
|
private const float HoverSoundDelay = 0.15f;
|
|
|
|
private Vector3 originalScale;
|
|
|
|
private InputDelegate m_inputDelegate;
|
|
|
|
private bool activateOnRelease = true;
|
|
|
|
private bool m_locked;
|
|
|
|
public delegate void InputDelegate(InputEvent input);
|
|
}
|