/** 添加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(); }
private CDData toStartOneCD(CDConfig config, int time) { int id = config.id; int groupChangePercent = 0; int groupChangeValue = 0; //千分比和数值均累加 foreach (int gv in config.groups) { groupChangePercent += _groupCDChangePercents.get(gv); groupChangeValue += _groupCDChangeValues.get(gv); } int timeMax = (int)(time * ((1000f + groupChangePercent) / 1000f) + groupChangeValue); CDData data = null; if (timeMax > 0) { CDData oldData; if ((oldData = _cds.get(id)) == null) { data = new CDData(); data.id = id; data.config = config; _cds.put(data.id, data); } else { data = oldData; } data.timePass = 0; data.timeMax = 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() < timeMax) { _groupMaxCDs.put(gv, data); } //新的 if (oldMax == null) { _parent.onStartGroupCD(gv); } } } return(data); }