77 lines
1.7 KiB
C#
77 lines
1.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class MultipleRoller : MonoBehaviour
|
|
{
|
|
public Action<float> DelRolling;
|
|
|
|
[SerializeField] RectTransform mRctNeedle;
|
|
|
|
[SerializeField] Vector2 mRollArea;
|
|
[SerializeField] Vector2 m3XArea;
|
|
[SerializeField] Vector2 m2XArea;
|
|
[SerializeField] Vector2 m1_5XArea;
|
|
[SerializeField] float mRollSpeed = 600;
|
|
|
|
public bool IsRolling = false;
|
|
|
|
private float mMultiple = 1;
|
|
private int mRollDir = 1;
|
|
private Vector3 mNextPos;
|
|
|
|
private void Update()
|
|
{
|
|
if (IsRolling)
|
|
{
|
|
mNextPos = mRctNeedle.localPosition + (Vector3.right * mRollDir * mRollSpeed * Time.deltaTime);
|
|
if (mNextPos.x >= mRollArea.y)
|
|
{
|
|
mNextPos.x = mRollArea.y;
|
|
mRollDir = -1;
|
|
}
|
|
else if (mNextPos.x <= mRollArea.x)
|
|
{
|
|
mNextPos.x = mRollArea.x;
|
|
mRollDir = 1;
|
|
}
|
|
|
|
mRctNeedle.localPosition = mNextPos;
|
|
SetMultiple();
|
|
}
|
|
}
|
|
|
|
private void SetMultiple()
|
|
{
|
|
float tX = Mathf.Abs(mRctNeedle.localPosition.x);
|
|
if (IsInArea(tX, m3XArea))
|
|
{
|
|
mMultiple = 3;
|
|
}
|
|
else if (IsInArea(tX, m2XArea))
|
|
{
|
|
mMultiple = 2;
|
|
}
|
|
else if (IsInArea(tX, m1_5XArea))
|
|
{
|
|
mMultiple = 1.5f;
|
|
}
|
|
else
|
|
{
|
|
mMultiple = 1;
|
|
}
|
|
|
|
DelRolling?.Invoke(mMultiple);
|
|
}
|
|
|
|
private bool IsInArea(float pVal, Vector2 pArea)//val and area is positive
|
|
{
|
|
if (pVal >= pArea.x && pVal < pArea.y)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
} |