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;
            }
        }
示例#6
0
        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");
        }
示例#8
0
        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);
        }
示例#9
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;
        }
示例#10
0
        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);
        }
示例#11
0
        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;
 }
示例#15
0
 void Awake()
 {
     emitter = GetComponent <ObiEmitter>();
 }
示例#16
0
 // Use this for initialization
 void Start()
 {
     emitter = this.GetComponent <Obi.ObiEmitter>();
 }
示例#17
0
 public override void OnEnable()
 {
     base.OnEnable();
     emitter = (ObiEmitter)target;
 }
 void Awake()
 {
     emitter = GetComponent <ObiEmitter>();
     emitter.OnBlueprintLoaded   += delegate { Subscribe(); };
     emitter.OnBlueprintUnloaded += delegate { Unsubscribe(); };
 }