Esempio n. 1
0
            public override float AddSingleResult(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                                  CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
            {
                var part = (Part)colObj1Wrap.CollisionObject.UserObject;

                var didHitCharacter = part is Character;

                var partPosition = part.CFrame.p;

                var delta  = partPosition - _parentPosition;
                var dist   = delta.magnitude;
                var normal = delta == Vector3.Zero ? Vector3.Up : delta.unit;

                normal = Vector3.Up;
                var radius      = part.Size.magnitude / 2;
                var surfaceArea = radius * radius;
                var impulse     = normal * _pressure * surfaceArea * (1.0f / 4560.0f);
                var frac        = didHitCharacter ? 1 - Math.Max(0, Math.Min(1, (dist - 2) / _radius)) : 1;

                impulse *= frac;
                var torque         = impulse * 0.5f * radius;
                var bulletImpulse  = new BulletSharp.Math.Vector3(impulse.x, impulse.y, impulse.z);
                var bulletPosition = new BulletSharp.Math.Vector3(partPosition.X, partPosition.Y, partPosition.z);
                var bulletTorque   = new BulletSharp.Math.Vector3(torque.x, torque.y, torque.z);

                part.RigidBody.ApplyImpulseRef(ref bulletImpulse, ref bulletPosition);
                part.RigidBody.ApplyTorqueImpulseRef(ref bulletTorque);

                _explosion.OnHit.Fire(part, dist);
                return(0);
            }
        private void ContactAdded(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            float impulse = cp.AppliedImpulse;

            if (impulse < 0.4f)
            {
                return;
            }

            impulse -= 0.4f;
            impulse  = Math.Min(impulse, 4.0f) * 0.25f;

            string sound0 = colObj0Wrap.CollisionObject.UserObject as string;

            if (sound0 != null)
            {
                _audioEngine.SetVolume(sound0, impulse);
                _audioEngine.Play(sound0);
            }

            string sound1 = colObj1Wrap.CollisionObject.UserObject as string;

            if (sound1 != null)
            {
                _audioEngine.SetVolume(sound1, impulse);
                _audioEngine.Play(sound1);
            }
        }
Esempio n. 3
0
        public override float AddSingleResult(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            return(1.0f);

            /*
             * CollisionObject col = null;
             * if (colObj0Wrap.CollisionObject == colObj.BulletCollisionObject) col = (CollisionObject)colObj1Wrap.CollisionObject.UserObject;
             * else if (colObj1Wrap.CollisionObject == colObj.BulletCollisionObject) col = (CollisionObject)colObj0Wrap.CollisionObject.UserObject;
             *
             * var com = (GameComponent)col.tag;
             * if (com.GameObject == gameObject) return 0.0f;
             *
             * var collision = new Collision();
             * collision.GameObject = com.GameObject;
             * collision.Collider = com as Collider;
             * collision.RigidBody = com as MikuMikuWorld.GameComponents.RigidBody;
             * collision.Impulse = cp.AppliedImpulse;
             *
             * if (Collides.Exists((c) =>
             * {
             *  if (collision.Collider != null && c.Collider == collision.Collider) return true;
             *  else if (collision.RigidBody != null && c.RigidBody == collision.RigidBody) return true;
             *  return false;
             * }))
             *  return 0.0f;
             *
             * Collides.Add(collision);
             *
             * return cp.CombinedFriction;*/
        }
Esempio n. 4
0
        private void OnContactAdded(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                    CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            //Debug.WriteLine("OnContactAdded");
            int numManifolds = BtWorld.Dispatcher.NumManifolds;

            for (int i = 0; i < numManifolds; i++)
            {
                PersistentManifold contactManifold = BtWorld.Dispatcher.GetManifoldByIndexInternal(i);
                int numContacts = contactManifold.NumContacts;
                if (numContacts > 0)
                {
                    cp.UserPersistentData = 1;

                    CollisionObject obA          = (CollisionObject)contactManifold.Body0;
                    CollisionObject obB          = (CollisionObject)contactManifold.Body1;
                    RigidBody       btRigidBodyA = (RigidBody)obA;
                    RigidBody       btRigidBodyB = (RigidBody)obB;
                    RigidBodyImp    rigidBodyA   = new RigidBodyImp();
                    RigidBodyImp    rigidBodyB   = new RigidBodyImp();
                    rigidBodyA._rbi = btRigidBodyA;
                    rigidBodyB._rbi = btRigidBodyB;
                    rigidBodyA.OnCollision(rigidBodyB);
                }
            }
        }
Esempio n. 5
0
 static void CustomMaterialCombinerCallback(ManifoldPoint cp,
                                            CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                            CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     // Apply material properties
     if (colObj0Wrap.CollisionShape.ShapeType == BroadphaseNativeType.TriangleShape)
     {
         CollisionShape parent0 = colObj0Wrap.CollisionObject.CollisionShape;
         if (parent0 != null && parent0.ShapeType == BroadphaseNativeType.MultiMaterialTriangleMesh)
         {
             MultimaterialTriangleMeshShape shape = parent0 as MultimaterialTriangleMeshShape;
             BulletMaterial props = shape.GetMaterialProperties(partId0, index0);
             cp.CombinedFriction    = CalculateCombinedFriction(props.Friction, colObj1Wrap.CollisionObject.Friction);
             cp.CombinedRestitution = props.Restitution * colObj1Wrap.CollisionObject.Restitution;
         }
     }
     else if (colObj1Wrap.CollisionShape.ShapeType == BroadphaseNativeType.TriangleShape)
     {
         CollisionShape parent1 = colObj1Wrap.CollisionObject.CollisionShape;
         if (parent1 != null && parent1.ShapeType == BroadphaseNativeType.MultiMaterialTriangleMesh)
         {
             MultimaterialTriangleMeshShape shape = parent1 as MultimaterialTriangleMeshShape;
             BulletMaterial props = shape.GetMaterialProperties(partId1, index1);
             cp.CombinedFriction    = CalculateCombinedFriction(props.Friction, colObj0Wrap.CollisionObject.Friction);
             cp.CombinedRestitution = props.Restitution * colObj0Wrap.CollisionObject.Restitution;
         }
     }
 }
Esempio n. 6
0
 public BulletUnityContactPoint(ManifoldPoint mp, CollisionObjectWrapper a, CollisionObjectWrapper b)
 {
     objA                    = a.CollisionObject;
     objB                    = b.CollisionObject;
     shapeA                  = a.CollisionShape;
     shapeB                  = b.CollisionShape;
     AppliedImpulse          = mp.AppliedImpulse;
     AppliedImpulseLateral1  = mp.AppliedImpulseLateral1;
     AppliedImpulseLateral2  = mp.AppliedImpulseLateral2;
     CombinedFriction        = mp.CombinedFriction;
     CombinedRestitution     = mp.CombinedRestitution;
     CombinedRollingFriction = mp.CombinedRollingFriction;
     ContactCfm1             = mp.ContactCfm1;
     ContactCfm2             = mp.ContactCfm2;
     ContactMotion1          = mp.ContactMotion1;
     ContactMotion2          = mp.ContactMotion2;
     Distance                = mp.Distance;
     Distance1               = mp.Distance1;
     Index0                  = mp.Index0;
     Index1                  = mp.Index1;
     PartID0                 = mp.PartId0;
     PartID1                 = mp.PartId1;
     LateralFrictionDir1     = mp.LateralFrictionDir1.ToUnity();
     LateralFrictionDir2     = mp.LateralFrictionDir2.ToUnity();
     Lifetime                = mp.LifeTime;
     NormalWorldOnB          = mp.NormalWorldOnB.ToUnity();
     PositionWorldOnA        = mp.PositionWorldOnA.ToUnity();
     PositionWorldOnB        = mp.PositionWorldOnB.ToUnity();
 }
Esempio n. 7
0
        public override float AddSingleResult(ManifoldPoint cp,
                                              CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                              CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            //Vector3 ptA = cp.PositionWorldOnA;
            //Vector3 ptB = cp.PositionWorldOnB;
            //Vector3 color = new Vector3(255, 0, 255);


            if (cp.Distance < 0.0f)
            {
                if (bodyCollision == colObj1Wrap.CollisionObject)
                {
                    //Vector3 ptA = cp.PositionWorldOnA;
                    //Vector3 ptB = cp.PositionWorldOnB;
                    //Vector3 normalOnB = cp.NormalWorldOnB;
                    //bodyCollision.ApplyForce(new Vector3(255, 255, 255), new Vector3(0, 0, 0));
                    //bodyCollision.ApplyImpulse(new Vector3(100, 0, 100), new Vector3(0, 200, 0));
                    //_world.DebugDrawer.DrawLine(ref ptA, ref ptB, ref color);
                    //Console.WriteLine("normalOnB: (x " + normalOnB.X + ", y " + normalOnB.Y + ", z " + normalOnB.Z + ")");
                    Console.WriteLine("" + colObj1Wrap.CollisionObject.ToString());//  "ptA.y: " + ptA.Y + "; ptB.y: " + ptB.Y);
                }
            }
            return(0);
        }
 public override float AddSingleResult(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     if (cp.Distance <= margin)
     {
         m_connected = true;
     }
     return(1.0f);
 }
Esempio n. 9
0
        public override float AddSingleResult(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            Vector3 ptA = cp.PositionWorldOnA;
            Vector3 ptB = cp.PositionWorldOnB;

            world.DebugDrawer.DrawLine(ref ptA, ref ptB, ref ptA);
            return(0);
        }
 public override float AddSingleResult(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     if (Shark.CharacterOnSight)
     {
         CharacterStatus.DamageReceived = Constants.DAMAGE_TO_CHARACTER;
         Shark.ChangeSharkWay();
         SoundManager.SharkAttack.play();
     }
     return(0);
 }
Esempio n. 11
0
 public override float AddSingleResult(ManifoldPoint cp,
                                       CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                       CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     if (cp.Distance < 0.0f)
     {
         logica.esZombie((RigidBody)colObj1Wrap.CollisionObject, true);// esZombie() tiene efecto colateral con esta firma, simplemente muere
     }
     return(0);
 }
Esempio n. 12
0
        private void ContactAdded(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            Assert.AreEqual(2, index0);
            Assert.AreEqual(2, cp.Index0);

            Assert.AreSame(compound, colObj0Wrap.CollisionObject);
            Assert.AreSame(ground, colObj1Wrap.CollisionObject);
            Assert.AreSame(boxShape3, colObj0Wrap.CollisionShape);
            Assert.AreSame(groundShape, colObj1Wrap.CollisionShape);
        }
        public override float AddSingleResult(ManifoldPoint cp,
                                              CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                              CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            Vector3 ptA = cp.PositionWorldOnA;
            Vector3 ptB = cp.PositionWorldOnB;

            UnityEngine.Debug.Log("Contact!");
            //world.DebugDrawer.DrawLine(ref ptA, ref ptB, ref ptA);
            UnityEngine.Debug.LogFormat("{0}, {1} {2}", ptA, ptB, world);
            return(0);
        }
 public override float AddSingleResult(ManifoldPoint cp,
                                       CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                       CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     if (cp.Distance < 0.0f)
     {
         if (logica.esZombieEnIsla((RigidBody)colObj1Wrap.CollisionObject))    // esZombieEnIsla() tiene efecto cuando es true
         {
             //Console.WriteLine("Colisione con la isla!!!, tengo que hacer algo aca");
         }
     }
     return(0);
 }
 public override float AddSingleResult(ManifoldPoint cp,
                                       CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                       CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     if (cp.Distance < 0.0f)
     {
         if (logica.esApocalipsisZombie((RigidBody)colObj1Wrap.CollisionObject))// esApocalipsisZombie() tiene efecto cuando es true
         {
             play.gameOver();
         }
     }
     return(0);
 }
Esempio n. 16
0
        // MyContactCallback is just an example to show how to get access to the child shape that collided
        void MyContactCallback(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            if (colObj0Wrap.CollisionObject.CollisionShape.ShapeType == BroadphaseNativeType.CompoundShape)
            {
                CompoundShape  compound   = colObj0Wrap.CollisionObject.CollisionShape as CompoundShape;
                CollisionShape childShape = compound.GetChildShape(index0);
            }

            if (colObj1Wrap.CollisionObject.CollisionShape.ShapeType == BroadphaseNativeType.CompoundShape)
            {
                CompoundShape  compound   = colObj1Wrap.CollisionObject.CollisionShape as CompoundShape;
                CollisionShape childShape = compound.GetChildShape(index1);
            }
        }
Esempio n. 17
0
        // index is the index in the triangle array if the collision object was a triangle array
        // partID is the part of the mesh involved
        public float AddSingleResult(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            CollisionObject other = colObj0Wrap.CollisionObject;

            if (other == rigidBody)
            {
                other = colObj1Wrap.CollisionObject;
            }
            BulletUnityContactPoint cpp = null;

            if (returnFullCollisionDetails)
            {
                cpp = new BulletUnityContactPoint(cp, colObj0Wrap, colObj1Wrap);
            }
            objsCurrentlyInContactWith.Add(new SingleCollision(other, cpp));
            return(0); //todo what am I supposed to return?
        }
Esempio n. 18
0
        private void CollisionCallbackParser(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
        {
            if (colObj0Wrap.CollisionObject == body)
            {
                CollisionCallback(cp, colObj1Wrap);
            }
            else if (colObj1Wrap.CollisionObject == body)
            {
                CollisionCallback(cp, colObj0Wrap);
            }

            void CollisionCallback(ManifoldPoint cp, CollisionObjectWrapper colObjWrap)
            {
                var data = new CollisionData(colObjWrap.CollisionObject, cp.AppliedImpulse);

                callBack?.Invoke(data);
            }
        }
 public override float AddSingleResult(ManifoldPoint cp,
                                       CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                       CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     if (cp.Distance < 0.0f)
     {
         if (logica.floor() == colObj1Wrap.CollisionObject)
         {
             Console.WriteLine("Colisione con floor!!!");
             //si choqué con el piso me despido de este mundo
             logica.desactivar(bulletObject);
         }
         //else if (logica.esZombie((RigidBody)colObj1Wrap.CollisionObject) )// esZombie() tiene efecto cuando es true
         //{
         //    Console.WriteLine("Colisione con un zombie!!!");
         //}
     }
     return(0);
 }
 public override float AddSingleResult(ManifoldPoint cp,
     CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
     CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     if (cp.Distance < 0.0f)
     {
         if (logica.esZombie((RigidBody)colObj1Wrap.CollisionObject))// esZombie() no tiene efecto colateral con esta firma
         {
             //Console.WriteLine("Un zombie colisiono con planta!!!");
         }
         else if (logica.floor() == colObj1Wrap.CollisionObject)
         {
             //si choqué con el piso me despido de este mundo 
             logica.desactivar(bulletObject);
             
         }
     }
     return 0;
 }
Esempio n. 21
0
        //! Called with each contact for your own processing (e.g. test if contacts fall in within sensor parameters)
        public override float AddSingleResult(ManifoldPoint cp,
                                              CollisionObjectWrapper colObj0, int partId0, int index0,
                                              CollisionObjectWrapper colObj1, int partId1, int index1)
        {
            Vector3 pt; // will be set to point of collision relative to body

            if (colObj0.CollisionObject == body)
            {
                pt = cp.LocalPointA;
                //Console.WriteLine("ContactSensorCallback");
            }
            else
            {
                System.Diagnostics.Debug.Assert(colObj1.CollisionObject == body);
                pt = cp.LocalPointB;
            }

            // do stuff with the collision point
            return(0); // not actually sure if return value is used for anything...?
        }
 public override float AddSingleResult(ManifoldPoint cp,
                                       CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                       CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     if (cp.Distance < 0.0f)
     {
         if (logica.floor() == colObj1Wrap.CollisionObject)
         {
             if (zombie.enCaidaLibre())
             {
                 logica.desactivar(zombie);
             }
         }
         else if (logica.esPlanta((RigidBody)colObj1Wrap.CollisionObject, zombie))// esPlanta() tiene efecto cuando es true, es decir que es dañada por el zombie que se detiene a comer
         {
             // Console.WriteLine("Un zombie colisionó con una planta!!!");
         }
     }
     return(0);
 }
            // Called with each contact for your own processing (e.g. test if contacts fall in within sensor parameters)
            public override float AddSingleResult(ManifoldPoint contact,
                                                  CollisionObjectWrapper colObj0, int partId0, int index0,
                                                  CollisionObjectWrapper colObj1, int partId1, int index1)
            {
                Vector3 collisionPoint; // relative to body

                if (colObj0.CollisionObject == _monitoredBody)
                {
                    collisionPoint = contact.LocalPointA;
                }
                else
                {
                    Assert.That(colObj1.CollisionObject, Is.EqualTo(_monitoredBody));
                    collisionPoint = contact.LocalPointB;
                }

                WasCalled = true;

                return(0);
            }
Esempio n. 24
0
        // Called with each contact for your own processing (e.g. test if contacts fall in within sensor parameters)
        public override float AddSingleResult(ManifoldPoint contact,
                                              CollisionObjectWrapper colObj0, int partId0, int index0,
                                              CollisionObjectWrapper colObj1, int partId1, int index1)
        {
            Vector3 collisionPoint; // relative to body

            if (colObj0.CollisionObject == _monitoredBody)
            {
                var vec = contact.LocalPointA;
                collisionPoint = new Vector3(vec.X, vec.Y, vec.Z);
            }
            else
            {
                System.Diagnostics.Debug.Assert(colObj1.CollisionObject == _monitoredBody);
                var vec = contact.LocalPointA;
                collisionPoint = new Vector3(vec.X, vec.Y, vec.Z);
            }

            BasicDemo.colorCube = Color.Orange;

            // do stuff with the collision point
            return(0); // not actually sure if return value is used for anything...?
        }
Esempio n. 25
0
		public void DefaultCollisionHandler(CollisionObjectWrapper pcoWrap)
		{
			btSoftBody_defaultCollisionHandler(_native, pcoWrap._native);
		}
Esempio n. 26
0
		public bool CheckContact(CollisionObjectWrapper colObjWrap, Vector3 x, float margin,
			sCti cti)
		{
			return btSoftBody_checkContact(_native, colObjWrap._native, ref x, margin,
				cti._native);
		}
Esempio n. 27
0
 public override float AddSingleResult(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     _toRemove.Add((RigidBody)colObj0Wrap.CollisionObject);
     return(0);
 }
 public void ProcessCollision(SoftBody __unnamed0, CollisionObjectWrapper __unnamed1)
 {
     btSoftBodySolver_processCollision(_native, __unnamed0._native, __unnamed1._native);
 }
 public void ProcessCollision(SoftBody __unnamed0, CollisionObjectWrapper __unnamed1)
 {
     btSoftBodySolver_processCollision(_native, __unnamed0._native, __unnamed1._native);
 }
Esempio n. 30
0
 public override float AddSingleResult(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0,
                                       CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     Hitcount++;
     return(0);
 }
Esempio n. 31
0
 public override float AddSingleResult(ManifoldPoint cp, CollisionObjectWrapper colObj0Wrap, int partId0, int index0, CollisionObjectWrapper colObj1Wrap, int partId1, int index1)
 {
     return(notifyMe.AddSingleResult(cp, colObj0Wrap, partId0, index0, colObj1Wrap, partId1, index1));
 }