public GUnit CreateUnit(int requiredModuleGroup) { var unit = new GUnit(Util.GetUnionId(), requiredModuleGroup); unitMgr.AddUnit(unit.UnitId, unit); var unitData = unit.AddData <UnitData>(); unitData.disposable = new CompositeDisposable(); unitData.stateTypeProperty.Subscribe(_ => { if (_ == UnitStateType.Init) { unitData.stateTypeProperty.Subscribe(stateType => { if (stateType == UnitStateType.Destroy) { DestroyUnit(unit); } }).AddTo(unitData.disposable); if (!string.IsNullOrEmpty(unitData.tag)) { unitMgr.AddCache(unitData.tag, unit); } unit.UpdateMeetModuleList(); } }).AddTo(unitData.disposable); return(unit); }
protected override void OnAdd(EUnit unit) { var unitData = unit.GetData <UnitData>(); var helloWorldData = unit.GetData <HelloWorldData>(); Observable.Interval(TimeSpan.FromSeconds(1)).Subscribe(_ => { Log.I(helloWorldData.helloWorld); }).AddTo(unitData.disposable); }
public void DestroyUnit(GUnit unit) { var unitData = unit.GetData <UnitData>(); dataMgr.ClearDataToCached(unit.UnitId); unit.UpdateMeetModuleList(); unitData.disposable?.Dispose(); unitData.disposable = null; if (!string.IsNullOrEmpty(unitData.tag)) { unitMgr.ClearCache(unitData.tag); } dataMgr.ClearCachedData(unit.UnitId); unitMgr.RemoveUnit(unit.UnitId); }