Пример #1
0
 private void PutBallInCup(Projectile proj, BallCollisionEvent collision)
 {
     if (proj.owner == Main.myPlayer && Main.LocalGolfState.ShouldScoreHole)
     {
         Point tileCoordinates = (collision.ImpactPoint - collision.Normal * 0.5f).ToTileCoordinates();
         int   owner           = proj.owner;
         int   numberOfHits    = (int)proj.ai[1];
         int   type            = proj.type;
         if (numberOfHits > 1)
         {
             Main.LocalGolfState.SetScoreTime();
         }
         Main.LocalGolfState.RecordBallInfo(proj);
         Main.LocalGolfState.LandBall(proj);
         int golfBallScore = Main.LocalGolfState.GetGolfBallScore(proj);
         if (numberOfHits > 0)
         {
             Main.player[owner].AccumulateGolfingScore(golfBallScore);
         }
         GolfHelper.ContactListener.PutBallInCup_Actual(tileCoordinates, owner, numberOfHits, type);
         Main.LocalGolfState.ResetScoreTime();
         if (Main.netMode == 1)
         {
             NetMessage.SendData(128, -1, -1, (NetworkText)null, owner, (float)numberOfHits, (float)type, 0.0f, tileCoordinates.X, tileCoordinates.Y, 0);
         }
     }
     proj.Kill();
 }
Пример #2
0
 private void PutBallInCup(Projectile proj, BallCollisionEvent collision)
 {
     if (proj.owner == Main.myPlayer && Main.LocalGolfState.ShouldScoreHole)
     {
         Point hitLocation = (collision.ImpactPoint - collision.Normal * 0.5f).ToTileCoordinates();
         int   owner       = proj.owner;
         int   num         = (int)proj.ai[1];
         int   type        = proj.type;
         if (num > 1)
         {
             Main.LocalGolfState.SetScoreTime();
         }
         Main.LocalGolfState.RecordBallInfo(proj);
         Main.LocalGolfState.LandBall(proj);
         int golfBallScore = Main.LocalGolfState.GetGolfBallScore(proj);
         if (num > 0)
         {
             Main.player[owner].AccumulateGolfingScore(golfBallScore);
         }
         PutBallInCup_TextAndEffects(hitLocation, owner, num, type);
         Main.LocalGolfState.ResetScoreTime();
         Wiring.HitSwitch(hitLocation.X, hitLocation.Y);
         NetMessage.SendData(59, -1, -1, null, hitLocation.X, hitLocation.Y);
         if (Main.netMode == 1)
         {
             NetMessage.SendData(128, -1, -1, null, owner, num, type, 0f, hitLocation.X, hitLocation.Y);
         }
     }
     proj.Kill();
 }
Пример #3
0
            public void OnCollision(
                PhysicsProperties properties,
                ref Vector2 position,
                ref Vector2 velocity,
                ref BallCollisionEvent collision)
            {
                TileMaterial byTileId  = TileMaterials.GetByTileId(collision.Tile.type);
                Vector2      vector2_1 = velocity * byTileId.GolfPhysics.SideImpactDampening;
                Vector2      vector2_2 = collision.Normal * Vector2.Dot(velocity, collision.Normal) * (byTileId.GolfPhysics.DirectImpactDampening - byTileId.GolfPhysics.SideImpactDampening);

                velocity = vector2_1 + vector2_2;
                Projectile entity = collision.Entity as Projectile;

                switch (collision.Tile.type)
                {
                case 421:
                case 422:
                    float   num1      = 2.5f * collision.TimeScale;
                    Vector2 vector2_3 = new Vector2(-collision.Normal.Y, collision.Normal.X);
                    if (collision.Tile.type == (ushort)422)
                    {
                        vector2_3 = -vector2_3;
                    }
                    float num2 = Vector2.Dot(velocity, vector2_3);
                    if ((double)num2 < (double)num1)
                    {
                        velocity += vector2_3 * MathHelper.Clamp(num1 - num2, 0.0f, num1 * 0.5f);
                        break;
                    }
                    break;

                case 476:
                    float num3 = velocity.Length() / collision.TimeScale;
                    if ((double)collision.Normal.Y <= -0.00999999977648258 && (double)num3 <= 100.0)
                    {
                        velocity *= 0.0f;
                        if (entity != null && entity.active)
                        {
                            this.PutBallInCup(entity, collision);
                            break;
                        }
                        break;
                    }
                    break;
                }
                if (entity == null || (double)velocity.Y >= -0.300000011920929 || ((double)velocity.Y <= -2.0 || (double)velocity.Length() <= 1.0))
                {
                    return;
                }
                Dust dust = Dust.NewDustPerfect(collision.Entity.Center, 31, new Vector2?(collision.Normal), (int)sbyte.MaxValue, new Color(), 1f);

                dust.scale    = 0.7f;
                dust.fadeIn   = 1f;
                dust.velocity = dust.velocity * 0.5f + Main.rand.NextVector2CircularEdge(0.5f, 0.4f);
            }
Пример #4
0
            public void OnCollision(PhysicsProperties properties, Vector2 position, Vector2 velocity, BallCollisionEvent collision)
            {
                TileMaterial byTileId = TileMaterials.GetByTileId(collision.Tile.type);
                Vector2      value    = velocity * byTileId.GolfPhysics.SideImpactDampening;
                Vector2      value2   = collision.Normal * Vector2.Dot(velocity, collision.Normal) * (byTileId.GolfPhysics.DirectImpactDampening - byTileId.GolfPhysics.SideImpactDampening);

                velocity = value + value2;
                Projectile projectile = collision.Entity as Projectile;

                switch (collision.Tile.type)
                {
                case 421:
                case 422:
                {
                    float   num2   = 2.5f * collision.TimeScale;
                    Vector2 vector = new Vector2(0f - collision.Normal.Y, collision.Normal.X);
                    if (collision.Tile.type == 422)
                    {
                        vector = -vector;
                    }
                    float num3 = Vector2.Dot(velocity, vector);
                    if (num3 < num2)
                    {
                        velocity += vector * MathHelper.Clamp(num2 - num3, 0f, num2 * 0.5f);
                    }
                    break;
                }

                case 476:
                {
                    float num = velocity.Length() / collision.TimeScale;
                    if (!(collision.Normal.Y > -0.01f) && !(num > 100f))
                    {
                        velocity *= 0f;
                        if (projectile != null && projectile.active)
                        {
                            PutBallInCup(projectile, collision);
                        }
                    }
                    break;
                }
                }
                if (projectile != null && velocity.Y < -0.3f && velocity.Y > -2f && velocity.Length() > 1f)
                {
                    Dust dust = Dust.NewDustPerfect(collision.Entity.Center, 31, collision.Normal, 127);
                    dust.scale    = 0.7f;
                    dust.fadeIn   = 1f;
                    dust.velocity = dust.velocity * 0.5f + Main.rand.NextVector2CircularEdge(0.5f, 0.4f);
                }
            }
Пример #5
0
 void Raise(BallCollisionEvent anEvent, Vector3 point)
 {
     if (anEvent != null) {
         anEvent(point);
     }
 }