public void ApplyForce() { Vector2 force = Utillites.SpringForce(bodyA.position, bodyB.position, restLength, k); float modifier = (bodyA.type == Body.eType.Static || bodyB.type == Body.eType.Static) ? 1.0f : 0.5f; bodyA.AddForce(-force * modifier); bodyB.AddForce(force * modifier); bodyA.AddForce(-force); bodyB.AddForce(force); }
void Update() { Body body = Utillites.GetBodyFromPosition(Input.mousePosition); if (body != null || selectedBody != null) { if (selectedBody) { body = selectedBody; } spriteRenderer.enabled = true; transform.position = body.position; transform.rotation = Quaternion.AngleAxis(Time.time * 90, Vector3.forward); transform.localScale = Vector2.one * body.shape.size * 1.2f; } else { spriteRenderer.enabled = false; } if (selectedBody) { if (selectedBody.type == Body.eType.Static) { Vector2 position = Camera.main.ScreenToWorldPoint(Input.mousePosition); selectedBody.position = position; } if (selectedBody.type == Body.eType.Kinematic || selectedBody.type == Body.eType.Dynamic) { Vector2 position = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 force = Utillites.SpringForce(position, selectedBody.position, 0, 5); selectedBody.AddForce(force, Body.eForceMode.Velocity); } } }