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; | |||
|  |     } | |||
|  | } |