/// <summary> /// Release pointer event /// </summary> /// <param name="trigger">Source trigger object</param> /// <param name="data">Data of the event</param> public void OnUIPointerUp(EventTrigger trigger, PointerEventData data) { // Is the command pad? if (trigger.gameObject == cmdPad) { // Just remove press graphics ColorUI(false, -1); return; } else { // Movement pad uiMovePadReticleTargetPos = uiMovePadReticleCenter; ColorUI(true, -1); // Check for possible slide events if (previousZone == SelectionZone.Center && (Time.time - previousZoneLeftTime) < slideTimeThereshold) { switch (currentZone) { case SelectionZone.Up: player.MoveSlide(0); break; case SelectionZone.Left: player.MoveSlide(1); break; case SelectionZone.Down: player.MoveSlide(2); break; case SelectionZone.Right: player.MoveSlide(3); break; } } if (uiMovePadCenterCollider.OverlapPoint(data.position)) { player.StopSlide(); } selectedDir = -1; previousZone = SelectionZone.None; previousZoneLeftTime = 0; } }
private void HandleSelection(MouseEventArgs e) { if (ActiveSelection && !DraggingSelection) { Point CursorPoint = GetCursorLocationRelative(e); if (SelectionZone.Contains(CursorPoint) || MovingSelection) { MoveSelection(e); } else { StopSelecting(); DragSelectedZone(e); } } else { if (ActiveSelection) { StopSelecting(); } DragSelectedZone(e); } }
// Use this for initialization void Start() { this.player = GetComponent <Player>(); this.selectionZone = GetComponent <SelectionZone>(); }
public void OnUIPointerDown(EventTrigger trigger, PointerEventData data) { if (trigger.gameObject == cmdPad) { // Command Pad, execute attacks if (uiCmdPadUpCollider.OverlapPoint(data.position)) { OnButtonPress(0); ColorUI(false, 0); return; } if (uiCmdPadLeftCollider.OverlapPoint(data.position)) { OnButtonPress(1); ColorUI(false, 1); return; } if (uiCmdPadDownCollider.OverlapPoint(data.position)) { OnButtonPress(2); ColorUI(false, 2); return; } if (uiCmdPadRightCollider.OverlapPoint(data.position)) { OnButtonPress(3); ColorUI(false, 3); return; } } else { // Movement pad // Check over which selection zone/button the pointer was pressed uiMovePadReticleTargetPos = data.position; SelectionZone sz = SelectionZone.None; if (uiMovePadCenterCollider.OverlapPoint(data.position)) { sz = SelectionZone.Center; } else if (uiMovePadUpCollider.OverlapPoint(data.position)) { sz = SelectionZone.Up; } else if (uiMovePadLeftCollider.OverlapPoint(data.position)) { sz = SelectionZone.Left; } else if (uiMovePadDownCollider.OverlapPoint(data.position)) { sz = SelectionZone.Down; } else if (uiMovePadRightCollider.OverlapPoint(data.position)) { sz = SelectionZone.Right; } // Colorize button ColorUI(true, (int)sz); // Execute dodge if the button tapped twice within thereshold switch (sz) { case SelectionZone.Up: selectedDir = 0; if (latestTapDirection == selectedDir) { if (Time.time - latestTapTime < tapTimeThereshold) { player.MoveDodge(selectedDir); } } latestTapDirection = selectedDir; latestTapTime = Time.time; break; case SelectionZone.Left: selectedDir = 1; if (latestTapDirection == selectedDir) { if (Time.time - latestTapTime < tapTimeThereshold) { player.MoveDodge(selectedDir); } } latestTapDirection = selectedDir; latestTapTime = Time.time; break; case SelectionZone.Down: selectedDir = 2; if (latestTapDirection == selectedDir) { if (Time.time - latestTapTime < tapTimeThereshold) { player.MoveDodge(selectedDir); } } latestTapDirection = selectedDir; latestTapTime = Time.time; break; case SelectionZone.Right: selectedDir = 3; if (latestTapDirection == selectedDir) { if (Time.time - latestTapTime < tapTimeThereshold) { player.MoveDodge(selectedDir); } } latestTapDirection = selectedDir; latestTapTime = Time.time; break; } // Update current movement zone currentZone = sz; } }
/// <summary> /// Check Drag event data /// </summary> public void OnUIDrag(EventTrigger trigger, PointerEventData data) { // Check which pad was draged if (trigger.gameObject == cmdPad) { // Command pad, show pads pressed if (uiCmdPadUpCollider.OverlapPoint(data.position)) { ColorUI(false, 0); return; } if (uiCmdPadLeftCollider.OverlapPoint(data.position)) { ColorUI(false, 1); return; } if (uiCmdPadDownCollider.OverlapPoint(data.position)) { ColorUI(false, 2); return; } if (uiCmdPadRightCollider.OverlapPoint(data.position)) { ColorUI(false, 3); return; } } else { // Movement pad // Update reticle Vector2 relDist = data.position - (Vector2)uiMovePadReticleCenter; relDist = relDist.normalized * (Mathf.Min(relDist.magnitude, 100 * uiMovePadReticle.canvas.scaleFactor)); uiMovePadReticleTargetPos = relDist + (Vector2)uiMovePadReticleCenter; // Check which selection zone / button the cursor is in SelectionZone sz = SelectionZone.None; if (uiMovePadCenterCollider.OverlapPoint(data.position)) { sz = SelectionZone.Center; } else if (uiMovePadUpCollider.OverlapPoint(data.position)) { sz = SelectionZone.Up; } else if (uiMovePadLeftCollider.OverlapPoint(data.position)) { sz = SelectionZone.Left; } else if (uiMovePadDownCollider.OverlapPoint(data.position)) { sz = SelectionZone.Down; } else if (uiMovePadRightCollider.OverlapPoint(data.position)) { sz = SelectionZone.Right; } // Update currently selection direction switch (sz) { case SelectionZone.Up: selectedDir = 0; ColorUI(true, 0); break; case SelectionZone.Left: selectedDir = 1; ColorUI(true, 1); break; case SelectionZone.Down: selectedDir = 2; ColorUI(true, 2); break; case SelectionZone.Right: selectedDir = 3; ColorUI(true, 3); break; case SelectionZone.Center: selectedDir = -1; ColorUI(true, 4); break; } // Update previous selection zone if (sz != currentZone && sz != SelectionZone.None) { previousZone = currentZone; currentZone = sz; previousZoneLeftTime = Time.time; } } }