void SetNextActionMode(MoveMentMode mode) { //Debug.Log("--------" + mode); if (NextActionAddIndex == 0) { ResetBufferIndex(); } MovementBuffer[NextActionAddIndex++] = new MovementQueueEntry(mode); }
public void NextAction() { if (MovementBuffer [nextActionIndex] == null) { if (_isTail && !addBodyToEnd) { NextActionAddIndex = 0; } } else { MovementQueueEntry entry = MovementBuffer [nextActionIndex]; var next = entry.Mode; Vector3?transPosition = entry.Position; Vector3 thisPosition = this.transform.position; if (transPosition == null) { transPosition = thisPosition; entry.Position = thisPosition; } if (thisPosition == transPosition.Value) { this.transform.position = transPosition.Value; nextActionIndex++; switch (next) { case MoveMentMode.Right: { this._rigidbody.velocity = new Vector2(1f * SpeedMutiplier, 0.0f); LastMode = next; break; } case MoveMentMode.Left: { this._rigidbody.velocity = new Vector2(-1f * SpeedMutiplier, 0.0f); LastMode = next; break; } case MoveMentMode.Up: { this._rigidbody.velocity = new Vector2(0.0f, 1f * SpeedMutiplier); LastMode = next; break; } case MoveMentMode.Down: { this._rigidbody.velocity = new Vector2(0.0f, -1f * SpeedMutiplier); LastMode = next; break; } case MoveMentMode.RightBorder: { this.transform.position = new Vector3(MainCam.ViewportToWorldPoint(new Vector3(1f, 0f, 0f)).x, thisPosition.y, 0.0f); break; } case MoveMentMode.LeftBorder: { this.transform.position = new Vector3(MainCam.ViewportToWorldPoint(new Vector3(0f, 0f, 0f)).x, thisPosition.y, 0.0f); break; } case MoveMentMode.UpBorder: { this.transform.position = new Vector3(thisPosition.x, (MainCam.ViewportToWorldPoint(new Vector3(0f, 1f, 0f)).y)); break; } case MoveMentMode.DownBorder: { this.transform.position = new Vector3(thisPosition.x, (MainCam.ViewportToWorldPoint(new Vector3(0f, 0f, 0f)).y)); break; } } } else if (_isTail) { //Debug.Log (MovementBuffer [nextActionIndex].Position + "" + thisPosition + this.gameObject.ToString ()); } } if (addBodyToEnd) { lock (MovementBuffer) { //safety measure Time.timeScale = 0f; AddBodyProcess(); addBodyToEnd = false; Time.timeScale = 1f; } } }