Last active
July 25, 2019 15:36
-
-
Save wannasaynone/fa48d167b4f8e024d7fdf97e58433a77 to your computer and use it in GitHub Desktop.
coding sample
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public void SkipDays(int days) // 這是一個放在GameManager中,供呼叫"每日結算"的公用方法 | |
{ | |
// 在這裡會先將每日結算時會使用到的資料做初始化與設定 | |
m_dayResult.totalSkipedDays = 0; | |
m_dayResult.gainMoney = 0; | |
for (int i = 0; i < days; i++) | |
{ | |
m_dayResult.totalSkipedDays++; | |
m_dayResult.gainMoney += GameUtility.GetSubPayMoney(); | |
} | |
// 由於每日結算時有相當的UI與邏輯需要「輪流執行」 | |
// 所以設計了一個繼承了IProcessable的抽像類別叫EndDayStep | |
// IProcessable是一個自訂的介面,供後面的Processer類別使用 | |
// IProcessable與Processer的關係類似於IEnumerable與foreach | |
// 不同點在於Processer的MoveNext的時機點作用於內傳事件callback時 | |
// 以此方法實做每日結算的「流程」,達成好讀、好改、好擴充的目標 | |
if(m_endDaySteps == null) // 由於個人習慣,物件的初始化不會集中在同一處(例如建構子內),而是要用到的時候才進行初始化 | |
{ | |
m_endDaySteps = new EndDayStep[] | |
{ | |
new StartEndDayStep(), | |
new CheckUploadableFilmStep(), | |
new CheckMilestoneStep(m_milestoneChecker), | |
new ShowPreviousDaysResult() | |
}; | |
for (int i = 0; i < m_endDaySteps.Length; i++) | |
{ | |
m_endDaySteps[i].Init(m_dayResult); // 由於m_dayResult是類別,屬reference type,故Init時傳入一次就好 | |
} | |
} | |
if(m_endDayStepProcesser == null) | |
{ | |
m_endDayStepProcesser = new Processer<EndDayStep>(m_endDaySteps); | |
} | |
m_endDayStepProcesser.Start(StartNewDay); // 當上面的「流程」結束後,呼叫StartNewDay這個方法 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment