VirtualFramework/Assets/Scripts/Conditions/ObjClickLongCondition.cs

146 lines
3.9 KiB
C#
Raw Normal View History

2025-02-06 15:17:08 +08:00
using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.EventSystems;
namespace QFramework
{
public class ObjClickLongCondition : ICondition
{
private static SimpleObjectPool<ObjClickLongCondition> mSimpleObjectPool =
new SimpleObjectPool<ObjClickLongCondition>(() => new ObjClickLongCondition(), null, 10);
private ObjClickLongCondition() { }
public GameObject obj = null;
string path;
string deviceName;
float time;
float curTime;
bool isDown = false;
public static ObjClickLongCondition Allocate(string path, Dictionary<string, string> datas)
{
var conditionAction = mSimpleObjectPool.Allocate();
conditionAction.ActionID = ActionKit.ID_GENERATOR++;
conditionAction.Deinited = false;
conditionAction.Reset();
conditionAction.path = path;
conditionAction.deviceName = datas.ContainsKey("deviceName") ? datas["deviceName"] : null;
if (datas.ContainsKey("time"))
{
float.TryParse(datas["time"], out conditionAction.time);
}
return conditionAction;
}
public bool Check()
{
if (obj == null)
{
if (string.IsNullOrEmpty(deviceName))
{
obj = Utility.FindObj(path);
}
else
{
obj = DeviceController.Instance.GetDeviceObj(deviceName);
if (obj == null)
{
Debug.LogError($"û<><C3BB><EFBFBD>ҵ<EFBFBD> path:{path} deviceName:{deviceName}");
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Input.GetMouseButtonDown(0))
{
OnMouseDown();
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD>
if (Input.GetMouseButtonUp(0))
{
OnMouseUp();
}
if (isDown && EventSystem.current.IsPointerOverGameObject() == false)
{
Vector3 mousePos = Input.mousePosition;
Ray ray = Camera.main.ScreenPointToRay(mousePos);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (obj == hit.collider.gameObject)
{
curTime -= Time.deltaTime;
if (curTime <= 0)
{
return true;
}
}
}
}
return false;
}
public void OnMouseDown()
{
curTime = this.time;
isDown = true;
}
public void OnMouseUp()
{
isDown = false;
}
public bool Paused { get; set; }
public bool Deinited { get; set; }
public ulong ActionID { get; set; }
public ActionStatus Status { get; set; }
public void OnStart()
{
}
public void OnExecute(float dt)
{
if (Check())
{
this.Finish();
}
}
public void OnFinish()
{
}
public void Deinit()
{
if (!Deinited)
{
Deinited = true;
obj = null;
path = null;
mSimpleObjectPool.Recycle(this);
}
}
public void Reset()
{
curTime = 0;
Paused = false;
Status = ActionStatus.NotStart;
}
}
//public static class ObjClickLongConditionExtension
//{
// public static ISequence ObjClickLongCondition(this ISequence self, string uipath)
// {
// return self.Append(QFramework.ObjClickLongCondition.Allocate(uipath));
// }
//}
}