Esempio n. 1
0
    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);
                        }
                    }
                }
            }
        }
    }
Esempio n. 2
0
    /** 开始一个变量CD */
    public void startCDVar(int id, int varID)
    {
        CDData data = toStartOneCD(CDConfig.get(id), _parent.getSkillVarValue(varID));

        if (data != null)
        {
            _parent.onCDChange();
        }
    }
Esempio n. 3
0
    /** 添加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();
    }
Esempio n. 4
0
    /** 开始服务器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();
    }
Esempio n. 5
0
    /** 缓存到当前数据(见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
                }
            }
        }
    }
Esempio n. 6
0
    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);
    }
Esempio n. 7
0
    private CDData toStartOneCD(int id)
    {
        CDConfig config = CDConfig.get(id);

        return(toStartOneCD(config, config.cd));
    }
Esempio n. 8
0
 public void reloadConfig()
 {
     config = CDConfig.get(id);
 }
Esempio n. 9
0
 public override void clear()
 {
     config = null;
 }