void fillBallContacts(NewBallParticle ball, List <ParticleContact> contacts) { ParticleContact contact = default(ParticleContact); if (ball.height >= m_doorHeight) { for (int i = 0; i < m_ballEdges.Count; ++i) { if (ball.intersect(m_ballEdges[i].normal, m_ballEdges[i].d, ref contact)) { contacts.Add(contact); } } } else { #region jlx 2017.05.15-log:添加动态计算碰撞球门斜边 var dynamicSlopeEdge = calculateSlopeEdge(ball.position); if (ball.intersect(dynamicSlopeEdge.normal, dynamicSlopeEdge.d, ref contact)) { contact.tagI = (int)( DoorSide.kDoor | DoorSide.kBack | (ball.position.x > Fix64.Zero ? DoorSide.kFieldA : DoorSide.kFieldB)); contacts.Add(contact); } #endregion } }
//public void moveToward(FixVector2 velocity, Fix64 flyVelocity, bool pass) //{ // m_willBeCatched = false; // m_particle.clearCollidedEventFlag(); // m_particle.velocity = velocity; // m_particle.dampingAcceleration_land = landDampingAcceleration; // m_particle.dampingAcceleration_air = airDampingAcceleration; // m_particle.landingDamping = landingDamping; // m_particle.angularVelocity = Fix64.Zero; // m_particle.fly(Fix64.Zero, flyVelocity, gravity); // kickIsPass = pass; //} //public void moveToward(FixVector2 velocity, Fix64 angularVelocity, Fix64 flyVelocity, bool pass) //{ // m_willBeCatched = false; // m_particle.clearCollidedEventFlag(); // m_particle.velocity = velocity; // m_particle.dampingAcceleration_land = landDampingAcceleration; // m_particle.dampingAcceleration_air = airDampingAcceleration; // m_particle.landingDamping = landingDamping; // m_particle.angularVelocity = angularVelocity; // m_particle.fly(Fix64.Zero, flyVelocity, gravity); // kickIsPass = pass; //} public FBBall(Configuration config, FBWorld.Configuration worldConfig) { m_configuration = config; m_particle = new NewBallParticle(); m_particle.radius = config.radius; m_particle.linearDamping_land = config.linearDamping_land; m_particle.linearDamping_air = config.linearDamping_air; m_particle.landHitDamping = config.landHitVerticleDamping; m_particle.ceilHitDamping = worldConfig.ballCollisionRestitution[4]; m_particle.ceilHeight = worldConfig.doorHeight; m_particle.angularDamping = config.angularDamping; m_particle.gravity = config.gravity; m_particle.tag = this; energy = config.getEnergy(0); m_particle.onLanded += (times, preHeightVelocity) => { world.onBallLanded(m_particle.position, ballState == BallState.PassBall, times, get3DVelocity(), preHeightVelocity); ballState = BallState.Free; }; }