提交
This commit is contained in:
@@ -0,0 +1,221 @@
|
||||
using System;
|
||||
using ScrewsMaster;
|
||||
using DG.Tweening;
|
||||
using DG.Tweening.Core;
|
||||
using DG.Tweening.Plugins.Options;
|
||||
using Roy.ObjectPool;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
using UnityEngine.UI;
|
||||
using ColorUtility = UnityEngine.ColorUtility;
|
||||
using Sequence = DG.Tweening.Sequence;
|
||||
|
||||
namespace SGame
|
||||
{
|
||||
public class ScrewsLogic : ObjectPoolItem
|
||||
{
|
||||
public PanelLogic panelLogic;
|
||||
|
||||
public PolygonCollider2D polygonCollider2D;
|
||||
private HingeJoint2D _hingeJoint2D;
|
||||
private Button _button;
|
||||
|
||||
public Text testText;
|
||||
|
||||
private CanvasGroup _canvasGroup;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// panelLogic = GetComponentInParent<PanelLogic>();
|
||||
polygonCollider2D = GetComponentInChildren<PolygonCollider2D>();
|
||||
_hingeJoint2D = GetComponentInChildren<HingeJoint2D>(); ;
|
||||
_button = GetComponentInChildren<Button>();
|
||||
|
||||
_canvasGroup = gameObject.AddComponent<CanvasGroup>();
|
||||
|
||||
// if (panelLogic != null)
|
||||
// {
|
||||
// _hingeJoint2D.connectedBody = panelLogic.GetComponent<Rigidbody2D>();
|
||||
// _hingeJoint2D.enabled = true;//初始化时都启用一下物理组件,有的预制体里面没启用
|
||||
// }
|
||||
}
|
||||
void Start()
|
||||
{
|
||||
_button.onClick.AddListener(OnClick);
|
||||
}
|
||||
|
||||
#region 新版代码(测试)
|
||||
|
||||
public int screwsType;
|
||||
|
||||
public Image head;
|
||||
public Image thread;
|
||||
public float threadHeightMax = 59f;
|
||||
public float threadHeightMin = 30f;
|
||||
// public Vector2 threadDefault = 32f;
|
||||
|
||||
public void Init(int t)
|
||||
{
|
||||
screwsType = t;
|
||||
|
||||
SetSprite(ShowScrews.Instance.GetScrewsSprite(screwsType));
|
||||
|
||||
thread.color = ColorUtility.TryParseHtmlString(ShowScrews.ScrewColors[screwsType], out Color _color)
|
||||
? _color
|
||||
: Color.white;
|
||||
|
||||
panelLogic = GetComponentInParent<PanelLogic>();
|
||||
if (panelLogic != null)
|
||||
{
|
||||
_hingeJoint2D.connectedBody = panelLogic.GetComponent<Rigidbody2D>();
|
||||
_hingeJoint2D.enabled = true;//初始化时都启用一下物理组件,有的预制体里面没启用
|
||||
}
|
||||
|
||||
_button.enabled = true;
|
||||
|
||||
transform.localScale = Vector3.one;
|
||||
}
|
||||
#if !JarvisRelease
|
||||
private void Update()
|
||||
{
|
||||
if (testText.gameObject.activeSelf)
|
||||
{
|
||||
var point = RectTransformUtility.WorldToScreenPoint(ShowScrews.Instance.myCamera, transform.position);
|
||||
testText.text = point.ToString();
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
private void SetSprite(Sprite sprite)
|
||||
{
|
||||
head.sprite = sprite;
|
||||
}
|
||||
|
||||
public void OnClick()
|
||||
{
|
||||
ShowScrews.Instance.is_resurgence = false;
|
||||
if (ShowScrews.Instance.gameOver) return;//游戏结束
|
||||
|
||||
var panelLayerDic = ShowScrews.Instance.PanelLayerDic;
|
||||
for (int i = panelLogic.GetLayer() + 1; i <= 100; i++)
|
||||
{
|
||||
if (panelLayerDic.TryGetValue(i, out var layer))
|
||||
{
|
||||
if (ShowScrews.Instance.CheckOverlapWithExistingObjects(polygonCollider2D,
|
||||
layer))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AudioManager.Instance.PlayDynamicEffect(AudioConst.UIButtonDefault);//播放音效
|
||||
|
||||
var boxTypeLogic = ShowScrews.Instance.GetBoxTypeLogic(screwsType);
|
||||
if (boxTypeLogic != null)
|
||||
{
|
||||
if (boxTypeLogic.CanUseKong(this))
|
||||
{
|
||||
UnlinkFromPanel();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var kongLogic = ShowScrews.Instance.GetKongLogic();
|
||||
if (kongLogic != null)
|
||||
{
|
||||
kongLogic.SetCurScrews(this);
|
||||
FlyToTarget(kongLogic.transform, () =>
|
||||
{
|
||||
if (ShowScrews.Instance.GetIdleHoleCount() <= 0)
|
||||
{
|
||||
ShowScrews.Instance.OnGameFailed();//游戏失败,等待飞螺丝动画后执行失败逻辑
|
||||
}
|
||||
});
|
||||
|
||||
if (ShowScrews.Instance.GetIdleHoleCount() <= 0)
|
||||
{
|
||||
ShowScrews.Instance.gameOver = true;//游戏结束,设置结束标记
|
||||
}
|
||||
UnlinkFromPanel();
|
||||
return;
|
||||
}
|
||||
|
||||
ShowScrews.Instance.OnGameFailed();//游戏失败
|
||||
}
|
||||
|
||||
public Sequence FlyToTarget(Transform target, UnityAction action = null)
|
||||
{
|
||||
if (panelLogic != null)
|
||||
{
|
||||
panelLogic.RemoveActiveScrewCount(this);
|
||||
panelLogic = null;
|
||||
}
|
||||
|
||||
transform.rotation = Quaternion.Euler(Vector3.zero);
|
||||
transform.SetParent(ShowScrews.Instance.flightControlLayer);
|
||||
|
||||
|
||||
var sequence = DOTween.Sequence();
|
||||
sequence.Append(head.rectTransform.DOLocalRotate(new Vector3(0, 0, 360), 0.25f, RotateMode.FastBeyond360));
|
||||
sequence.Join(thread.rectTransform.DOSizeDelta(new Vector2(thread.rectTransform.sizeDelta.x, threadHeightMax), 0.25f));
|
||||
// sequence.AppendCallback(() =>
|
||||
// {
|
||||
// transform.SetParent(target);
|
||||
// });
|
||||
// sequence.AppendInterval(0.05f);
|
||||
// sequence.Append(transform.DOLocalMove(Vector3.zero, 0.5f).SetEase(Ease.OutBack));
|
||||
sequence.Append(transform.DOMove(target.position, 0.3f).SetEase(Ease.OutBack));
|
||||
sequence.AppendCallback(() =>
|
||||
{
|
||||
transform.SetParent(target);
|
||||
transform.localPosition = Vector3.zero;
|
||||
});
|
||||
sequence.AppendInterval(0.05f);
|
||||
sequence.AppendCallback(() => { AudioManager.Instance.PlayDynamicEffect(AudioConst.FlyToCacheKong); });
|
||||
sequence.Append(head.rectTransform.DOLocalRotate(new Vector3(0, 0, -360), 0.25f, RotateMode.FastBeyond360));
|
||||
sequence.Join(thread.rectTransform.DOSizeDelta(new Vector2(thread.rectTransform.sizeDelta.x, threadHeightMin), 0.25f));
|
||||
sequence.AppendCallback(() =>
|
||||
{
|
||||
action?.Invoke();
|
||||
});
|
||||
|
||||
return sequence;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 禁用触控与物理组件
|
||||
/// </summary>
|
||||
private void UnlinkFromPanel()
|
||||
{
|
||||
_button.enabled = false;
|
||||
_hingeJoint2D.enabled = false;
|
||||
}
|
||||
|
||||
public TweenerCore<float, float, FloatOptions> ShowAnim()
|
||||
{
|
||||
return _canvasGroup.DOFade(1f, 0.5f);
|
||||
}
|
||||
|
||||
public void SetAlpha(float alpha)
|
||||
{
|
||||
_canvasGroup.alpha = alpha;
|
||||
}
|
||||
|
||||
public override void OnRecycle()
|
||||
{
|
||||
base.OnRecycle();
|
||||
|
||||
panelLogic = null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user