using UnityEngine;
using System.Collections;
public class DiceSwipeControl : MonoBehaviour
{
// Static Instance of the Dice
public static DiceSwipeControl Instance;
#region Public Variables
// Orignal Dice
public GameObject die1;
//dice resultant number..
public int diceCount;
public int diceCount1;
//dice play view camera...
public Camera dicePlayCam;
//Can Throw Dice
public bool isDiceThrowable = true;
public GUIText gui;
public Transform diceCarrom;
#endregion
#region Private Varibles
private GameObject diceClone;
private GameObject diceClone1;
private Vector3 initPos;
private float initXpose;
private float timeRate;
// To Save Camera Postion
private Vector3 currentCampPos;
Vector3 objectPos;
internal float diceThrowInit;
#endregion
void Awake ()
{
Instance = this;
}
void Start ()
{
generateDice ();
}
void Update ()
{
if (isDiceThrowable)
{
if (Input.GetMouseButtonDown (0))
{
initPos = Input.mousePosition;
initXpose = dicePlayCam.ScreenToViewportPoint (Input.mousePosition).x;
}
Vector3 currentPos = Input.mousePosition;
currentPos.z = 25f;
Vector3 newPos = dicePlayCam.ScreenToWorldPoint (new Vector3(currentPos.x,currentPos.y,Mathf.Clamp(currentPos.y/10,5,70)));
newPos.y = Mathf.Clamp(newPos.y, -114.5f, 100);
newPos = dicePlayCam.ScreenToWorldPoint (currentPos);
if (Input.GetMouseButtonUp (0))
{
initPos = dicePlayCam.ScreenToWorldPoint (initPos);
enableTheDice ();
addForce (newPos);
isDiceThrowable = false;
StartCoroutine (getDiceCount ());
}
}
}
void addForce (Vector3 lastPos)
{
diceClone.GetComponent<Rigidbody>().AddTorque(Vector3.Cross(lastPos, initPos) * 2000, ForceMode.Impulse);
lastPos.y += 12;
diceClone.GetComponent<Rigidbody>().AddForce (((lastPos - initPos).normalized) * (Vector3.Distance (lastPos, initPos)) * 40 * diceClone.GetComponent<Rigidbody>().mass);
diceClone1.GetComponent<Rigidbody>().AddTorque(Vector3.Cross(lastPos, initPos) * 2000, ForceMode.Impulse);
lastPos.y += 12;
diceClone1.GetComponent<Rigidbody>().AddForce (((lastPos - initPos).normalized) * (Vector3.Distance (lastPos, initPos)) * 40 * diceClone1.GetComponent<Rigidbody>().mass);
}
void enableTheDice ()
{
diceClone.transform.rotation = Quaternion.Euler (Random.Range (0, 180), Random.Range (0, 180), Random.Range (0, 180));
diceThrowInit = 2;
diceClone1.transform.rotation = Quaternion.Euler (Random.Range (0, 180), Random.Range (0, 180), Random.Range (0, 180));
diceThrowInit = 2;
}
void generateDice ()
{
diceClone = Instantiate (die1, dicePlayCam.transform.position, Quaternion.Euler (Random.Range (0, 180), Random.Range (0, 180), Random.Range (0, 180))) as GameObject;
diceClone1 = Instantiate (die1, dicePlayCam.transform.position, Quaternion.Euler (Random.Range (0, 180), Random.Range (0, 180), Random.Range (0, 180))) as GameObject;
}
#region Coroutines
IEnumerator getDiceCount ()
{
//Time.timeScale = 1.3f;
currentCampPos = dicePlayCam.transform.position;
//wait fore dice to stop...
yield return new WaitForSeconds (1.0f);
while (diceClone.GetComponent<Rigidbody>().velocity.magnitude > 0.05f) {
yield return 0;
}
Time.timeScale = 0.2f;
timeRate = 0.001f;
float startTime = Time.time;
Vector3 risePos = dicePlayCam.transform.position;
Vector3 setPos = new Vector3 (diceCarrom.position.x, diceClone.transform.position.y + 25f, diceCarrom.position.z);
float speed = 0.18f;
float fracComplete = 0;
while (Vector3.Distance(dicePlayCam.transform.position,setPos)>0.5f)
{
Vector3 center = (risePos + setPos) * 0.5f;
center -= new Vector3 (0, 2, -1);
Vector3 riseRelCenter = risePos - center;
Vector3 setRelCenter = setPos - center;
if (fracComplete > 0.85f && fracComplete < 1f) {
speed += Time.deltaTime * 0.3f;
Time.timeScale -= Time.deltaTime * 4f;
}
dicePlayCam.transform.position = Vector3.Slerp (riseRelCenter, setRelCenter, fracComplete);
dicePlayCam.transform.position += center;
dicePlayCam.transform.LookAt (diceCarrom);
fracComplete = (Time.time - startTime) / speed;
yield return 0;
}
Time.timeScale = 1.0f;
Dice.Instance.GetDiceCount ();
gui.text = "Dice Count : " + Dice.Instance.GetDiceCount();
yield return new WaitForSeconds (5f);
Dice.Instance.diceCount = 0;
Dice.Instance.GetDiceCount ();
diceCount = Dice.Instance.GetDiceCount ();
gui.text = "Dice Count : " + diceCount;
diceClone.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.None;
Application.LoadLevel(0);
}
#endregion
}
using UnityEngine;
using System.Collections;
public class Dice : MonoBehaviour
{
public int diceCount;
public int diceCount1;
public static Dice Instance;
internal Vector3 initPos;
void Start ()
{
GetComponent<Rigidbody>().solverIterationCount = 250;
Instance = this;
initPos = transform.position;
}
void OnEnable()
{
initPos = transform.position;
}
public int GetDiceCount ()
{
regularDiceCount ();
return diceCount;
}
void regularDiceCount ()
{
if (Vector3.Dot (transform.forward, Vector3.up) > 0.6f)
diceCount = 5 + diceCount1;
if (Vector3.Dot (-transform.forward, Vector3.up) > 0.6f)
diceCount = 2 + diceCount1;
if (Vector3.Dot (transform.up, Vector3.up) > 0.6f)
diceCount = 3 + diceCount1;
if (Vector3.Dot (-transform.up, Vector3.up) > 0.6f)
diceCount = 4 + diceCount1;
if (Vector3.Dot (transform.right, Vector3.up) > 0.6f)
diceCount = 6 + diceCount1;
if (Vector3.Dot (-transform.right, Vector3.up) > 0.6f)
diceCount = 1 + diceCount1;
if (Vector3.Dot (transform.forward, Vector3.up) > 0.6f)
diceCount1 = 5;
if (Vector3.Dot (-transform.forward, Vector3.up) > 0.6f)
diceCount1 = 2;
if (Vector3.Dot (transform.up, Vector3.up) > 0.6f)
diceCount1 = 3;
if (Vector3.Dot (-transform.up, Vector3.up) > 0.6f)
diceCount1 = 4;
if (Vector3.Dot (transform.right, Vector3.up) > 0.6f)
diceCount1 = 6;
if (Vector3.Dot (-transform.right, Vector3.up) > 0.6f)
diceCount1 = 1;
}
}
using UnityEngine;
using System.Collections;
public class LoadStartScene : MonoBehaviour
{
public int timeToComplete = 3;
// Use this for initialization
void Start () {
//Use this to Start progress
StartCoroutine(RadialProgress(timeToComplete));
}
IEnumerator RadialProgress(float time)
{
float rate = 1 / time;
float i = 0;
while (i < 1)
{
i += Time.deltaTime * rate;
gameObject.GetComponent<Renderer>().material.SetFloat("_Cutoff", i);
yield return 0;
}
}
}
2149648–141865–Dice.cs (1.56 KB)
2149648–141866–DiceSwipeControl.cs (4.88 KB)
2149648–141867–LoadStartScene.cs (592 Bytes)