Files
AliceBall/Assets/_Alice/Scripts/Item/PuzzleItem.cs
2025-07-23 18:47:59 +08:00

118 lines
3.0 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using EPOOutline;
using UnityEngine;
using UnityEngine.XR;
public class PuzzleItem : MonoBehaviour
{
public int id;
public Outlinable[] outliner;
public bool IsFly => _isFly;
private Vector3 _startPos;
private Vector3 _startEulerAngles;
public bool isSelect;
private bool _isFly;
public void Start()
{
_startPos=transform.position;
_startEulerAngles = transform.eulerAngles;
isSelect = false;
_isFly = false;
HideOutline();
}
private void Update()
{
if(_isFly)
return;
// foreach (var item in outliner)
// {
// item.enabled = isSelect;
// }
if(GameManager.Ins.taskManager.tasks[3].isEnd)
return;
if (isSelect)
{
var rayLine = GameManager.Ins.playerRightHand.ray.GetComponent<LineRenderer>();
var followZ=transform.position.z;
transform.position=new Vector3(rayLine.GetPosition(1).x,rayLine.GetPosition(1).y,followZ);
}
}
public void StartFly()
{
StartCoroutine(FlyStartPos());
}
public void StartFlyTarget(Vector3 endPos,Vector3 endEulerAngles)
{
StartCoroutine(FlyEndPos(endPos, endEulerAngles));
}
IEnumerator FlyEndPos(Vector3 endPos,Vector3 endEulerAngles)
{
_isFly = true;
bool isToStartPos=false;
while (!isToStartPos)
{
transform.position=Vector3.Lerp(transform.position,endPos,Time.deltaTime);
transform.eulerAngles=Vector3.Lerp(transform.eulerAngles,endEulerAngles,Time.deltaTime);
yield return null;
if (Vector3.Distance(transform.position, endPos) < 0.1f)
{
transform.position=endPos;
transform.eulerAngles=endEulerAngles;
isToStartPos=true;
}
}
_isFly = false;
isSelect = false;
}
IEnumerator FlyStartPos()
{
_isFly = true;
bool isToStartPos=false;
while (!isToStartPos)
{
transform.position=Vector3.Lerp(transform.position,_startPos,Time.deltaTime);
transform.eulerAngles=Vector3.Lerp(transform.eulerAngles,_startEulerAngles,Time.deltaTime);
yield return null;
if (Vector3.Distance(transform.position, _startPos) < 0.1f)
{
transform.position=_startPos;
transform.eulerAngles=_startEulerAngles;
isToStartPos=true;
}
}
GetComponent<BoxCollider>().enabled = true;
_isFly = false;
isSelect = false;
}
public void ShowOutline()
{
foreach (var item in outliner)
{
item.enabled = true;
}
}
public void HideOutline()
{
if(isSelect)
return;
foreach (var item in outliner)
{
item.enabled = false;
}
}
}