public void setData(IntObjectMap <CDData> cds) { _cds = cds; if (cds != null && !cds.isEmpty()) { IntObjectMap <CDData> groupMaxCDs = _groupMaxCDs; IntIntMap groupCDCount = _groupCDCount; CDData[] values = cds.getValues(); CDData data; for (int i = values.Length - 1; i >= 0; --i) { if ((data = values[i]) != null) { int lastTime = data.getLastTime(); CDConfig config = data.config = CDConfig.get(data.id); foreach (int v in config.groups) { groupCDCount.addValue(v, 1); CDData oldMax = groupMaxCDs.get(v); if (oldMax == null || oldMax.getLastTime() < lastTime) { groupMaxCDs.put(v, data); } } } } } }
/** 开始一个变量CD */ public void startCDVar(int id, int varID) { CDData data = toStartOneCD(CDConfig.get(id), _parent.getSkillVarValue(varID)); if (data != null) { _parent.onCDChange(); } }
/** 添加CD组 */ public void reAddCDs(IntObjectMap <CDData> dic, int dTime) { if (dic.isEmpty()) { return; } IntObjectMap <CDData> cds = _cds; if (!cds.isEmpty()) { Ctrl.throwError("这时cd组不应该有值"); } IntObjectMap <CDData> groupMaxCDs = _groupMaxCDs; IntIntMap groupCDCount = _groupCDCount; UnitFightDataLogic parent = _parent; CDData[] values = dic.getValues(); CDData v; for (int i = values.Length - 1; i >= 0; --i) { if ((v = values[i]) != null) { v.config = CDConfig.get(v.id); v.timePass += dTime; //依然有效 if (v.timePass < v.timeMax) { cds.put(v.id, v); foreach (int gv in v.config.groups) { groupCDCount.addValue(gv, 1); CDData oldMax = groupMaxCDs.get(gv); if (oldMax == null || oldMax.getLastTime() < v.getLastTime()) { groupMaxCDs.put(gv, v); } //新的 if (oldMax == null) { parent.onStartGroupCD(gv); } } } } } _parent.onCDChange(); }
/** 开始服务器CD组 */ public void startCDsByServer(SList <CDData> list) { IntObjectMap <CDData> cds = _cds; IntObjectMap <CDData> groupMaxCDs = _groupMaxCDs; IntIntMap groupCDCount = _groupCDCount; UnitFightDataLogic parent = _parent; CDData oldData; CDData data; CDConfig config; foreach (CDData v in list) { config = CDConfig.get(v.id); if ((oldData = cds.get(v.id)) == null) { data = v; data.config = config; cds.put(data.id, data); } else { data = oldData; data.timePass = v.timePass; data.timeMax = v.timeMax; } foreach (int gv in config.groups) { //计数加1 if (oldData == null) { groupCDCount.addValue(gv, 1); } CDData oldMax = groupMaxCDs.get(gv); if (oldMax == null || oldMax.getLastTime() < data.timeMax) { groupMaxCDs.put(gv, data); } //新的 if (oldMax == null) { parent.onStartGroupCD(gv); } } } _parent.onCDChange(); }
/** 缓存到当前数据(见BuffKeepType) */ public void saveCache(MUnitCacheData data, int keepType) { data.cacheTime = getTimeMillis(); //当前属性 IntIntMap currentAttributes = data.currentAttributes; currentAttributes.clear(); int[] currentList = AttributeControl.attribute.currentList; for (int i = currentList.Length - 1; i >= 0; --i) { currentAttributes.put(currentList[i], attribute.getAttribute(currentList[i])); } //buff IntObjectMap <BuffData> buffs = data.buffs; buffs.clear(); BuffData[] values = buff.getBuffDatas().getValues(); BuffData v; for (int i = values.Length - 1; i >= 0; --i) { if ((v = values[i]) != null) { if (v.config.keepType == keepType) { buffs.put(v.instanceID, (BuffData)v.clone()); //clone } } } //cd IntObjectMap <CDData> cds = data.cds; cds.clear(); CDData[] cdValues = cd.getCDs().getValues(); CDData cdV; for (int i = cdValues.Length - 1; i >= 0; --i) { if ((cdV = cdValues[i]) != null) { if (CDConfig.get(cdV.id).keepType == keepType) { cds.put(cdV.id, (CDData)cdV.clone()); //clone } } } }
private CDData toStartOneCD(int id) { CDConfig config = CDConfig.get(id); return(toStartOneCD(config, config.cd)); }
public void reloadConfig() { config = CDConfig.get(id); }