private void AddResponse(InputResponder responder, Gameplay.Move_Julia move) { responder.OnStopClick += (_responder, mousePos) => { //Apply the move. var results = new Gameplay.MovementResults(Board, move); Board.AddElement(false, move.Pos, Gameplay.Teams.Friendly); Board.Apply(results, Gameplay.Teams.Friendly); //Remove this movement option. int moveIndex = moveSpriteIndexAtPos[move.Pos]; SpritePool.Instance.DeallocateSprite(moveSprites[moveIndex]); moveSprites.RemoveAt(moveIndex); moveOptions.RemoveAt(moveIndex); foreach (Vector2i key in moveSpriteIndexAtPos.Keys.ToList()) { if (moveSpriteIndexAtPos[key] > moveIndex) { moveSpriteIndexAtPos[key] -= 1; } } Logic.MovesLeftThisTurn -= 1; }; }
private void Callback_PieceClicked(InputResponder piece, Vector2 worldMousePos) { //Clean up any previous moves being displayed. if (moveSprites != null) SpritePool.Instance.DeallocateSprites(moveSprites); moveOptions.Clear(); activePiece = piece.GetComponent<Gameplay.BoardElement>(); Gameplay.Move_Billy.GetMoves(Board, activePiece, moveOptions); moveSprites = SpritePool.Instance.AllocateSprites(moveOptions.Count, OptionSprite, SpriteLayer, null, "Billy Move"); for (int i = 0; i < moveSprites.Count; ++i) { moveSprites[i].transform.position = new Vector3(moveOptions[i].NewPos.x + 0.5f, moveOptions[i].NewPos.y + 0.5f, 0.0f); moveSprites[i].transform.localScale = new Vector3(SpriteScale, SpriteScale, 1.0f); moveSprites[i].color = SpriteCol; var collider = moveSprites[i].gameObject.AddComponent<BoxCollider2D>(); var responder = moveSprites[i].gameObject.AddComponent<InputResponder>(); AddResponse(responder, moveOptions[i]); } }
void UpdateButton(string buttonName, InputResponder responder) { if (Input.GetButtonDown(buttonName)) { responder.OnPress(); } if (Input.GetButton(buttonName)) { responder.TickPressed(); } }
private void AddResponse(InputResponder responder, Gameplay.Move_Billy move) { responder.OnStopClick += (_responder, mousePos) => { //Apply the move. var results = new Gameplay.MovementResults(Board, move); Board.MoveElement(false, move.Piece.Pos, move.NewPos); Board.Apply(results, Gameplay.Teams.Friendly); //Stop the piece from being movable again. activePiece.ActiveSpriteObj.GetComponent<SpriteRenderer>().color = MovedColor; Destroy(activePiece.GetComponent<InputResponder>()); SpritePool.Instance.DeallocateSprites(moveSprites); moveOptions.Clear(); Logic.MovesLeftThisTurn -= 1; }; }
void UpdateAxis(string axisName, bool inverted, ref bool tickedLastFrame, InputResponder responder) { float axis = Input.GetAxis(axisName); bool axisPastDeadzone = !inverted ? axis > AXIS_DEADZONE : axis < -AXIS_DEADZONE; if (axisPastDeadzone) { if (!tickedLastFrame) { responder.OnPress(); } responder.TickPressed(); tickedLastFrame = true; } else { tickedLastFrame = false; } }
void Update() { //Get whether a click happened. bool tapped = false; Vector2 tapPos = Vector3.zero; if (Input.GetMouseButton(0)) { tapped = true; tapPos = (Vector2)MainCam.ScreenToWorldPoint(Input.mousePosition); } else if (Input.touchCount > 0) { tapped = true; tapPos = (Vector2)MainCam.ScreenToWorldPoint((Vector3)Input.GetTouch(0).position); } //Respond to the click (or lack thereof). if (tapped) { //Continue the previous frame's click. if (IsClicking) { CurrentClickWorldPos = tapPos; //Check whether the mouse is dragging or not. if (CurrentlyClicked != null) { if (IsDragging) { CurrentlyClicked.RaiseEvent_Drag(StartClickWorldPos, CurrentClickWorldPos); } else if ((CurrentClickWorldPos - StartClickWorldPos).sqrMagnitude > (CurrentlyClicked.MinDragDistance * CurrentlyClicked.MinDragDistance)) { IsDragging = true; CurrentlyClicked.RaiseEvent_Drag(StartClickWorldPos, CurrentClickWorldPos); } } } //Start a new click. else { IsClicking = true; StartClickWorldPos = tapPos; Collider2D coll = Physics2D.OverlapPoint(tapPos); if (coll != null) { InputResponder ir = coll.GetComponent <InputResponder>(); if (ir != null) { CurrentlyClicked = ir; ir.RaiseEvent_StartClick(StartClickWorldPos); } } } } else { //Stop clicking. if (IsClicking) { IsClicking = false; if (CurrentlyClicked != null) { if (IsDragging) { IsDragging = false; CurrentlyClicked.RaiseEvent_StopDrag(StartClickWorldPos, CurrentClickWorldPos); } else { CurrentlyClicked.RaiseEvent_StopClick(StartClickWorldPos); } CurrentlyClicked = null; } } } }
public void SetSpaceResponder(InputResponder newResponder) { spaceResponder = newResponder; spaceResponder.OnAttach(); }
public void SetLeftResponder(InputResponder newResponder) { leftResponder = newResponder; leftResponder.OnAttach(); }
public void SetRightResponder(InputResponder newResponder) { rightResponder = newResponder; rightResponder.OnAttach(); }