畢竟現實不會有無限期的時間可以讓你重構程式碼,鐵人也只需要30天就能完賽,所以就把目前可以更好的地方稍微條列式整理出來,如果有興趣(?)回頭看那些篇章的可以思考一下。
UIInputObserver
(或用更好的方式去寫相關作法)UIInputObsrver.cs
using System;
using System.Collections.Generic;
using TbsFramework.Grid;
using TbsFramework.Units;
using UnityEngine;
namespace Assets.Scripts.GUI.GUITool
{
public static class UIInputObserver
{
public static bool IsPlayerCanInput { get; set; }
public static bool IsUnitTurnChange { get; set; }
public static bool HaveCharacterStayOnFleeCell { get; set; }
public static List<Unit> StayFleeCellCharacter { get; set; }
public static List<Unit> AlreadyFleeCharacter { get; set; }
public static int FleeCharacterCount { get; set; }
public static Action FleeAction { get; set; }
public static bool HaveBuffAdd { get; set; }
public static Action<Transform, bool> FleeInfoAction { get; set; }
public static int NumberOfNeedFood { get; set; }
public static int CurrentPlayerHaveFoods { get; set; }
public static Camera MainCamera { get; set; }
public static CellGrid CellGrid { get; set; }
}
}
想把CellGrid
的EventHandler
改成Observer模式的做法
時序耦合的問題
雖然前面幾篇文章因為篇幅關係沒顯示全部的程式碼,不過現在的寫法有個挺大的問題是物件宣告成實體的時機
如果有認真看GetFoodAndFleeGameEndCondition
的範例的話,會看見GameEventSystem
的相關設定Awake()
、Start()
都宣告在不同的Script裡,希望未來還是可以盡量把功能的實體化時機集中在一個地方去做處理,而不是散在每個Script
Observer(二)裡面獲取麵包數量的更新應該可以寫得更好,但暫時沒時間將它優化。
說不定根本沒有偵測麵包獲取事件被取消訂閱的一天?
技能ScriptableObject化