---
# System prepended metadata

title: Rose 程式重構計畫文件入口
tags: [程式, 專案, 實驗]

---

# 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/