# Rose 程式重構計畫文件入口 ###### tags: `專案` `實驗` `程式` [TOC] [重構經驗整理](https://hackmd.io/FENJvSC0SLSFpvzwytvtbw) --- ## Repo 位置 https://github.com/MatchWorkshop/bluerose https://miro.com/app/board/uXjVPIsDEG8=/ ## 預計執行時間 2022/10/24 ~ 2022/12/31 ### 目標 * 將 legacy 的 rose 的 code 進行優化重構 * 移除 singleton * 程式基礎品質 * 將沒用到 / 沒刪乾淨的程式碼處理掉 * 程式碼加上 namespace 的分類 * 名稱的取名、濫用 public 的問題、var 弄成更實際的資料名稱宣告 * 移除重複程式碼 ## 12/11 議程 - Todo - Bogay - CI - license - 常識修改路徑 - CI 解法知識記錄 - 可以記在 https://game-beacon.com/books/books/unity - Input Controll 架構 - 綠島 - UI 拆解 - 接Tina的進度、嘗試完成 - Tina ## 11/26 議程 - 詢問 rose 原成員 license 問題 -> 綠島 - 已問,等待確認中 - 美術沒回覆 - 音樂表示不授權 -> 該怎麼進行要確認 - option1 清除音樂檔案 - 需要清理掉之前的 commit - Code Style 工具 & CI 串接 - coding style 部分 - `.editorconfig` 放在專案底下 -> 綠島 - CI 串接 -> bogay - 自動產生 `.csproj` * ToDo: * Tina: - [ ] UML 製作 - [ ] Skill Observer 的部分 - [ ] ~~存檔~~音樂資料集中 * 綠島: - [x] rose license 確認 - [x] ask 綺麗幫忙關閉 repo visibility - [ ] UML 製作 - [ ] 顯示 UI 重構 - SkillSelectedUI - ColorBarUI - TutorialUI - https://github.com/Bogay/b.b.b./actions/runs/3493661874 - 週三晚上 23:00 UML review with Bogay * bogay: - [ ] CI license 問題 - 暫時先不理它,等 Game CI 的 DC 群看有沒有人回覆 - 用 Unity Hub 也失敗了,考慮要不要問問看官方 - 試用日本 VPN 就可以用了 WTFFFFFF - [x] ~~音樂~~存檔資料集中 ## 11/19 議程 - CI 的作業範圍 - 可以用 commend line 把專案檔產生出來 - unity license 問題 CI 處理中 - game.ci - 詢問 rose 原成員 license 問題 -> 綠島 - 已問,等待確認中 - Code Style 工具 & CI 串接 - coding style 部分 - `.editorconfig` 放在專案底下 -> 綠島 - CI 串接 -> bogay - 自動產生 `.csproj` - 確認各部件預計用什麼模式撰寫、介面設計 - 列出 UML class -> Tina - 補上屬性、函式命名 -> 綠島 - 確認耦合狀況、列出作業項目並排序 - 顯示 UI - 從 gamemanager 拆顯示 UI 部分 - Maze 產生 * ToDo: * Tina: - [ ] UML 製作 - [ ] Skill Observer 的部分 - [ ] 存檔資料集中 * 綠島: - [ ] Rose license 確認 - [ ] UML 製作 - [ ] 顯示 UI 重構 - SkillSelectedUI - ColorBarUI - TutorialUI * bogay: - [ ] CI license 問題 - 暫時先不理它,等DC官方回復 - [ ] 音樂資料集中 ## 11/12 議程 * ToDo: * Tina: - [ ] UML 製作 - [x] 顯示 UI 重構 - StartGameUI - [ ] Skill Observer的部分 * 綠島: - [ ] rose license 確認 - [ ] UML 製作 - [ ] 顯示 UI 重構 - SkillSelectedUI - ColorBarUI - TutorialUI * bogay: - [ ] CI license 問題 ## 11/5 議程 ### 進度確認 - linting 使用 `dotnet format` - [ ] csproj 不會進版控問題 -> 使用 CI 產生 - CI 的作業範圍 - [ ] 自動產生 csproj - [ ] 跟可能有的 test - [ ] (optional) 自動發布 change log 到 [itch](https://itch.io/) - 上 itch 應該是 2週之後的事 - 在 顯示層可使用 UniRX - ~11/12 ToDo: - [ ] 詢問 rose 原成員 license 問題 -> 綠島 - [x] 命名問題處理 - [x] library的問題 - [ ] Code Style 工具 & CI 串接 - coding style 部分 - `.editorconfig` 放在專案底下 -> 綠島 - CI 串接 -> bogay - 自動產生 `.csproj` - [ ] 確認各部件預計用什麼模式撰寫、介面設計 - [ ] 列出 UML class -> Tina - [ ] 補上屬性、函式命名 -> 綠島 - [ ] 確認耦合狀況、列出作業項目並排序 - [x] wwise.zip 需要上版控嗎? -> 綠島 ## 10/29 議程 - [x] 10/29 舊的程式架構說明 - [ ] linting 工具研擬 * CI 我是傾向用原生的 solution 就好 * dotnet format + Roslyn Analyzers * https://github.com/dotnet/format/issues/648 * omnisharp.enableRoslynAnalyzers - [ ] 進度安排 ### 程式架構說明 * UML * https://miro.com/app/board/uXjVPIsDEG8=/ * 爬 code 生 UML * CI/CD? * Maze * Maze Generator? * RoseMaze Generator? * Player Controll * 要實作 undo 功能的話,感覺還需要有個儲存遊戲狀態的方法 * GameManager * Skill * 命名調整 * Skill UI? * Skill View? * 資料用 ` ScriptableObject` 來製作 * 使用技能 Class 來製作 * 技能看起來可以拆成 ScriptableObject 來把邏輯分出去,不用集中在一起,可是要再思考看看技能的流程怎麼處理 * 遊戲邏輯就是把 event 抓出來做對應處理 * 那邊用個 state machine 去維護不知道是否更合適? * 那個 switch case 感覺不是很容易擴充 * UI controll * 需要集中成一個檔案 * 我覺得用 UniRx 可以有效的把狀態跟因應狀態變化的邏輯有效拆開,e.g. UI 如何顯示之類的 * UIManager * SkillUI * ColorBarUI * `git rm --cached -r Library` ### 進度安排 10/31~11/6 * ToDo: * 命名問題處理 * Code Style 工具 & CI 串接 * 確認各部件預計用什麼模式撰寫、介面設計 * 確認耦合狀況、列出作業項目並排序 * library的問題 * 綠島: - [ ] 新版 UML 命名、規劃 - [ ] 詢問 rose 原成員 license 問題 - [ ] linting 工具研擬 - 定案 - [ ] 狀態跟因應狀態變化的邏輯實作方式 * bogay: - [ ] linting 工具研擬 - 定案 - [ ] 新版 UML 命名、規劃 - [ ] 狀態跟因應狀態變化的邏輯實作方式 - https://github.com/Bogay/go-goose-go * Tina: - [ ] 新版 UML 命名、規劃 - [ ] 狀態跟因應狀態變化的邏輯實作方式 ### 進度安排 11/7~11/13 --- ## 10/21 議程 - [ ] 目標範圍確認 - [X] 實作範圍確認 - [X] option1. 完整維持原功能、重構code - [ ] option2. 維持UI、音樂、但修改遊戲主介面外觀 (for 加技能方便) - [ ] option3. 2+額外企劃技能功能 - [ ] Code Style & workflow 確認 - [x] workflow - [ ] option1. git flow? - [x] option2. github flow? - https://ithelp.ithome.com.tw/articles/10281080 - 每個人都可以審 PR 盡量 A 送 B 審 - [x] commit messenge 規範 - 規範 https://ithelp.ithome.com.tw/articles/10228738 - 工具 https://github.com/commitizen-tools/commitizen - 修改最後一個 commit messenge (push 之前) - https://gitbook.tw/chapters/using-git/amend-commit1 - [ ] Code Style - [ ] 用工具讓程式碼 format 自動化檢查,不統一編輯器 - 命名需要人工檢查 - VSCode - Bogay & 綠島 - VS community - Tina - [x] UniTest - [x] 只做互動 UI 部分 - [ ] UI 找不到適合做的地方的話再另找一部份來做 ex 輸入測試、 - [ ] 驗證資料正確 - [x] CI/CD - Github Actions - github 的 gitlab ci XD? - [x] Unit Test - [x] code formating - [ ] (optional) 自動 release - [ ] DI framework - 先以 DP 重構為主,80%完成後再挑有 Dependency 問題的區塊來改成DI - 以穩定版本的 extenject 為主 - 雖然不知道能不能這樣做,但希望搞DI前留個純DP的版本在Releases的紀錄上 - [x] Serializer Editor 優化工具 - [ ] [Odin](https://odininspector.com/) - [x] [NaughtyAttributes](https://github.com/dbrizov/NaughtyAttributes) - [ ] 作業區塊切割 (10/31~11/6需產出) * GameLogic * MazeController ( ChessBoard Controll? ) * PlayerController * UIController * SFXController * AudioController * 專案授權聲明 * 跟 Rose 原成員確認授權狀況 ### 作業主力時間 & 討論時間 * 綠島 * 不行:週二、週四晚間、週六上午、週日上午 * 主力作業時間:週一、週三晚上 週末下午到晚上 * 討論時間:平日晚間22:00~00:00 * Tina * 不行:平日,要趕專案,期中(10/24~11/4)期末(12/19~30) * 作業時間:假日 * 討論時間:8點後都可以開會 * Bogay * 不行:週三 & 週五晚、週六早上 * 作業時間:凌晨 * 討論時間:三跟五以外的晚上 + 週末(中午過後) ### 預計討論時間 討論: 週六晚上 20:00 10/29 11/5 11/12 11/19 11/26 12/3 12/10 12/17 Tina 期末考 12/24 12/31 ### 進度安排 10/24~30 * 綠島: - [x] 資料夾重新整理 - [ ] 10/29 舊的程式架構說明 - [ ] 跟 Rose 原成員確認授權看法 - [ ] .gitignore 修正 * bogay: - [ ] code style 工具 survey * Tina: * 考試 ### 進度安排 10/31~11/6 * ToDo: * 確認耦合狀況、列出作業項目並排序 * 確認各部件預計用什麼模式撰寫、介面設計 * 命名問題處理 * Code Style 工具 & CI 串接 * 綠島: * bogay: * Tina: ### 可能會用到的工具/技術 https://learn.microsoft.com/zh-tw/dotnet/csharp/fundamentals/coding-style/coding-conventions https://www.eruditeisland.com/article/46911963299/ * Zenject * 優點 * 不用太處心積慮處理 DI 接合問題 * 疑慮 * 新手上手門檻高,說不定也會增加推廣的難度? * CI/CD * Odin or 類似的工具 * 優點 * 編輯技能單位這種物件的介面比較好看,比起直接用 Inspector 編輯 * 可以用 ScriptableObject 直接儲存資料 * 疑慮 * 版權問題不能直接分享工具,會造成推廣困難 * Code Style 工具 & 規範 * format 文件方法 * 修改 VS code Settings * ``` { "editor.defaultFormatter": "esbenp.prettier-vscode", "[csharp]": { "editor.defaultFormatter": "ms-dotnettools.csharp" } } ``` * On Mac Shift + Option + F - [ ] 如何 format 一堆文件 * 檢查命名規則 * https://www.reddit.com/r/vscode/comments/f2blef/anyone_use_stylecop_in_vs_code/ * If you run the build as task from within VS Code and set the problem matcher to msbuild, all warnings from StyleCop should appear in the problems panel. * 參考資料 https://dev.to/dboettger/optimize-visual-studio-code-for-c-net-core-development-1jf2 * 從 VSCode v14.1 開始已經開始支援 C# 程式碼格式化,不需要外掛,並且這種格式化和 VSCode 中的預設樣式相同。 * https://stackoverflow.com/questions/47352611/visual-studio-code-doesnt-format-c-sharp-code * https://stackoverflow.com/questions/29973357/how-do-you-format-code-in-visual-studio-code-vscode * Unit test ## 資源 https://gitlab.com/pine0113/rose/