// Records observed movement of the Player to the Map public void recordAction(GameObjectState prevState, GameObjectState currState) { if (prevState == null || currState == null) { return; } double[] prevVoxels = prevState.getVoxelStateVals(); double[] currVoxels = prevState.getVoxelStateVals(); PlayerActionState prevActionState = getActionState(prevVoxels); PlayerActionState currActionState = getActionState(currVoxels); Vector3 rHandPos = currState.rHandPos - prevState.rHandPos; Vector3 rHandVel = currState.rHandVel - prevState.rHandVel; Vector3 paddlePos = currState.paddlePos - prevState.paddlePos; Vector3 paddleVel = currState.paddleVel - prevState.paddleVel; GameObjectState stateChange = new GameObjectState(rHandPos, rHandVel, paddlePos, paddleVel, currState.targetPos, currState.targetVel, currState.deltaTime); prevActionState.addAction(currVoxels, stateChange); }