private void CacheChangeData(BulletParasChangeData changeData) { changeData.isCached = true; float beginValue; if (!_bullet.GetBulletPara(changeData.paraType, out beginValue)) { changeData.isFinish = true; Logger.LogWarn("ParasChange Warn :ParaType is not valid for bullet"); } else { changeData.begin = beginValue; float value = GetValueByChangeValue(changeData.changeValue); switch (changeData.changeMode) { case ParaChangeMode.ChangeTo: changeData.end = value; break; case ParaChangeMode.IncBy: changeData.end = changeData.begin + value; break; case ParaChangeMode.DecBy: changeData.end = changeData.begin - value; break; } } }
private BulletParasChangeData CreateChangeData(BulletParaType paraType, InterpolationMode intMode) { BulletParasChangeData changeData = ObjectsPool.GetInstance().GetPoolClassAtPool <BulletParasChangeData>(); changeData.paraType = paraType; changeData.mode = intMode; changeData.GetInterpolationValueFunc = MathUtil.GetInterpolationFloatFunc(changeData.mode); return(changeData); }
private void UpdateChangeData(int idx) { BulletParasChangeData changeData = _changeList[idx]; if (!changeData.isFinish) { if (changeData.delay > 0) { changeData.delay--; } else { if (changeData.repeatIntervalTime == 0) { if (!changeData.isCached) { CacheChangeData(changeData); } changeData.changeTime++; float changeValue = changeData.GetInterpolationValueFunc(changeData.begin, changeData.end, changeData.changeTime, changeData.changeDuration); _bullet.SetBulletPara(changeData.paraType, changeValue); if (changeData.changeTime >= changeData.changeDuration) { changeData.repeatCount--; if (changeData.repeatCount <= 0) { changeData.isFinish = true; } else { changeData.repeatIntervalTime = changeData.repeatInterval; // 再次执行时需要重新计算一下各个数值 changeData.isCached = false; } } } if (changeData.repeatIntervalTime > 0) { changeData.repeatIntervalTime--; } } } }
/// <summary> /// 添加改变参数的事件 /// </summary> /// <param name="para">参数类型</param> /// <param name="changeMode">改变的模式,(增加到、减少到、变化到)</param> /// <param name="changeValue">改变的值</param> /// <param name="valueOffset">改变的值的上下偏移</param> /// <param name="delay">延迟</param> /// <param name="duration">变化的持续时间</param> /// <param name="intMode">变化的插值方式</param> /// <param name="repeatCount">重复次数</param> /// <param name="repeatInterval">重复的时间间隔</param> public void AddParaChangeEvent(BulletParaType para, ParaChangeMode changeMode, ParaChangeValue value, int delay, float duration, InterpolationMode intMode, int repeatCount, int repeatInterval) { BulletParasChangeData changeData = CreateChangeData(para, intMode); changeData.changeMode = changeMode; changeData.changeValue = value; changeData.delay = delay; changeData.changeTime = 0; // duration小于等于0时默认设置为1,以免报错 if (duration <= 0) { duration = 1; } changeData.changeDuration = duration; changeData.repeatCount = repeatCount; changeData.repeatInterval = repeatInterval; _changeList.Add(changeData); _listCount++; }