void OnSceneDragableMouseDown(ISceneDragable currentSceneDragable) { currentSceneDragable.SceneDragableMesh.enabled = false; distance = Vector3.Distance(cam.transform.position, currentSceneDragable.SceneDragableTransform.position); initialPosition = currentSceneDragable.SceneDragableTransform.position; OnSceneDragableActions += OnSceneDragableMouseDrag; }
void DropSceneDragableToDropPosition(ISceneDragable currentSceneDragable) { OnDropActions?.Invoke(); OnDropingMoveActions += ResetMeshColliderAtEndDrop; StartCoroutine(MoveDropeable(currentSceneDragable)); SceneDragableFeature.OnDrop -= DropSceneDragableToDropPosition; }
IEnumerator MoveDropeable(ISceneDragable currentSceneDragable) { float sMoothing = 10.0f; while (Vector3.Distance(currentSceneDragable.SceneDragableTransform.position, DropPosition) > 0.05f) { currentSceneDragable.SceneDragableTransform.position = Vector3.Lerp(currentSceneDragable.SceneDragableTransform.position, DropPosition, sMoothing * Time.deltaTime); yield return(null); } currentSceneDragable.SceneDragableTransform.position = DropPosition; OnDropingMoveActions?.Invoke(currentSceneDragable); }
void ResetMeshColliderAtEndDrop(ISceneDragable currentSceneDragable) { currentSceneDragable.SceneDragableMesh.enabled = true; OnDropingMoveActions -= ResetMeshColliderAtEndDrop; }
void SceneDragableResetPosition(ISceneDragable currentSceneDragable) { currentSceneDragable.SceneDragableTransform.position = initialPosition; currentSceneDragable.SceneDragableMesh.enabled = true; OnSceneDragableActions -= SceneDragableResetPosition; }
void OnSceneDragableMouseUp(ISceneDragable currentSceneDragable) { OnDrop?.Invoke(currentSceneDragable); OnSceneDragableDragEnd?.Invoke(); OnSceneDragableActions -= OnSceneDragableMouseUp; }
void OnSceneDragableMouseDrag(ISceneDragable currentSceneDragable) { ray = cam.ScreenPointToRay(ValidMousePosition); currentSceneDragable.SceneDragableTransform.position = ray.GetPoint(distance); }
private void OnMouseDrag() { CurrentDragable = this; }