private void Update() { if (!_isActive) { return; } if (grid == null || grid.Value == null) { return; } if (uiTilemap == null) { return; } // todo(chris) remove nasty hack for "is paused" if (Time.timeScale < float.Epsilon) { return; } var worldPoint = _camera.ScreenToWorldPoint(Input.mousePosition); var node = new Grid.Grid.Node(); if (grid.Value.TryGetNodeAtWorldPosition(worldPoint, ref node)) { if (_node?.Equals(node) != true) { _node = node; OnNewNode(node); } } }
private IEnumerator CoMove(Unit.Unit unit, Grid.Grid.Node destination, float speed, bool twoWayCollisions, Transform toMove) { Vector2 endPoint = destination.WorldPosition; var startNode = unit.Occupant.CurrentNode; if (startNode == null) { yield break; } var lastNode = startNode.Value; var startPoint = (Vector2)toMove.position; var start = Time.time; var distance = (endPoint - startPoint).magnitude; var duration = distance / speed; var end = start + duration; _collider2D = null; onStartMove.Invoke(); while (Time.time < end && _collider2D == null) { var t = (Time.time - start) / duration; var x = Tween.Lerp(startPoint.x, endPoint.x, t); var y = Tween.Lerp(startPoint.y, endPoint.y, t); toMove.position = new Vector3(x, y, toMove.position.z); if (moveToLastNodeOnCollision) { var node = new Grid.Grid.Node(); if (!unit.Occupant.Grid.TryGetNodeAtWorldPosition(toMove.position, ref node)) { toMove.position = lastNode.WorldPosition; yield break; } if (!node.Equals(lastNode) && !node.Equals(destination)) { if (Vector2.Distance(toMove.position, node.WorldPosition) < .4f) { lastNode = node; } } } yield return(null); } OnStopMove.Invoke(); if (_collider2D == null && _myCollider != null) { var cached = _myCollider.enabled; _myCollider.enabled = false; _collider2D = Physics2D.OverlapCircle(toMove.position, .3f, layers); _myCollider.enabled = cached; } if (_collider2D == null) { toMove.position = new Vector3(endPoint.x, endPoint.y, toMove.position.z); } else { yield return(StartCoroutine(OnCollision(unit, startNode.Value, lastNode, speed, twoWayCollisions, toMove))); } }