rise-and-swine/Assets/Scripts/Assembly-CSharp/Button.cs

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);
}