public bool AddManyTimeDmageQueueItemEx(int enemy, int enemyX, int enemyY, int realEnemyX, int realEnemyY, int magicCode) { Lazy <long> startTicks = new Lazy <long>(() => TimeUtil.NOW()); Lazy <List <ManyTimeDmageItem> > lazyList = new Lazy <List <ManyTimeDmageItem> >(() => MagicsManyTimeDmageCachingMgr.GetManyTimeDmageItems(magicCode)); ManyTimeDmageMagicItem itemStatic; ManyTimeDmageMagicItem item; lock (mutex) { if (manyTimeDmageQueueItemDict.TryGetValue(magicCode, out item)) { if (item.itemList == null) { return(false); } else { if (item.Start(startTicks.Value, magicCode, enemy, enemyX, enemyY, realEnemyX, realEnemyY)) { execItemDict.Add(item); } return(true); } } if (!manyTimeDmageQueueItemStaticDict.TryGetValue(magicCode, out itemStatic)) { itemStatic = new ManyTimeDmageMagicItem(); itemStatic.itemList = lazyList.Value; manyTimeDmageQueueItemStaticDict[magicCode] = itemStatic; } //如果本对象还未缓存,则先构建一个,并从静态全局字典中查询 if (!manyTimeDmageQueueItemDict.TryGetValue(magicCode, out item)) { item = new ManyTimeDmageMagicItem(); item.itemList = itemStatic.itemList; manyTimeDmageQueueItemDict[magicCode] = item; } if (item.itemList == null) { return(false); } if (item.Start(startTicks.Value, magicCode, enemy, enemyX, enemyY, realEnemyX, realEnemyY)) { execItemDict.Add(item); } return(true); } }
public bool AddManyTimeDmageQueueItemEx(int enemy, int enemyX, int enemyY, int realEnemyX, int realEnemyY, int magicCode) { Lazy <long> startTicks = new Lazy <long>(() => TimeUtil.NOW()); Lazy <List <ManyTimeDmageItem> > lazyList = new Lazy <List <ManyTimeDmageItem> >(() => MagicsManyTimeDmageCachingMgr.GetManyTimeDmageItems(magicCode)); bool result; lock (this.mutex) { ManyTimeDmageMagicItem item; if (this.manyTimeDmageQueueItemDict.TryGetValue(magicCode, out item)) { if (item.itemList == null) { result = false; } else { if (item.Start(startTicks.Value, magicCode, enemy, enemyX, enemyY, realEnemyX, realEnemyY)) { this.execItemDict.Add(item); } result = true; } } else { ManyTimeDmageMagicItem itemStatic; if (!MagicsManyTimeDmageQueue.manyTimeDmageQueueItemStaticDict.TryGetValue(magicCode, out itemStatic)) { itemStatic = new ManyTimeDmageMagicItem(); itemStatic.itemList = lazyList.Value; MagicsManyTimeDmageQueue.manyTimeDmageQueueItemStaticDict[magicCode] = itemStatic; } if (!this.manyTimeDmageQueueItemDict.TryGetValue(magicCode, out item)) { item = new ManyTimeDmageMagicItem(); item.itemList = itemStatic.itemList; this.manyTimeDmageQueueItemDict[magicCode] = item; } if (item.itemList == null) { result = false; } else { if (item.Start(startTicks.Value, magicCode, enemy, enemyX, enemyY, realEnemyX, realEnemyY)) { this.execItemDict.Add(item); } result = true; } } } return(result); }
/// <summary> /// 获取可以执行的项 /// </summary> /// <returns></returns> public ManyTimeDmageMagicItem GetCanExecItemsEx(out ManyTimeDmageItem subItem) { ManyTimeDmageMagicItem magicItem = null; subItem = null; long ticks = TimeUtil.NowEx(); lock (mutex) { List <ManyTimeDmageMagicItem> removeList = null; foreach (var item in execItemDict) { if (ticks > item.execTicks) { magicItem = item; subItem = magicItem.Get(); if (!magicItem.Next()) { if (null == removeList) { removeList = new List <ManyTimeDmageMagicItem>(); } removeList.Add(item); } break; } } if (null != removeList) { foreach (var item in removeList) { execItemDict.Remove(item); } } } return(magicItem); }
public bool AddDelayMagicItemEx(int enemy, int enemyX, int enemyY, int realEnemyX, int realEnemyY, int magicCode) { Lazy <long> startTicks = new Lazy <long>(() => TimeUtil.NOW()); ManyTimeDmageMagicItem itemStatic; ManyTimeDmageMagicItem item; lock (mutex) { if (manyTimeDmageQueueItemDict.TryGetValue(magicCode, out item)) { if (item.Start(startTicks.Value, magicCode, enemy, enemyX, enemyY, realEnemyX, realEnemyY)) { execItemDict.Add(item); } return(true); } if (!manyTimeDmageQueueItemStaticDict.TryGetValue(magicCode, out itemStatic)) { itemStatic = new ManyTimeDmageMagicItem(); manyTimeDmageQueueItemStaticDict[magicCode] = itemStatic; } //如果本对象还未缓存,则先构建一个,并从静态全局字典中查询 if (!manyTimeDmageQueueItemDict.TryGetValue(magicCode, out item)) { item = new ManyTimeDmageMagicItem(); item.itemList = itemStatic.itemList; manyTimeDmageQueueItemDict[magicCode] = item; } if (item.Start(startTicks.Value, magicCode, enemy, enemyX, enemyY, realEnemyX, realEnemyY)) { execItemDict.Add(item); } return(true); } }