예제 #1
0
        public sealed override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
        {
            if (state.totalTime < m_LastTime)
            {
                // We got reset shomehow (loop and delay?)
                Reset(vfxValues.GetFloat(startTimePropertyID), vfxValues.GetFloat(durationPropertyID), vfxValues.GetUInt(countPropertyID), state.totalTime);
            }

            if (state.deltaTime > 0.0f && m_Remaining >= 0 && state.totalTime > m_StartTime)
            {
                float frameRatio = Mathf.Clamp01((state.totalTime - m_StartTime) / state.deltaTime);  // How much of the entirety of a frame did we elapse
                float count      = Mathf.Min(m_Remaining, frameRatio * m_Rate * state.deltaTime);

                m_Remaining -= count;
                m_Incoming  += count;

                int toSpawn = (int)Mathf.Floor(m_Incoming);
                state.spawnCount += toSpawn;
                m_Incoming       -= toSpawn;
            }

            m_LastTime = state.totalTime;
        }
예제 #2
0
 public override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
 {
     state.spawnCount = Mathf.Min(state.spawnCount, vfxValues.GetUInt(maxSpawnPerFrameName));
 }
예제 #3
0
 public sealed override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
 {
     Reset(vfxValues.GetFloat(startTimePropertyID), vfxValues.GetFloat(durationPropertyID), vfxValues.GetUInt(countPropertyID));
 }
 public override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
 {
     m_Index = (m_Index + 1) % Math.Max(1, vfxValues.GetUInt(stripMaxCountID));
     state.vfxEventAttribute.SetUint(stripIndexID, m_Index);
 }