using Spine.Unity;
using System;
using System.Collections;
using System.Collections.Generic;
using TouchScript;
using UnityEngine;
using static Spine.AnimationState;
public class TouchMgr : MonoBehaviour
{
#region public variables
public GameObject SelectedColor;
#endregion
#region private variables
private SkeletonAnimation skeletonAnimation;
#endregion
#region private methods
void OnEnable()
{
if (TouchManager.Instance != null)
{
TouchManager.Instance.TouchesBegan += TouchesBeganHandler;
TouchManager.Instance.TouchesMoved += TouchesMovedHandler;
TouchManager.Instance.TouchesEnded += TouchesEndedHandler;
}
}
void OnDisable()
{
if (null != TouchManager.Instance)
{
TouchManager.Instance.TouchesBegan -= TouchesBeganHandler;
TouchManager.Instance.TouchesMoved -= TouchesMovedHandler;
TouchManager.Instance.TouchesEnded -= TouchesEndedHandler;
}
}
private void TouchesEndedHandler(object sender, TouchEventArgs e)
{
//Destroy(SelectedColor);
DeletSelectColor();
foreach (var item in e.Touches)
{
var ray = Camera.main.ViewportPointToRay(Camera.main.ScreenToViewportPoint(item.Position));
RaycastHit hit;
if (Physics.Raycast(ray, out hit) && hit.collider != null)
{
print(hit.transform.gameObject.name);
DrawColor(hit);
}
print("ended");
}
}
private void TouchesMovedHandler(object sender, TouchEventArgs e)
{
print("Moved");
Vector3 tempPos = Camera.main.ScreenToWorldPoint(e.Touches[0].Position);
if (SelectedColor)
{
SelectedColor.transform.position = new Vector3(tempPos.x, tempPos.y, tempPos.z + 3);
}
}
private bool IsStep(RaycastHit hit)
{
if (hit.transform.gameObject.name == "Spine_1_QuYa" || hit.transform.gameObject.name == "Spine_2_ZhanMu" || hit.transform.gameObject.name == "Spine_3_XiaoDu" ||
hit.transform.gameObject.name == "Spine_4_PiKai" || hit.transform.gameObject.name == "Spine_5_ChaZhi" || hit.transform.gameObject.name == "Spine_6_KunBang" ||
hit.transform.gameObject.name == "Spine_7_ZaiPei")
{
return true;
}
return false;
}
private void TouchesBeganHandler(object sender, TouchEventArgs e)
{
Vector3 tempPos = Camera.main.ScreenToWorldPoint(e.Touches[0].Position);
EffectMgr.Instance.EffectPlay(Main.Instance.hitEffect, tempPos, 2);
foreach (var item in e.Touches)
{
var ray = Camera.main.ViewportPointToRay(Camera.main.ScreenToViewportPoint(item.Position));
RaycastHit hit;
if (Physics.Raycast(ray, out hit) && hit.collider != null)
{
print(hit.transform.gameObject.name);
RaySelectColor(hit);
RaySelectTools(hit);
//if (hit.transform.childCount > 0)
//{
if (hit.transform.GetComponent<SkeletonAnimation>())
{
SkeletonAnimation skeletonAnimation1;
if (IsStep(hit))
{
Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[0], 0.3f);
}
else
{
//Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[1]);
}
skeletonAnimation1 = hit.transform.GetComponent<SkeletonAnimation>();
TrackEntryDelegate ac = delegate
{
skeletonAnimation1.state.SetAnimation(0, "idle", true).Complete += null;
};
StartCoroutine(TimerMgr.Instance.DelayInvoke(() =>
{
//skeletonAnimation.loop = false;
//skeletonAnimation.state.SetAnimation(0, "hit", false).Complete += Finished;
skeletonAnimation1.state.SetAnimation(0, "hit", false).Complete += ac;
//Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[0]);
}, 0));
}
else if (hit.transform.gameObject.name == "UI_ShangChuan")
{
Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[2], 0.3f);
}
else
{
Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[1],0.3f);
}
// if (hit.transform.GetChild(0).GetComponent<ParticleSystem>())
// {
// EffectMgr.Instance.EffectPlay(Main.Instance.starEffect, tempPos, 5);
// Main.Instance.GetComponent<AudioSource>().PlayOneShot(Main.Instance.audioClips[1]);
// }
//}
//}
print("Began");
}
}
}
/// <summary>
/// 射线选择颜色
/// </summary>
/// <param name="hit"></param>
private void RaySelectColor(RaycastHit hit)
{
if (hit.transform.gameObject.name == "UI_Hong_a")
{
//SelectedColor = new GameObject();
SelectColor.Instance.SelectOrange();
GameObject go = Instantiate(SelectColor.Instance.orange);
go.tag = "Color";
Destroy(go.GetComponent<BoxCollider>());
SelectedColor = go;
SelectedColor.transform.parent = SelectColor.Instance.parent.transform;
}
if (hit.transform.gameObject.name == "UI_Fen_b")
{
//SelectedColor = new GameObject();
SelectColor.Instance.SelectPink();
GameObject go = Instantiate(SelectColor.Instance.pink);
go.tag = "Color";
Destroy(go.GetComponent<BoxCollider>());
SelectedColor = go;
SelectedColor.transform.parent = SelectColor.Instance.parent.transform;
}
if (hit.transform.gameObject.name == "UI_Huang_c")
{
//SelectedColor = new GameObject();
SelectColor.Instance.SelectYellow();
GameObject go = Instantiate(SelectColor.Instance.yellow);
go.tag = "Color";
Destroy(go.GetComponent<BoxCollider>());
SelectedColor = go;
SelectedColor.transform.parent = SelectColor.Instance.parent.transform;
}
}
/// <summary>
/// 删除选择的颜色
/// </summary>
private void DeletSelectColor()
{
GameObject[] go = GameObject.FindGameObjectsWithTag("Color");
foreach (GameObject item in go)
{
Destroy(item);
}
}
/// <summary>
/// 选择其他工具:退色,上传
/// </summary>
/// <param name="hit"></param>
private void RaySelectTools(RaycastHit hit)
{
if (hit.transform.gameObject.name == "UI_CheXiao")
{
SelectColor.Instance.ColorRecall();
}
if (hit.transform.gameObject.name == "UI_ShangChuan")
{
SelectColor.Instance.InstantiatOnePeony();
SelectColor.Instance.ChooesePeony(0);
SelectColor.Instance.ColorRecall();
}
}
/// <summary>
/// 上色
/// </summary>
private void DrawColor(RaycastHit hit)
{
if (hit.transform.gameObject.name == "Apatel_1")
{
SelectColor.Instance.DrawApatel_1();
}
if (hit.transform.gameObject.name == "Apatel_2")
{
SelectColor.Instance.DrawApatel_2();
}
if (hit.transform.gameObject.name == "Apatel_3")
{
SelectColor.Instance.DrawApatel_3();
}
if (hit.transform.gameObject.name == "Bpatel_1")
{
SelectColor.Instance.DrawBpatel_1();
}
if (hit.transform.gameObject.name == "Bpatel_2")
{
SelectColor.Instance.DrawBpatel_2();
}
if (hit.transform.gameObject.name == "Bpatel_3")
{
SelectColor.Instance.DrawBpatel_3();
}
if (hit.transform.gameObject.name == "Cpatel_1")
{
SelectColor.Instance.DrawCpatel_1();
}
if (hit.transform.gameObject.name == "Cpatel_2")
{
SelectColor.Instance.DrawCpatel_2();
}
if (hit.transform.gameObject.name == "Cpatel_3")
{
SelectColor.Instance.DrawCpatel_3();
}
}
private void Finished(Spine.TrackEntry trackEntry)//,SkeletonAnimation sa)
{
skeletonAnimation.state.SetAnimation(0, "idle", true).Complete += null;
//sa.state.SetAnimation(0, "idle", true).Complete += null;
}
#endregion
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TimerMgr : Singleton<TimerMgr>
{
#region member variables
#endregion
#region member methods
public void AddTime(ref float timer, float timeKeep, Action action)
{
timer += Time.deltaTime;
if (timer > timeKeep)
{
action();
timer = 0;
}
}
public IEnumerator DelayInvoke(Action action, float delaySeconds)
{
yield return new WaitForSeconds(delaySeconds);
action();
}
#endregion
}