private void UpdateState(int currentFrame, int nextFrame, Dimension2DManager.Dimension currentHorizontalDimension, Dimension2DManager.Dimension currentVerticalDimension, Dimension2DManager.Dimension nextHorizontalDimension, Dimension2DManager.Dimension nextVerticalDimension) { float[] previousPositionState = currentFrame == 0 ? null : positionHistory[currentFrame - 1]; float[] previousVelocityState = currentFrame == 0 ? null : velocityHistory[currentFrame - 1]; float[] positionState = positionHistory[currentFrame] == null ? new float[4] { previousPositionState[0], previousPositionState[1], previousPositionState[2], previousPositionState[3] } : positionHistory[currentFrame]; float[] velocityState = velocityHistory[currentFrame] == null ? new float[4] { previousVelocityState[0], previousVelocityState[1], previousVelocityState[2], previousVelocityState[3] } : velocityHistory[currentFrame]; positionState[(int)currentHorizontalDimension] = transform.position.x; positionState[(int)currentVerticalDimension] = transform.position.y; velocityState[(int)currentHorizontalDimension] = rigidbody.velocity.x; velocityState[(int)currentVerticalDimension] = rigidbody.velocity.y; positionHistory[currentFrame] = positionState; velocityHistory[currentFrame] = velocityState; if (currentFrame == nextFrame - 1) { return; } float[] nextPositionState = positionHistory[nextFrame]; float[] nextVelocityState = velocityHistory[nextFrame]; if (positionState == null || velocityState == null) // TODO: fix { gameObject.SetActive(false); return; } if (!(Achronal && (nextHorizontalDimension == Dimension2DManager.Dimension.AxisT || nextVerticalDimension == Dimension2DManager.Dimension.AxisT))) { float horizontalPosition = nextPositionState[(int)nextHorizontalDimension]; float verticalPosition = nextPositionState[(int)nextVerticalDimension]; Vector3 position = new Vector3(horizontalPosition, verticalPosition, 0.0f); transform.position = position; float horizontalVelocity = nextVelocityState[(int)nextHorizontalDimension]; float verticalVelocity = nextVelocityState[(int)nextVerticalDimension]; Vector3 velocity = new Vector3(horizontalVelocity, verticalVelocity, 0.0f); rigidbody.velocity = velocity; } }
private void OnDimensionsChanged(Dimension2DManager.Dimension currentHorizontalDimension, Dimension2DManager.Dimension currentVerticalDimension, Dimension2DManager.Dimension nextHorizontalDimension, Dimension2DManager.Dimension nextVerticalDimension) { UpdateState(Dimension2DManager.CurrentFrame, Dimension2DManager.CurrentFrame, currentHorizontalDimension, currentVerticalDimension, nextHorizontalDimension, nextVerticalDimension); }