mmo-project/fortran/client/README.md

32 lines
1.7 KiB
Markdown
Raw Normal View History

# fortran mmo-project client
2023-10-13 22:55:14 -04:00
The client uses the same mod_dill library from the [tcp-client-server demo](https://github.com/modern-fortran/tcp-client-server)
Also the [raylib library](https://www.raylib.com/). I have generated a fortran interface for the functions neccisary for a minimal client. The module is using the new C interop interface implemented in the 2018 spec which makes it fairly easy to create a interface between a C library and Fortran.
One thing to note in here is that Fortran does not actually have unsigned values, so you have to use normal integers and use the `-fno-range-check` flag to tell the compiler that you know what you are doing. Otherwise the colors would not look correct.
For simplicity I have made it so that the login credentials are passed in through the command line instead of a GUI interface.
Fortran has the ability to use the OOP paradigm so I wanted to show that off here with the player module.
The player is able to store their own name, position, and color. There is an interface to allow the client to sync the camera and send the position to the server.
You can also see the json library shine with this implementation. It made it trivial to process the json array that was built and sent from the server.
The only other thing to note is the weird modulo chunk here:
``` fortran
time = get_time()
if (modulo(time, 1.0) .ge. 0.58_c_double) then
if (player_updated) then
players = me%move()
else
players = me%ping()
end if
end if
```
This is because there is not a good way to asyncronously send a call to the server, so I have this hack which uses the current tick time from raylib and run the update/ping function every 500 milliseconds or so.
2023-09-17 15:34:49 -04:00