Example #1
0
            private void HandleBaseDropPhysics(EntityDrop dropInstance)
            {
                Vector3 velocity;
                float   angularVelocity2D = 0f;
                Vector3 angularVelocity   = Vector3.zero;

                if (PinouApp.Entity.Mode2D == true)
                {
                    float angle = Random.Range(0f, 2 * Mathf.PI);
                    velocity  = new Vector3(Mathf.Cos(angle), Mathf.Sin(angle));
                    velocity *= Random.Range(dropInstance.Data.MinDropHorizontalVelocity, dropInstance.Data.MaxDropHorizontalVelocity);

                    angularVelocity2D = Random.Range(dropInstance.Data.MinDropAngularVelocity, dropInstance.Data.MaxDropAngularVelocity);;
                }
                else
                {
                    float angle = Random.Range(0f, 2 * Mathf.PI);
                    velocity   = new Vector3(Mathf.Cos(angle), 0f, Mathf.Sin(angle));
                    velocity  *= Random.Range(dropInstance.Data.MinDropHorizontalVelocity, dropInstance.Data.MaxDropHorizontalVelocity);
                    velocity.y = Random.Range(dropInstance.Data.MinDropVerticalVelocity, dropInstance.Data.MaxDropVerticalVelocity);

                    angularVelocity = Random.insideUnitSphere * Random.Range(dropInstance.Data.MinDropAngularVelocity, dropInstance.Data.MaxDropAngularVelocity);
                }

                switch (Data.PhysicsMode)
                {
                case DropPhysicsMode.Simulated:
                    dropVelocities.Add(velocity * Time.fixedDeltaTime);

                    if (PinouApp.Entity.Mode2D == true)
                    {
                        dropAngularVelocities2D.Add(angularVelocity2D * Time.fixedDeltaTime);
                    }
                    else
                    {
                        dropAngularVelocities.Add(angularVelocity * Time.fixedDeltaTime);
                    }
                    break;

                case DropPhysicsMode.Rigidbody:
                    Rigidbody r = dropInstance.GetComponent <Rigidbody>();
                    if (r == null)
                    {
                        return;
                    }
                    r.velocity = velocity;

                    if (PinouApp.Entity.Mode2D == true)
                    {
                        r.angularVelocity = Vector3.forward * angularVelocity2D;
                    }
                    else
                    {
                        r.angularVelocity = angularVelocity;
                    }
                    break;
                }
            }
Example #2
0
            public void RegisterDropIfNeeded(EntityDrop drop)
            {
                if (entityDrops.Contains(drop) == false)
                {
                    entityDrops.Add(drop);
                    dropTransforms.Add(drop.transform);

                    if (Data.PhysicsMode == DropPhysicsMode.Simulated)
                    {
                        dropVelocities.Add(default);
Example #3
0
            public void HandleSpawnDrops(ICollection <EntityDropData> drops, Vector3 position)
            {
                foreach (EntityDropData drop in drops)
                {
                    GameObject instance     = PinouApp.Pooler.Retrieve(drop.DropModel, position, Quaternion.identity, PinouApp.Scene.ActiveSceneInfos.LootsHolder);
                    EntityDrop dropInstance = instance.GetComponent <EntityDrop>();
                    dropInstance.FillData(drop);

                    entityDrops.Add(dropInstance);
                    dropTransforms.Add(instance.transform);

                    HandleBaseDropPhysics(dropInstance);

                    dropInstance.OnCollect.Subscribe(OnDropCollected);
                }
            }