public override void OnEnable() { base.OnEnable(); emitter = (ObiEmitter)target; particlePropertyNames.AddRange(new string[] { "Rotational Mass" }); }
// Start is called before the first frame update void Start() { Splited = false; collidedParticles = new HashSet <int>(); emitter = GetComponent <Obi.ObiEmitter>(); solver.OnCollision += HandleCollision; totalParticles = emitter.NumParticles; }
public void OnDisable() { ObiEmitter emitter = GetComponent <ObiEmitter>(); if (emitter != null) { emitter.EmitterShape = null; } }
static void CreateObiCloth(MenuCommand menuCommand) { GameObject go = new GameObject("Obi Emitter"); ObiEmitter emitter = go.AddComponent <ObiEmitter>(); ObiEmitterShapeDisk shape = go.AddComponent <ObiEmitterShapeDisk>(); ObiParticleRenderer renderer = go.AddComponent <ObiParticleRenderer>(); shape.Emitter = emitter; ObiEditorUtils.PlaceActorRoot(go, menuCommand); }
void Emitter_OnEmitParticle(ObiEmitter emitter, int particleIndex) { if (emitter.solver != null) { int k = emitter.solverIndices[particleIndex]; Vector4 userData = emitter.solver.userData[k]; userData[0] = emitter.solver.viscosities[k]; userData[1] = emitter.solver.surfaceTension[k]; emitter.solver.userData[k] = userData; } }
static void CreateObiClothWithSolver() { GameObject c = new GameObject("Obi Emitter"); Undo.RegisterCreatedObjectUndo(c, "Create Obi Emitter"); ObiEmitter em = c.AddComponent <ObiEmitter>(); c.AddComponent <ObiEmitterShapeDisk>(); c.AddComponent <ObiParticleRenderer>(); ObiSolver solver = c.AddComponent <ObiSolver>(); em.Solver = solver; }
public void OnEnable() { emitter = (ObiEmitter)target; emitter.UpdateEmitterDistribution(); emitterBlueprint = serializedObject.FindProperty("emitterBlueprint"); collisionMaterial = serializedObject.FindProperty("m_CollisionMaterial"); fluidPhase = serializedObject.FindProperty("fluidPhase"); emissionMethod = serializedObject.FindProperty("emissionMethod"); minPoolSize = serializedObject.FindProperty("minPoolSize"); speed = serializedObject.FindProperty("speed"); lifespan = serializedObject.FindProperty("lifespan"); randomVelocity = serializedObject.FindProperty("randomVelocity"); useShapeColor = serializedObject.FindProperty("useShapeColor"); }
public void UpdateEmitterMaterials() { // reset the emitter material list: emitterMaterials = new List <ObiEmitterMaterial>() { defaultFluidMaterial }; // Setup all materials used by particle actors: foreach (ObiActor actor in actors) { ObiEmitter em = actor as ObiEmitter; if (em == null) { continue; } int materialIndex = 0; if (em.EmitterMaterial != null) { materialIndex = emitterMaterials.IndexOf(em.EmitterMaterial); // if the material has not been considered before: if (materialIndex < 0) { materialIndex = emitterMaterials.Count; emitterMaterials.Add(em.EmitterMaterial); //keep an eye on material changes: em.EmitterMaterial.OnChangesMade += emitterMaterial_OnChangesMade; } } // Update material index for all actor particles: for (int i = 0; i < actor.particleIndices.Length; i++) { fluidMaterialIndices[actor.particleIndices[i]] = materialIndex; } } Oni.SetFluidMaterialIndices(oniSolver, fluidMaterialIndices, fluidMaterialIndices.Length, 0); Oni.FluidMaterial[] mArray = emitterMaterials.ConvertAll <Oni.FluidMaterial>(a => a.GetEquivalentOniMaterial(parameters.mode)).ToArray(); Oni.SetFluidMaterials(oniSolver, mArray, mArray.Length, 0); }
static void CreateObiCloth() { GameObject c = new GameObject("Obi Emitter"); Undo.RegisterCreatedObjectUndo(c, "Create Obi Emitter"); ObiEmitter em = c.AddComponent <ObiEmitter>(); c.AddComponent <ObiEmitterShapeDisk>(); GameObject p = new GameObject("Obi Particle Renderer"); Undo.RegisterCreatedObjectUndo(p, "Create Obi Particle Renderer"); ObiParticleRenderer pr = p.AddComponent <ObiParticleRenderer>(); p.transform.parent = c.transform; pr.Actor = em; }
public void UpdateFluidMaterials() { HashSet <ObiEmitterMaterial> materialsSet = new HashSet <ObiEmitterMaterial>(); List <ObiEmitterMaterial> materials = new List <ObiEmitterMaterial>(); // The default material must always be present. materialsSet.Add(defaultFluidMaterial); materials.Add(defaultFluidMaterial); // Setup all materials used by particle actors: foreach (ObiActor actor in actors) { ObiEmitter em = actor as ObiEmitter; if (em == null) { continue; } int materialIndex = 0; if (!materialsSet.Contains(em.emitterMaterial)) { materialIndex = materials.Count; materials.Add(em.emitterMaterial); materialsSet.Add(em.emitterMaterial); } else { materialIndex = materials.IndexOf(em.emitterMaterial); } // Update material index for all actor particles: for (int i = 0; i < actor.particleIndices.Count; i++) { fluidMaterialIndices[actor.particleIndices[i]] = materialIndex; } } Oni.UnpinMemory(fluidMaterialsHandle); fluidMaterialsHandle = Oni.PinMemory(materials.ConvertAll <Oni.FluidMaterial>(a => a.GetEquivalentOniMaterial()).ToArray()); Oni.SetFluidMaterials(oniSolver, fluidMaterialsHandle.AddrOfPinnedObject(), materials.Count); }
static void CreateObiClothWithSolver() { GameObject c = new GameObject("Obi Emitter"); Undo.RegisterCreatedObjectUndo(c, "Create Obi Emitter"); ObiEmitter em = c.AddComponent <ObiEmitter>(); c.AddComponent <ObiEmitterShapeDisk>(); GameObject p = new GameObject("Obi Particle Renderer"); Undo.RegisterCreatedObjectUndo(p, "Create Obi Particle Renderer"); ObiParticleRenderer pr = p.AddComponent <ObiParticleRenderer>(); p.transform.parent = c.transform; pr.Actor = em; ObiSolver solver = c.AddComponent <ObiSolver>(); ObiColliderGroup group = c.AddComponent <ObiColliderGroup>(); em.Solver = solver; solver.colliderGroup = group; }
void Awake() { emitter = GetComponent <ObiEmitter>(); emitter.OnAddedToSolver += delegate { Subscribe(); }; emitter.OnRemovedFromSolver += delegate { Unsubscribe(); }; }
void Awake() { emitter = GetComponent <ObiEmitter>(); emitter.OnAddedToSolver += Emitter_OnAddedToSolver; emitter.OnRemovedFromSolver += Emitter_OnRemovedFromSolver; }
void Awake() { emitter = GetComponent <ObiEmitter>(); emitter.OnEmitParticle += Emitter_OnEmitParticle; }
void Awake() { emitter = GetComponent <ObiEmitter>(); }
// Use this for initialization void Start() { emitter = this.GetComponent <Obi.ObiEmitter>(); }
public override void OnEnable() { base.OnEnable(); emitter = (ObiEmitter)target; }
void Awake() { emitter = GetComponent <ObiEmitter>(); emitter.OnBlueprintLoaded += delegate { Subscribe(); }; emitter.OnBlueprintUnloaded += delegate { Unsubscribe(); }; }