// Use this for initialization void Awake() { setYAxisLevel = transform.position.y; interactions = gameObject.GetComponent<InteractiveObject> (); status = critterStates.free; forthrow = GetComponent<Rigidbody>(); }
// Update is called once per frame void Update() { if (gManager == null) { gManager=GameManager.Instance();} if (status == critterStates.free) { transform.position += Vector3.Normalize(walkDirection)*walkspeed*Time.deltaTime; } //critter moves on its own and gets grabbe if (status == critterStates.free && interactions.getIsGrabbed()) { status=critterStates.grabbed; lastposition=transform.position; originalGrabPosition= lastposition; howfaralong=0; } //grabbed and is being held if (status==critterStates.grabbed&& interactions.getIsGrabbed()) { howfaralong+=normalizeThrowPositionRate*Time.deltaTime; lastposition = transform.position; } //grabbed and let go (thrown) if(!interactions.getIsGrabbed()&&status==critterStates.grabbed) { status=critterStates.thrown; interactions.isDraggable=false; forthrow.isKinematic=false; forthrow.useGravity=true; Debug.Log ((transform.position-lastposition)/(Time.fixedDeltaTime)+ " "+ howfaralong); forthrow.AddForce(Vector3.Normalize((interactions.getCursorPosition()-lastposition)/(Time.fixedDeltaTime))*Mathf.Pow(Vector3.Magnitude((interactions.getCursorPosition()-lastposition)/(Time.fixedDeltaTime)), exponentialThrowScaling)); } //thrown and fell back to its original level. if (status == critterStates.thrown) { if(transform.position.y <=setYAxisLevel) { forthrow.isKinematic=true; forthrow.useGravity=false; transform.position=new Vector3(transform.position.x, setYAxisLevel, transform.position.z); status=critterStates.free; forthrow.velocity=Vector3.zero; interactions.isDraggable=true; } } }