Пример #1
0
    ParticleContactResolver _onParticleCollided(Particle p1, Particle p2, ParticleContact contact)
    {
        var ball = p1 as NewBallParticle;

        if (ball != null)
        {
            if (_checkContact((FBBall)ball.tag, (FBActor)p2.tag))
            {
                //ball.setCollidedEventFlag();
                contact.normal = ajustActorBallCollideNormal(-contact.normal, (FBActor)p2.tag, ball.velocity);
                return(new PCR_Obstacle()
                {
                    particle = ball, contact = contact, restitution = config.ballCollisionRestitution_actorAndball
                });
            }
            return(null);
        }
        ball = p2 as NewBallParticle;
        if (ball != null)
        {
            if (_checkContact((FBBall)ball.tag, (FBActor)p1.tag))
            {
                //ball.setCollidedEventFlag();
                contact.normal = ajustActorBallCollideNormal(contact.normal, (FBActor)p1.tag, ball.velocity);
                return(new PCR_Obstacle()
                {
                    particle = ball, contact = contact, restitution = config.ballCollisionRestitution_actorAndball
                });
            }
            return(null);
        }

        FBActor actor = (FBActor)p1.tag;

        if (actor != null && actor.ignoreCollision)
        {
            return(null);
        }
        FBActor actor2 = (FBActor)p2.tag;

        if (actor2 != null && actor2.ignoreCollision)
        {
            return(null);
        }

        //碰撞数据保存
        actor.onActorCollided(actor2);
        actor2.onActorCollided(actor);

        return(new PCR_Particle_DontMove_KeepVelocity()
        {
            p1 = p1, p2 = p2, contact = contact, restitution = config.ballCollisionRestitution_actorAndactor
        });
    }