Implemented a lot of polypong (3+ player pong), including handling of
polygon fields with arbitrary numbers of sides, paddle and ball
collision with angled boundaries, collision between paddles and the
ball (sans phasing correction), and collision between paddles.
Remaining work includes handling the special case of two players,
accepting the option of walls (which the ball can bounce off) between
players, updating the server and client netcode, and allowing the user
to select the number of sides for a game, and keybindings.
Implemented new netcode, which only sends information that has
changed. Also fixed the client not displaying the first boundary line.
Changed Game so it just uses a single 1x1 white texture for both the
ball and paddles, which is then scaled and rotated. This will make
things easier when the number of players isn't hard-coded, since scale
may change between games. Also enabled anti-aliasing.
Added support for multiple walls per player, with only the walls
directly behind a player acting as goals, and the others acting act as
walls for the ball to bounce off.
Changed how fonts are accessed (also resumed use of kenpixel.tff),
added GUI for game setup, switched from having two textures for each
button to using SDL_SetTextureAlphaMod, updated TitleScreen to have a
random number of players and walls per player in the demo game, added
functionality to Texture and utility.cpp, and moved difficulty strings
from DifficultyMenu (soon to be phased out anyway) to AIInput.
Set default color arguments for Texture::fromText, added walls per
player configuration to SetupState, cleaned up SetupState a
little (though it could still use some work...) and fixed a bug in getShortKeyName.
Improved ball spawning code, so that the ball always heads towards a
player's goal (rather than a wall) at a random angle.
Reimplemented easy mode, updated the title screen (removing the now
defunct singleplayer button and adding a soon-to-be-implemented
classic button), and removed the also-defunct DifficultyMenu.
Added classic mode, fixed a bug in SharedState relating to wall
bouncing, removed some legacy variables from SharedState (oops),
and removed a remaining DifficultyMenu include from
TitleScreen (double oops).
Reimplemented medium AI difficulty.
Fixed a bunch of bugs in paddle-boundary and paddle-paddle collision resolution.
Made it so, in polypong (non-classic mode), dashed lines originate at
each vertex and meet at the center of the polygon, rather than there
being a single dashed line down the middle. Also, fixed two bugs in SetupState.
Reimplemented hard AI.
Added ball spinning and window resizing.