Skip to content
This repository has been archived by the owner on Jul 28, 2022. It is now read-only.
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: Sleitnick/AeroGameFramework
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 1.2.6
Choose a base ref
...
head repository: Sleitnick/AeroGameFramework
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Loading
Showing with 22,053 additions and 4,068 deletions.
  1. +18 −0 .github/workflows/deploy_docs.yaml
  2. +24 −0 .github/workflows/lint.yaml
  3. +6 −0 .gitignore
  4. +89 −13 CHANGELOG.md
  5. +20 −0 DOCS_README.md
  6. +1 −1 LICENSE
  7. +34 −294 README.md
  8. +57 −51 build_filelist.py
  9. +39 −0 default.project.json
  10. +0 −159 doc/ClientController.md
  11. +0 −26 doc/ExecutionModel.md
  12. +0 −16 doc/README.md
  13. +0 −185 doc/ServerService.md
  14. +0 −7 doc/Structure.md
  15. +50 −0 docs.sh
  16. +279 −0 docs/controllers.md
  17. +84 −0 docs/execution_model.md
  18. BIN docs/img/logo_32.png
  19. BIN docs/img/logo_64.png
  20. +64 −0 docs/index.md
  21. +83 −0 docs/install.md
  22. +133 −0 docs/module_docs/client_controllers/fade.md
  23. +1 −0 docs/module_docs/client_controllers/task_scheduler.md
  24. +76 −0 docs/module_docs/client_controllers/user_input.md
  25. +176 −0 docs/module_docs/client_controllers/user_inputs/gamepad.md
  26. +73 −0 docs/module_docs/client_controllers/user_inputs/keyboard.md
  27. +195 −0 docs/module_docs/client_controllers/user_inputs/mobile.md
  28. +162 −0 docs/module_docs/client_controllers/user_inputs/mouse.md
  29. +127 −0 docs/module_docs/client_modules/camera_shaker.md
  30. +144 −0 docs/module_docs/client_modules/pid.md
  31. +94 −0 docs/module_docs/client_modules/smooth.md
  32. +80 −0 docs/module_docs/client_modules/tween.md
  33. +15 −0 docs/module_docs/server_modules/profile_service.md
  34. +31 −0 docs/module_docs/shared/base64.md
  35. +162 −0 docs/module_docs/shared/date.md
  36. +73 −0 docs/module_docs/shared/listener_list.md
  37. +54 −0 docs/module_docs/shared/maid.md
  38. +89 −0 docs/module_docs/shared/number_util.md
  39. +180 −0 docs/module_docs/shared/promise.md
  40. +67 −0 docs/module_docs/shared/signal.md
  41. +176 −0 docs/module_docs/shared/string_util.md
  42. +236 −0 docs/module_docs/shared/table_util.md
  43. +62 −0 docs/module_docs/shared/thread.md
  44. +34 −0 docs/module_docs/shared/vector_util.md
  45. +130 −0 docs/modules.md
  46. +295 −0 docs/services.md
  47. +57 −0 docs/settings.md
  48. +276 −30 filelist.json
  49. +1 −0 filelist.min.json
  50. +2 −0 foreman.toml
  51. BIN imgs/logo_128.png
  52. BIN imgs/logo_256.png
  53. BIN imgs/logo_32.png
  54. BIN imgs/logo_512.png
  55. BIN imgs/logo_512_discord.png
  56. BIN imgs/logo_64.png
  57. BIN imgs/logo_github_readme.png
  58. BIN imgs/social_media_github.png
  59. +3 −322 install.lua
  60. +67 −0 mkdocs.yml
  61. +2,662 −613 plugin/AeroGameFrameworkPlugin.rbxmx
  62. +5 −1 plugin/README.md
  63. +2 −0 requirements.txt
  64. +8,200 −0 roblox.toml
  65. +9 −0 selene.toml
  66. 0 src/ReplicatedFirst/{AeroLoad.localscript.lua → Aero/AeroLoad.client.lua}
  67. +82 −0 src/ReplicatedStorage/Aero/Internal/Settings.lua
  68. +151 −0 src/ReplicatedStorage/Aero/Shared/Base64.lua
  69. +0 −157 src/ReplicatedStorage/Aero/Shared/Base64.modulescript.lua
  70. +3 −3 src/ReplicatedStorage/Aero/Shared/{Date.modulescript.lua → Date.lua}
  71. +0 −169 src/ReplicatedStorage/Aero/Shared/Event.modulescript.lua
  72. +10 −4 src/ReplicatedStorage/Aero/Shared/{ListenerList.modulescript.lua → ListenerList.lua}
  73. +160 −0 src/ReplicatedStorage/Aero/Shared/Maid.lua
  74. +120 −0 src/ReplicatedStorage/Aero/Shared/NumberUtil.lua
  75. +1,428 −0 src/ReplicatedStorage/Aero/Shared/Promise.lua
  76. +182 −0 src/ReplicatedStorage/Aero/Shared/Signal.lua
  77. +310 −0 src/ReplicatedStorage/Aero/Shared/StringUtil.lua
  78. +129 −29 src/ReplicatedStorage/Aero/Shared/{TableUtil.modulescript.lua → TableUtil.lua}
  79. +164 −0 src/ReplicatedStorage/Aero/Shared/Thread.lua
  80. +62 −0 src/ReplicatedStorage/Aero/Shared/VectorUtil.lua
  81. +0 −194 src/ServerScriptService/Aero/AeroServer.script.lua
  82. +396 −0 src/ServerScriptService/Aero/Internal/AeroServer.server.lua
  83. +22 −22 ...taStoreCache.SafeDataStore.MockDataStoreService.modulescript.lua → Data/MockDataStoreService.lua}
  84. +789 −0 src/ServerStorage/Aero/Modules/Data/init.lua
  85. +0 −108 src/ServerStorage/Aero/Modules/DataStoreCache.SafeDataStore.modulescript.lua
  86. +0 −162 src/ServerStorage/Aero/Modules/DataStoreCache.modulescript.lua
  87. +1,729 −0 src/ServerStorage/Aero/Modules/ProfileService.lua
  88. 0 src/ServerStorage/Aero/Services/.gitkeep
  89. +0 −333 src/ServerStorage/Aero/Services/DataService.modulescript.lua
  90. +0 −126 src/ServerStorage/Aero/Services/StoreService.modulescript.lua
  91. +0 −162 src/StarterPlayer/StarterPlayerScripts/Aero/AeroClient.localscript.lua
  92. +2 −2 src/StarterPlayer/StarterPlayerScripts/Aero/Controllers/{Fade.modulescript.lua → Fade.lua}
  93. +12 −12 ...Player/StarterPlayerScripts/Aero/Controllers/{TaskScheduler.modulescript.lua → TaskScheduler.lua}
  94. +0 −87 src/StarterPlayer/StarterPlayerScripts/Aero/Controllers/UserInput.Mobile.modulescript.lua
  95. +0 −49 src/StarterPlayer/StarterPlayerScripts/Aero/Controllers/UserInput.modulescript.lua
  96. +31 −12 ...tarterPlayerScripts/Aero/Controllers/{UserInput.Gamepad.modulescript.lua → UserInput/Gamepad.lua}
  97. +4 −3 ...rterPlayerScripts/Aero/Controllers/{UserInput.Keyboard.modulescript.lua → UserInput/Keyboard.lua}
  98. +142 −0 src/StarterPlayer/StarterPlayerScripts/Aero/Controllers/UserInput/Mobile.lua
  99. +47 −29 ...er/StarterPlayerScripts/Aero/Controllers/{UserInput.Mouse.modulescript.lua → UserInput/Mouse.lua}
  100. +110 −0 src/StarterPlayer/StarterPlayerScripts/Aero/Controllers/UserInput/init.lua
  101. +295 −0 src/StarterPlayer/StarterPlayerScripts/Aero/Internal/AeroClient.client.lua
  102. +1 −1 ...odules/{CameraShaker.CameraShakeInstance.modulescript.lua → CameraShaker/CameraShakeInstance.lua}
  103. +14 −3 .../Modules/{CameraShaker.CameraShakePresets.modulescript.lua → CameraShaker/CameraShakePresets.lua}
  104. +31 −5 ...rPlayer/StarterPlayerScripts/Aero/Modules/{CameraShaker.modulescript.lua → CameraShaker/init.lua}
  105. +75 −0 src/StarterPlayer/StarterPlayerScripts/Aero/Modules/PID.lua
  106. +0 −221 src/StarterPlayer/StarterPlayerScripts/Aero/Modules/PID.modulescript.lua
  107. +0 −32 src/StarterPlayer/StarterPlayerScripts/Aero/Modules/Smooth.SmoothDamp.modulescript.lua
  108. +91 −0 src/StarterPlayer/StarterPlayerScripts/Aero/Modules/Smooth/SmoothDamp.lua
  109. +1 −1 src/StarterPlayer/StarterPlayerScripts/Aero/Modules/{Smooth.modulescript.lua → Smooth/init.lua}
  110. +0 −418 src/StarterPlayer/StarterPlayerScripts/Aero/Modules/Tween.Easing.modulescript.lua
  111. +459 −0 src/StarterPlayer/StarterPlayerScripts/Aero/Modules/Tween/Easing.lua
  112. +3 −5 src/StarterPlayer/StarterPlayerScripts/Aero/Modules/{Tween.modulescript.lua → Tween/init.lua}
  113. +1 −1 version.txt
18 changes: 18 additions & 0 deletions .github/workflows/deploy_docs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Deploy Docs

on:
push:
branches:
- master

jobs:
build:
name: Build & deploy docs
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Deploy docs
uses: mhausenblas/mkdocs-deploy-gh-pages@master
env:
GITHUB_TOKEN: ${{ SECRETS.GITHUB_TOKEN }}
24 changes: 24 additions & 0 deletions .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Lint

on:
push:
branches:
- master
pull_request:
branches:
- master

jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: Roblox/setup-foreman@v1
name: Install Foreman
with:
version: "^1.0.0"
token: ${{ SECRETS.GITHUB_TOKEN }}
- name: Lint
run: |
selene ./
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
imgs/*.psd
node_modules/
site/
aws/**/*.zip
aws/**/*_deploy/
aws/**/*out.yaml
102 changes: 89 additions & 13 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@

The following are updates that have been implemented into the framework, so you can understand the impact of upgrading the plugin or framework as changes are made.

Understand that the framework may change frequently, so upcoming changes may break compatiblility with previous versions. Before upgrading, it is recommended that you read this `CHANGELOG.md` to see if there are BC Breaks, otherwise known as backwards-compatibility breaks, which may have an impact on your implementation against the framework working.
Understand that the framework may change frequently, so upcoming changes may break compatibility with previous versions. Before upgrading, it is recommended that you read this `CHANGELOG.md` to see if there are BC Breaks, otherwise known as backwards-compatibility breaks, which may have an impact on your implementation against the framework working.

Anything noted with a ==[BC Break]== you should be cautious about upgrading until you understand what refactoring you may have to do in order to support the framework version.

@@ -14,6 +14,16 @@ As always, you can also check the commit history for a given version as well, an

| Version | Date | Description |
| ---|---|--- |
| [1.7.2]($1.7.2) | 2020-11-23 | <ul><li>Fix ProfileService so that it will work properly within the AGF environment</li><li>Replace `tick()` with appropriate replacements (e.g. `time()` and `os.time()`)</li><li>Fix linter</li></ul>
| [1.7.1](#1.7.1) | 2020-08-25 | <ul><li>Remove StoreService</li><li>Remove old Event module</li><li>Add new Signal module (replaces Event module)</li><li>Add new raycasting methods</li><li>Add ProfileService module</li><li>Upgrade Promise to 3.0.1</li><li>Implement new `.settings` file for configuring module behavior within the framework</li><li>Updated VS Code extension to allow for creating settings files (v0.0.23)</li><li>New PID implementation</li></ul> |
| [1.6.1](#1.6.1) | 2020-05-21 | <ul><li>Switch to Selene for linting</li><li>Include GitHub Action to run Selene for new pull requests</li><li>Less verbose method names for firing events</li><li>Various bug fixes and performance improvements</li></ul> |
| [1.6.0](#1.6.0) | 2020-04-23 | <ul><li>Add NumberUtil and VectorUtil libraries under Shared</li></ul> |
| [1.5.2](#1.5.2) | 2020-04-14 | <ul><li>Fix a breaking issue with back-to-back calls to a RemoteFunction incorrectly caching</li></ul> |
| [1.5.1](#1.5.1) | 2020-04-06 | <ul><li>Added Maid class</li></ul> |
| [1.5.0](#1.5.0) | 2020-01-05 | <ul><li>Added Data module</li><li><b>==[BC Break]==</b> Removed DataStoreService and its dependencies</li><li>Added Thread module</li></ul> |
| [1.4.1](#1.4.1) | 2019-12-15 | <ul><li>Fixed execution order for modules to respect init/start lifecycle</li><li>Add ability to force `Init` execution order using `__aeroOrder` field</li></ul> |
| [1.4.0](#1.4.0) | 2019-10-17 | <ul><li>Added `service:FireAllClientsEventExcept(eventName, player, ...)`</li><li>Dropped Roblox Studio plugin support in favor of VS Code extension</li><li>New documentation site</li></ul> |
| [1.3.0](#1.3.0) | 2018-12-19 | <ul><li>Restructured source directory and installer to be compatible with Rojo</li></ul> |
| [1.2.6](#1.2.6) | 2018-11-12 | <ul><li>Expanded TableUtil library</li></ul> |
| [1.2.5](#1.2.5) | 2018-09-20 | <ul><li>Added `__aeroPreventStart` flag for modules that already implement a Start method.</li><li>Added `__aeroPreventInit` flag for modules that already implement an Init method.</li><li>Flagged `__aeroPreventStart` for CameraShaker module.</li></ul> |
| [1.2.4](#1.2.4) | 2018-09-20 | <ul><li>Using `coroutine` yielding/resuming where applicable</li><li>Cleaned up deprecated code in TaskScheduler</li></ul> |
@@ -22,22 +32,88 @@ As always, you can also check the commit history for a given version as well, an

### Version History Notes

#### <a name="1.2.6"> Version 1.2.6
#### <a name="1.7.2"></a> Version 1.7.2
Fixes ProfileService so that it properly works within the AGF environment.

Use proper time functions within the code. `tick()` is no longer considered acceptable, and most cases can be swapped with `time()`. See [DevForum thread](https://devforum.roblox.com/t/luau-recap-june-2020/632346) on this topic.

[AGF Development] Fixed automated Selene linter by switching to Foreman for tool installations.

#### <a name="1.7.1"></a> Version 1.7.1
<b>==[BC Break]==</b> Removed StoreService, as it was not very good and pigeonholed developers into a specific pattern for product purchases.

<b>==[BC Break]==</b> Added new Signal module to replace the older Event module. The API is the same, but the implementation is more robust.

<b>==[BC Break]==</b> New PID implementation.

Replaced older raycasting methods with the newer ones within the Mouse and Mobile input modules.

Added MadStudio's ProfileService module for datastore use. This module is much more robust than the existing Data module.

Added a new `.settings` module feature to configure the behavior of modules within the framework. For instance, a controller named `MyController` can now have a `MyController.settings` module that contains specific configuration details for the module. See [Settings](https://sleitnick.github.io/AeroGameFramework/settings/) documentation. The VS Code extension for AGF has also been updated to support this feature (v0.0.22).

#### <a name="1.6.1"></a> Version 1.6.1
Added support for Selene. All pull requests are now required to pass through the Selene check before being merged into master.

Implemented less verbose method names for firing events and deprecated the old versions.

Modules are no longer wrapped with the Aero metatable if they already have a metatable and a `__call` metamethod. This adds easier support of third-party modules such as DataStore2.

The mouse is no longer enabled/disabled by default based on user input. If developers wish to hide the mouse automatically when a gamepad is used, `UserInput.HideMouse` must be set to `true`.

There were also various bug fixes and performance enhancements thanks to the implementation of Selene.

#### <a name="1.6.0"></a> Version 1.6.0
Added NumberUtil and VectorUtil libraries. These libraries contain functions that are commonly used in game development but are not available out-of-the-box in Roblox's API.

#### <a name="1.5.2"></a> Version 1.5.2
Fix a breaking issue regarding back-to-back invocations of RemoteFunctions within the internal client script. This issue was caused by an incorrect design decision that subsequent calls to a pending RemoteFunction should return the result of the first pending invocation. In other words, if a RemoteFunction was invoked 5 times at the exact same time, each invocation would return the result of the _first_ invocation.

This faulty design has been reverted to the old behavior from before v1.5.1, which guarantees that each invocation of a RemoteFunction is unique.

#### <a name="1.5.1"></a> Version 1.5.1
Added [Quenty's](https://github.com/Quenty) Maid class. This class allows for easy cleanup of tasks.

Also fixed many small bugs and made minor improvements throughout the framework.

#### <a name="1.5.0"></a> Version 1.5.0
Added a new Data module, which replaces the older DataStoreService. The new Data module gives developers more robust control over data, including improved error handling due to the module using promises.

<b>==[BC Break]==</b> The DataStoreService and its dependencies have been removed. The Data module is the official replacement. The DataStoreService had many flaws and could introduce developers into tricky situations that caused data losses due to unknown data failures.

Added a Thread module under Shared. This module should be used instead of the built-in global functions `spawn` and `delay`. Both the `spawn` and `delay` functions are known to throttle unexpectedly. Such behavior is unacceptable, and thus the Thread module aims at giving alternatives to both functions. The use of the Thread's `Thread.Spawn` and `Thread.Delay` functions can easily be dropped in to replace any existing `spawn` and `delay` code. The module also contains a `Thread.SpawnNow` function, which will spawn a new thread immediately, as opposed to the next frame. In addition, the `Thread.Delay` returns the heartbeat connection, which means that the delay can be cancelled by disconnecting the connection.

#### <a name="1.4.1"></a> Version 1.4.1
Fixed an issue with lazy-loaded modules. Before, lazy-loaded modules could break the execution lifecycle rule if loaded within the `Init` method of a service or controller. When this happened, the `Init` _and_ `Start` method would execute within the loaded module. This is a problem, since `Start` should not be executed yet. This is now fixed. The `Start` method will be held off from execution until the proper time within the framework lifecycle.

A new optional field has been added called `__aeroOrder`. Setting this field to a number will define the `Init` execution order for the service or controller. The order is interpreted in ascending order. In other words, a service with an order of `1` will be guaranteed to initialize before a service with the order of `2`. Services and controllers that don't define `__aeroOrder` will default to an order of `math.huge`, which simply makes them executed last, but in no particular order otherwise.

#### <a name="1.4.0"></a> Version 1.4.0
Added `service:FireAllClientsEventExcept(eventName, player, ...)`, which allows firing client events for all clients except the given player. One use-case for this is to implement custom replication, where a player's action needs to be communicated to the other players.

The origin AGF plugin for Roblox Studio is now deprecated in favor of the VS Code extension.

The documentation site has been rebuilt using MkDocs, which will enable easier additions, edits, and contributions.

#### <a name="1.3.0"></a> Version 1.3.0
Restructured source directory and installer to be compatible with Rojo. For compatibility, please be sure to update the plugin as well. The older versions of the plugin are not compatible with the new directory structure, and thus will fail to install or update the framework.

#### <a name="1.2.6"></a> Version 1.2.6
Expanded the TableUtil library. Specifically, the following functions have been added:

- TableUtil.Map(Table tbl, Function callback)
- TableUtil.Filter(Table tbl, Function callback)
- TableUtil.Reduce(Table tbl, Function callback [, Number initialValue])
- TableUtil.IndexOf(Table tbl, Variant item)
- TableUtil.Reverse(Table tbl)
- TableUtil.Shuffle(Table tbl)
- TableUtil.IsEmpty(Table tbl)
- TableUtil.EncodeJSON(Table tbl)
- TableUtil.DecodeJSON(String json)
- `TableUtil.Map(Table tbl, Function callback)`
- `TableUtil.Filter(Table tbl, Function callback)`
- `TableUtil.Reduce(Table tbl, Function callback [, Number initialValue])`
- `TableUtil.IndexOf(Table tbl, Variant item)`
- `TableUtil.Reverse(Table tbl)`
- `TableUtil.Shuffle(Table tbl)`
- `TableUtil.IsEmpty(Table tbl)`
- `TableUtil.EncodeJSON(Table tbl)`
- `TableUtil.DecodeJSON(String json)`

Examples have been added within the source code of the TableUtil module.

#### <a name="1.2.5"> Version 1.2.5
#### <a name="1.2.5"></a> Version 1.2.5
Added `__aeroPreventStart` and `__aeroPreventInit` flags for modules (both server and client). If the `__aeroPreventStart` flag is present for a module, then the framework will not invoke the `Start` method for that module when first loaded. Similarly, `__aeroPreventInit` will prevent the framework from invoking the `Init` method when first loaded. In summary, the two flags will prevent the default behavior of the framework calling the associated `Start` and `Init` methods. This is useful if an existing module is added to the framework that has already implemented these methods for other uses.

This change will also apply to any modules using the `WrapModule` method on either the server or client.
@@ -60,7 +136,7 @@ function MyModule:Init()
end
```

#### <a name="1.2.4"> Version 1.2.4
#### <a name="1.2.4"></a> Version 1.2.4
Instead of using `while` loops to wait for code to complete, proper usage of `coroutine.yield` and `coroutine.resume` have been implemented. This change reflects best practices on Roblox. Doing this was not possible before a recent Roblox update. The overall behavior of the code remains entirely the same.

Some deprecated code has also been fixed in the TaskScheduler. The functionality remains entirely the same.
20 changes: 20 additions & 0 deletions DOCS_README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Docs Readme

All documentation files are found under `/docs`. The documentation runs on [MkDocs](https://www.mkdocs.org/).

To simplify the development process, the `docs.sh` script has been written. The commands are shown below.

#### Watch:
```sh
$ ./docs.sh watch
```

#### Build:
```sh
$ ./docs.sh build
```

#### Deploy:
```sh
$ ./docs.sh deploy
```
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2018 Stephen Leitnick
Copyright (c) 2018-2020 Stephen Leitnick

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Loading