Worked on level1.json, adding some key value pairs to define all kinds of things. Not using other levels for now. Added initializers to pawnDefinition, boardDefinition, and PawnConfiguration so complete levels can be initialized based on json.
Cleanup of viewDidLoad, now only doing things there that only need to happen once. Added func updateUIAtStartOfLevel, which prepares the UI for the beginning of a level.
Added property weArePlayer1. We'll stop using the roles (sender and receiver) and instead identify who is who using this property. Worked on proper initialization of everything and setting up the UI, a.o. by adding func updateUIAtStartOfLevel, which updates the UI for starting a level, and by properly setting up the first state. RoundState now implements copying protocol. Added functions positionOfPawn and rotationOfPawn to RoundState, making it easier for the player vc to ask the state about the pawn of a certain player.
Added new function updateWhichMoveAndRotateButtonsAreVisible. Previously we did this inside of the function centerViewWithAllMoveAndRotateButtonsAboveField, but now it's a separate function which we also call whenever the position of the other player's pawn may have changed.
The goal configuration is now visible. RoundState has a new function goalConfigurationShouldBeShown which returns whether the goal config should be shown for  a certain player. The player vc uses this function in its updateWhetherGoalConfigurationIsShown function. The BoardView can now show the goal config for both pawns. This is done by its fieldViews. To show a goal config, FieldViews adds a PawnView. PawnView now has a style, which is either Normal or Goal Configuration. The reasons to do it like this: PawnView knows how to draw the right shape; FieldView knows how a pawn should be placed on/inside itself.
Started reorganizing. Two important changes: 1. Use RoundActionType to differentiate action types. 2. Don't use the RoundRoles. Instead let RoundState differentiate between player1 and player2 and let the player vc only map the local or other player to player1 or player2.
Now using separate action methods for different kinds of actions. Cleaned up rotating pawns.
Mainly worked on finishing a round, players messing up, indicating whether a pawn has been placed correctly, etc. Also cleaned up, e.g. getting rid of everything that had to with roles.
Fixed rotation of pawns in the beginning. Rotation now also shown in the goal configuration.
The levelButtons can now be used for finishing, retrying, continuing to the next level. Cleaned up.
Worked on proceeding to the next level.
Now taking into account that pawns can be placed correctly even if their rotation isn't the same as the rotation defined in the goal config. E.g. because the shape is a circle or a square.
Pawns now know whether they can rotate. A circle pawn cannot rotate. Rotate buttons are only shown for pawns that can rotate.
The move item now works. Still work to do related to update animations.
See item now working, but not yet with proper animations.
Worked on items. Added labels for the numbers of items left. Available items now defined in and read from the json files. The numbers of items are not yet updated as a result of items being used.
Now completely keeping track of how often items can be used. Once 0 uses left, the item button isn't available anymore and the button and label become less opaque.
Started on the give item.