[Bf-blender-cvs] [2859cf69024] functions: cleanup executing actions
Jacques Lucke
noreply at git.blender.org
Wed Jul 24 19:11:44 CEST 2019
Commit: 2859cf6902425634f0f085e95522388fb91d2b62
Author: Jacques Lucke
Date: Wed Jul 24 13:50:36 2019 +0200
Branches: functions
https://developer.blender.org/rB2859cf6902425634f0f085e95522388fb91d2b62
cleanup executing actions
===================================================================
M source/blender/simulations/bparticles/action_interface.hpp
M source/blender/simulations/bparticles/actions.cpp
M source/blender/simulations/bparticles/emitters.cpp
M source/blender/simulations/bparticles/events.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/action_interface.hpp b/source/blender/simulations/bparticles/action_interface.hpp
index 26eddee3fb1..baf9e60cb03 100644
--- a/source/blender/simulations/bparticles/action_interface.hpp
+++ b/source/blender/simulations/bparticles/action_interface.hpp
@@ -80,22 +80,12 @@ class ActionInterface {
ArrayRef<float> remaining_durations,
EventInfo &event_info);
- static void RunFromEmitter(std::unique_ptr<Action> &action,
- ParticleSets &particle_sets,
- EmitterInterface &emitter_interface,
- EventInfo *event_info = nullptr);
- static void RunFromEvent(std::unique_ptr<Action> &action,
- EventExecuteInterface &event_interface,
- EventInfo *event_info = nullptr);
- static void RunForSubset(std::unique_ptr<Action> &action,
- ArrayRef<uint> pindices,
- ActionInterface &action_interface);
-
EventInfo &event_info();
ParticleSet &particles();
AttributeArrays attribute_offsets();
float remaining_time_in_step(uint pindex);
+ ArrayRef<float> remaining_durations();
ArrayRef<float> current_times();
void kill(ArrayRef<uint> pindices);
ParticleAllocator &particle_allocator();
@@ -107,6 +97,12 @@ class Action {
virtual ~Action() = 0;
virtual void execute(ActionInterface &interface) = 0;
+
+ void execute_from_emitter(ParticleSets &particle_sets,
+ EmitterInterface &emitter_interface,
+ EventInfo *event_info = nullptr);
+ void execute_from_event(EventExecuteInterface &event_interface, EventInfo *event_info = nullptr);
+ void execute_for_subset(ArrayRef<uint> pindices, ActionInterface &action_interface);
};
/* ActionInterface inline functions
@@ -136,10 +132,9 @@ class EmptyEventInfo : public EventInfo {
}
};
-inline void ActionInterface::RunFromEmitter(std::unique_ptr<Action> &action,
- ParticleSets &particle_sets,
- EmitterInterface &emitter_interface,
- EventInfo *event_info)
+inline void Action::execute_from_emitter(ParticleSets &particle_sets,
+ EmitterInterface &emitter_interface,
+ EventInfo *event_info)
{
AttributesInfo info;
AttributeArraysCore offsets_core(info, {}, 0);
@@ -158,13 +153,12 @@ inline void ActionInterface::RunFromEmitter(std::unique_ptr<Action> &action,
particles.attributes().get_float("Birth Time"),
durations,
used_event_info);
- action->execute(action_interface);
+ this->execute(action_interface);
}
}
-inline void ActionInterface::RunFromEvent(std::unique_ptr<Action> &action,
- EventExecuteInterface &event_interface,
- EventInfo *event_info)
+inline void Action::execute_from_event(EventExecuteInterface &event_interface,
+ EventInfo *event_info)
{
EmptyEventInfo empty_event_info;
EventInfo &used_event_info = (event_info == nullptr) ? empty_event_info : *event_info;
@@ -176,21 +170,19 @@ inline void ActionInterface::RunFromEvent(std::unique_ptr<Action> &action,
event_interface.current_times(),
event_interface.remaining_durations(),
used_event_info);
- action->execute(action_interface);
+ this->execute(action_interface);
}
-inline void ActionInterface::RunForSubset(std::unique_ptr<Action> &action,
- ArrayRef<uint> pindices,
- ActionInterface &action_interface)
+inline void Action::execute_for_subset(ArrayRef<uint> pindices, ActionInterface &action_interface)
{
- ActionInterface sub_interface(action_interface.m_particle_allocator,
- action_interface.m_array_allocator,
- ParticleSet(action_interface.m_particles.block(), pindices),
- action_interface.m_attribute_offsets,
- action_interface.m_current_times,
- action_interface.m_remaining_durations,
- action_interface.m_event_info);
- action->execute(sub_interface);
+ ActionInterface sub_interface(action_interface.particle_allocator(),
+ action_interface.array_allocator(),
+ ParticleSet(action_interface.particles().block(), pindices),
+ action_interface.attribute_offsets(),
+ action_interface.current_times(),
+ action_interface.remaining_durations(),
+ action_interface.event_info());
+ this->execute(sub_interface);
}
inline EventInfo &ActionInterface::event_info()
@@ -213,6 +205,11 @@ inline float ActionInterface::remaining_time_in_step(uint pindex)
return m_remaining_durations[pindex];
}
+inline ArrayRef<float> ActionInterface::remaining_durations()
+{
+ return m_remaining_durations;
+}
+
inline ArrayRef<float> ActionInterface::current_times()
{
return m_current_times;
diff --git a/source/blender/simulations/bparticles/actions.cpp b/source/blender/simulations/bparticles/actions.cpp
index eecc5956f4f..a85bd34b257 100644
--- a/source/blender/simulations/bparticles/actions.cpp
+++ b/source/blender/simulations/bparticles/actions.cpp
@@ -111,8 +111,8 @@ void ConditionAction::execute(ActionInterface &interface)
}
}
- ActionInterface::RunForSubset(m_true_action, true_pindices, interface);
- ActionInterface::RunForSubset(m_false_action, false_pindices, interface);
+ m_true_action->execute_for_subset(true_pindices, interface);
+ m_false_action->execute_for_subset(false_pindices, interface);
}
void ConditionAction::compute_conditions(ActionInterface &interface, ArrayRef<bool> r_conditions)
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 0bd09e4adb2..fb67d27c3d6 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -125,7 +125,7 @@ void SurfaceEmitter::emit(EmitterInterface &interface)
new_particles.set_float("Size", sizes);
new_particles.set_float("Birth Time", birth_times);
- ActionInterface::RunFromEmitter(m_action, new_particles, interface);
+ m_action->execute_from_emitter(new_particles, interface);
}
void CustomFunctionEmitter::emit(EmitterInterface &interface)
diff --git a/source/blender/simulations/bparticles/events.cpp b/source/blender/simulations/bparticles/events.cpp
index 4e2db171572..8668c33a67c 100644
--- a/source/blender/simulations/bparticles/events.cpp
+++ b/source/blender/simulations/bparticles/events.cpp
@@ -57,7 +57,7 @@ void AgeReachedEvent::execute(EventExecuteInterface &interface)
was_activated_before[pindex] = true;
}
- ActionInterface::RunFromEvent(m_action, interface);
+ m_action->execute_from_event(interface);
}
/* Collision Event
@@ -132,7 +132,7 @@ void MeshCollisionEvent::execute(EventExecuteInterface &interface)
}
CollisionEventInfo event_info(normals);
- ActionInterface::RunFromEvent(m_action, interface, &event_info);
+ m_action->execute_from_event(interface, &event_info);
}
void CloseByPointsEvent::filter(EventFilterInterface &interface)
@@ -152,7 +152,7 @@ void CloseByPointsEvent::filter(EventFilterInterface &interface)
void CloseByPointsEvent::execute(EventExecuteInterface &interface)
{
- ActionInterface::RunFromEvent(m_action, interface);
+ m_action->execute_from_event(interface);
}
} // namespace BParticles
More information about the Bf-blender-cvs
mailing list