Skip to content

Commit afeb84c

Browse files
committed
Create BR2-ROADMAP.md
1 parent 182fc71 commit afeb84c

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

BR2-ROADMAP.md

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# ROADMAP
2+
3+
## Code Standards
4+
### Files
5+
1. **FILES** should be descriptive of the functionality. Examples: BRDebug contains functions related to debugging like print to chat, output to debug window, maybe logging to file. If the code being developed relates to any form of debug logging it must exist within the BRDebug file.
6+
7+
### Code Annotation
8+
1. Each module should be specific to a single type of functionality and be defined as a class using ---@class
9+
2. Classes need to be initialized using the BRLoader:CreateModule([ModuleName]) method and be retrieved using the BRLoader:LoadModule([ModuleName]) method.
10+
Example:
11+
12+
```
13+
local _,br,_ = ...
14+
15+
---@class BRDebug
16+
local BRDebug = BRLoader:CreateModule("BRDebug")
17+
18+
---@type BRConstants
19+
local BRConstants = BRLoader:LoadModule("BRConstants")
20+
21+
---@param message string @Message to log
22+
---@return nil
23+
function BRDebug:Log(message)
24+
br._G.print(BRConstants.colors.purple .. "[BR2] " .. BRConstants.colors.white .. message .. "|r")
25+
end
26+
```
27+
28+
3. Each method inside of the class must be annotated with ---@params, etc. See documentation here: https://github.com/LuaLS/lua-language-server/wiki/Annotations
29+
30+
### Environment
31+
1. Each file has three enivonment objects passed to which should be retrieved at the beginning of the file. These are assigned during injection. The developer should primarily be concerned with the second argument which is the global br object. The third is access directly to the unlocker but given the agnostic approach of all modules this should not be used within the core code. Access to the unlocker should only be made in code within the "init' directory. This is currently in play only during initial development and **WILL BE REMOVED** before general consumption.
32+
```
33+
local _,br,_ = ...
34+
```
35+
36+
### Naming
37+
3. "**br**" remains the global add-on variable
38+
4. **Functions** should be named with PascalCase. That is fully capitilized full words, example: RunSomethingReallyCool()
39+
5. **Variables** should be named with CamelCase. That is a lower case inital word followed by capitalized words. example: br.someStorageVariable = nil
40+
41+
## Overall Goals
42+
1. Make system compatible with classic, Cataclysm, and retail without separate builds or branches
43+
2. Focus on human style rotation logic. This will include randomized pulses, facing of targets, dynamic targeting, etc.
44+
3. Support the three current Unlockers, Nil-Name, Tinkr, and Daemonic (if it ever resurfaces, currently not supported)
45+
4. Focus on rotations only. Don't port over any code that doesn't related to Damage, tank, or healing rotations. (i.e. no fishing, quest, movement, etc.) This may change in the future but the first pass will attempt to reduce the addOn's footprint and reduce latency.
46+
5. Remove dependency on manually reading the WOW table of contents file and instead handle injection of code in unlocker specific files. Unlockers that do not support injecting code will not be supported.
47+
6. Change settings files to JSON. All current unlockers support JSON code/decode.
48+
49+
## Future Nice-To-Haves
50+
1. UI Improvements: Object Browser, Object Highlighting/lines, Damage/DPS meter/graph,
51+
2. UI Improvements: wider configuration to avoid clipping
52+
3. HTTP Request : Possibly allow loading of routine from a location
53+
54+
## Current Progress
55+
- [x] Remove TOC
56+
- [x] Move injection of files to unlocker specific code, minimize _BRLoader.lua code to three or four lines, just enough to spawn project unlocker initialization.
57+
- [x] Specific unlocker loaders, configurations
58+
- [x] Implement NilName Unlocker for initial development
59+
- [x] Implement specific loading of files based on client version (Classic, Cata, Retail)
60+
- [x] Implement Object Manager copy
61+
- [ ] Re-do file injection to support pre/unlocked post/unlocked category
62+
- [ ] Create TOC files, including per-client TOCs, maybe use scripting to build this so it's always up to date.
63+
- [ ] Implement Object Browser for development
64+
- [ ] Implement Settings class to handle global and rotation specific settings in JSON files
65+
- [ ] Implement Object Filter for Units, and Unit tracking
66+
- [ ] Implement Aura tracking
67+
- [ ] Implement Spell system maintaining separation of client versions
68+
69+

0 commit comments

Comments
 (0)