Add README

master
John Montagu, the 4th Earl of Sandvich 2026-03-01 23:39:47 -08:00
parent 98087e3642
commit 6c0673febe
Signed by: sandvich
GPG Key ID: 9A39BE37E602B22D
1 changed files with 31 additions and 18 deletions

View File

@ -9,11 +9,11 @@ cd cs381
git submodule update --init --recursive
```
Navigate to the `as3` directory, create a build directory, and run CMake to
Navigate to the `as4` directory, create a build directory, and run CMake to
generate the build files:
```sh
cd as3
cd as4
mkdir -p build
cd build
cmake ..
@ -25,34 +25,47 @@ Compile the code using `make`:
make
```
This should create an executable named `as3` in the `build` directory. You can
This should create an executable named `as4` in the `build` directory. You can
run the executable with the following command:
```sh
./as3
./as4
```
# Instructions on how to use the program
Hold W and S to accelerate the penguin forward and backward. Use A and D to
change heading direction. This allows you to steer the penguin around the
Hold W and S to accelerate the selected entity forward and backward. Use A and
D to change heading direction. This allows you to steer the entity around the
environment.
Use the arrow keys to change the camera's rotation (pitch and yaw) with respect
to the penguin, allowing you to look around while the penguin moves.
Use TAB to switch between entities. The currently selected entity will
be drawn with a bounding box.
When the eagle is selected, press Q and Z to change the pitch.
# Readme Question
`dt` is delta time, which is the time elapsed between each frame, which can be
found by taking the current time and subtracting the time from the previous
frame. Raylib provides a function `GetFrameTime()` that returns the time
elapsed since the last frame, which can be used to calculate `dt`. By using
`dt`, it ensures that physics calculations are independent of frame rate, since
otherwise the velocity would be in terms of units per frame rather than units
per second. By multiplying the velocity by `dt`, it converts the velocity to
units per second, allowing for consistent movement regardless of the frame
rate.
The entity selection system works by when TAB is pressed (key down only on one
frame), the program increments the index of the currently selected entity.
Selection wraps around to the first entity when it exceeds the number of
entities in the game. Movement keys only apply to the selected entity, which is
determined by the selected index. When drawing, the selected index is compared
to the index of each entity, and if they match, a bounding box is drawn around
the entity to indicate that it is selected.
Both monolithic and ad-hoc approaches to entity management are fast to setup
since they require the least amount of code/boilerplate to get something
working. However, monolithic entities are easier to scale, since in ad-hoc, you
have to write the entire state and behavior of the entity (its variables,
methods, etc) for each entity that exists. Ad-hoc is faster to work with only
when managing few entities with very different behavior.
For this particular assignment, the monolithic approach is more suitable since
most of the entities share similar behavior (change velocity) and state
(position, speed, heading). This however still became more difficult to manage
when adding the eagle that had an additional pitch variable and flying
behavior.
# Extra Credit
The camera moves with the penguin and can be rotated around the penguin using the arrow keys.
The eagle can move in 3D space with an additional DOF compared to the penguins.