Simple Portal - Alexander Miller
I wanted to make a simple version of the popular game Portal. I made a 100x50x100 (x,y,z) room with 4 walls, a ceiling, and a floor.

Controls:
- Mouse: look around with mouse movement, standard FPS camera rotation
- 'W': move forward
- 'A': strafe left
- 'S': strafe right
- 'D': move backward
- 'N': shoot blue portal / portal 0
- 'M': shoot orange / portal 1
- spacebar: jump a small amount
- 'R': reset camera to point at Red wall and have a horizontal angle
- 'P': toggle portal mode (show blue and orange portals vs show holes in the wall)

Best Features:
- In portal wall hole mode, if the portals are on RED and BLUE walls (opposite), it creates a repeating room phenomenom (only shows 1 additional room through). If the portals are offset, then the room is also offset so that when you look through BLUE portal, it looks like you're looking out of ORANGE portal, etc.
- If the portals are on the same wall, it creates a mirrored (along the x axis) room so that it looks like you are looking behind you (kind of like an offset mirror).
- In this game you can shoot portals at walls, floor, and ceiling. The portal 'sticks' to the wall and if both portals are up, you can walk into one and be transported to the other one, either maintaining your entry angle or flipping you depending on which way the entry and exit portals face.

Features:
- If you fall out of a portal that is high up a wall or on the ceiling, you will fall to the floor, sometimes resulting in looping falling if a portal is also on the ground below you.
- A 3D model of a Halo gun I found online moves with the camera and always stays in the same place even relative to the location. (Looking up and down gives the camera a slight tilt, but I kept it because it gave the scene a more fluid feeling).
- A black cube is a fixed distance in front of the camera and acts as crosshairs for shooting the portal, which get the top of the portal placed on the wall where the viewer meets it.

Extra Notes:
I really wanted to get the 'portal extra room' phenomenom working for every scenario, but ended up running out of time to implement them all.
- Missing: Adjacent Wall extra rooms (only have opposite and same wall rooms)
- Missing: top and floor rooms
- Missing: left, right, floor, ceiling HOLES in walls
- Multiroom effect only works on the ground level, the room only has a horizontal translation, not a vertical currently.
- Bug: a bug exists currently if both portals are on the walls. If the player steps on one they infinitely jump back and forward between the two portals. Effectively stopping the game since the player can no longer move.

Future To Do List:
- Make portal entry smoother, no jumping forward or changing angles
- If player is falling into blue but shoots orange on a wall, they will shoot out of orange with a horizontal velocity equal to the entry vertical downward velocity
- Air resistance for falling sideways
- More multiroom effects (adjacent, vertical offset, floor, ceiling, etc)
- Structures and platforms. Initially I wanted to implement this, but I did not decide how I wanted portals to interact with them (be able to shoot a portal onto a middle wall, or just go through it). It also added a lot more complexity to my world collision detection.
- Add textures! Make it look nicer than the simple color world.
- Improve the lighting, at the moment I'm using a slightly modified Blinn-Phong lighting system which I ultimately was not satisfied with.
- probably stop the gun from tiling when looking up or down.
- animate a projectile when shooting a portal
- objective: collect items and get to an exit area
- enemy AI that chases or shoots you
- Particle effects for in the portal holes in the walls.