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