@@ -96,6 +96,17 @@ abstract class ControlableParticleGroup(val uuid: UUID) : Controlable<Controlabl
9696 (it.value.getControlObject() as ControlableParticleGroup ).tick()
9797 }
9898 }
99+ /* *
100+ * 清除所有粒子并且重新按照相对位置渲染
101+ */
102+ fun flush () {
103+ // 即使flush也不会被处理
104+ // 如果没有display则不会出现origin world数据 因此也就无法进行操作
105+ if (canceled || ! valid || ! displayed) return
106+ clearParticles()
107+ valid = true
108+ displayParticles(origin, world!! )
109+ }
99110
100111 fun display (pos : Vec3d , world : ClientWorld ) {
101112 if (displayed) {
@@ -104,27 +115,11 @@ abstract class ControlableParticleGroup(val uuid: UUID) : Controlable<Controlabl
104115 this .origin = pos
105116 this .world = world
106117 displayed = true
107- for ((v, rl) in loadParticleLocations()) {
108- val uuid = UUID .randomUUID()
109- val particleDisplayer = v.effect(uuid)
110- if (particleDisplayer is ParticleDisplayer .SingleParticleDisplayer ) {
111- val controler = ControlParticleManager .createControl(uuid)
112- controler.initInvoker = v.invoker
113- }
114- val toPos = Vec3d (pos.x + rl.x, pos.y + rl.y, pos.z + rl.z)
115- val controler = particleDisplayer.display(toPos, world) ? : continue
116- if (controler is ParticleControler ) {
117- v.controlerAction(controler)
118- }
119- // world.addParticle(
120- // v.effect(uuid), pos.x + rl.x, pos.y + rl.y, pos.z + rl.z, 0.0, 0.0, 0.0
121- // )
122- particles[uuid] = controler
123- particlesLocations[controler] = rl
124- }
118+ displayParticles(pos, world)
125119 onGroupDisplay()
126120 }
127121
122+
128123 override fun rotateParticlesToPoint (to : RelativeLocation ) {
129124 if (! displayed) {
130125 return
@@ -202,6 +197,24 @@ abstract class ControlableParticleGroup(val uuid: UUID) : Controlable<Controlabl
202197 return this
203198 }
204199
200+ private fun displayParticles (pos : Vec3d , world : ClientWorld ) {
201+ for ((v, rl) in loadParticleLocations()) {
202+ val uuid = UUID .randomUUID()
203+ val particleDisplayer = v.effect(uuid)
204+ if (particleDisplayer is ParticleDisplayer .SingleParticleDisplayer ) {
205+ val controler = ControlParticleManager .createControl(uuid)
206+ controler.initInvoker = v.invoker
207+ }
208+ val toPos = Vec3d (pos.x + rl.x, pos.y + rl.y, pos.z + rl.z)
209+ val controler = particleDisplayer.display(toPos, world) ? : continue
210+ if (controler is ParticleControler ) {
211+ v.controlerAction(controler)
212+ }
213+ particles[uuid] = controler
214+ particlesLocations[controler] = rl
215+ }
216+ }
217+
205218 class ParticleRelativeData (
206219 val effect : (UUID ) -> ParticleDisplayer ,
207220 val invoker : ControlableParticle .() -> Unit
0 commit comments