//TODO: allow owner of hook to destroy it if he hooks a platform, synchornize this somehow.
	void ShootHookLocal(float originX, float originY, float targetX, float targetY){
		shootOrigin = new Vector3(originX, originY, transform.position.z);
		GameObject go  = (GameObject)Instantiate(hook, shootOrigin, transform.rotation);
		currentState = HookState.GoingOut;
		currentHook = go.GetComponent<HookHit>();
		if(!OFFLINE)
			currentHook.SetColor(PlayerServerInfo.Instance.GetPlayerOptions(networkController.theOwner).style);
		else 
		{
			currentHook.SetColor(CharacterStyle.BLUE);
		}
		currentHook.networkController = networkController;
		currentHook.shooter = gameObject;
		//hooktimer = 1.5f;
		//Calculate angle from player to mouse and rotate hook that way.
		Vector3 target =  new Vector3(targetX, targetY, transform.position.z);
		Vector3 difference = target - shootOrigin;
		Vector2 direction = new Vector2(difference.x, difference.y).normalized;
		targetDistanceSqrd = difference.sqrMagnitude;
		//mousePos = transform.position + 100f * direction;
		
		targetPosition = target;
		float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
		go.transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
		go.rigidbody2D.velocity = direction * speedRatio;
		
	}
	private void DestroyHook(){
		slowedTime = 0f;
		transform.rigidbody2D.gravityScale = 1;
		currentState = HookState.None;
		controller2D.FreeFromSnare();
		if(currentHook != null){
			if(currentHook.affectedPlayerC2D != null){
				currentHook.affectedPlayerC2D.UnHooked();
			}
			Destroy(currentHook.gameObject);
			currentHook = null;
		}
	}