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; } }
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);
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); } }