示例#1
0
            public void OnPassThrough(
                PhysicsProperties properties,
                ref Vector2 position,
                ref Vector2 velocity,
                ref float angularVelocity,
                ref BallPassThroughEvent collision)
            {
                switch (collision.Type)
                {
                case BallPassThroughType.Water:
                    velocity        *= 0.91f;
                    angularVelocity *= 0.91f;
                    break;

                case BallPassThroughType.Honey:
                    velocity        *= 0.8f;
                    angularVelocity *= 0.8f;
                    break;

                case BallPassThroughType.Tile:
                    TileMaterial byTileId = TileMaterials.GetByTileId(collision.Tile.type);
                    velocity        *= byTileId.GolfPhysics.PassThroughDampening;
                    angularVelocity *= byTileId.GolfPhysics.PassThroughDampening;
                    break;
                }
            }
示例#2
0
        public static void HitGolfBall(Entity entity, Vector2 velocity, float roughLandResistance)
        {
            Vector2 bottom = entity.Bottom;

            ++bottom.Y;
            Point tileCoordinates = bottom.ToTileCoordinates();
            Tile  tile            = Main.tile[tileCoordinates.X, tileCoordinates.Y];

            if (tile != null && tile.active())
            {
                TileMaterial byTileId = TileMaterials.GetByTileId(tile.type);
                velocity = Vector2.Lerp(velocity * byTileId.GolfPhysics.ClubImpactDampening, velocity, byTileId.GolfPhysics.ImpactDampeningResistanceEfficiency * roughLandResistance);
            }
            entity.velocity = velocity;
            if (!(entity is Projectile golfBall))
            {
                return;
            }
            golfBall.timeLeft = 18000;
            if ((double)golfBall.ai[1] < 0.0)
            {
                golfBall.ai[1] = 0.0f;
            }
            ++golfBall.ai[1];
            golfBall.localAI[1] = 1f;
            Main.LocalGolfState.RecordSwing(golfBall);
        }
示例#3
0
        public static void HitGolfBall(Entity entity, Vector2 velocity, float roughLandResistance)
        {
            Vector2 bottom = entity.Bottom;

            bottom.Y += 1f;
            Point point = bottom.ToTileCoordinates();
            Tile  tile  = Main.tile[point.X, point.Y];

            if (tile != null && tile.active())
            {
                TileMaterial byTileId = TileMaterials.GetByTileId(tile.type);
                velocity = Vector2.Lerp(velocity * byTileId.GolfPhysics.ClubImpactDampening, velocity, byTileId.GolfPhysics.ImpactDampeningResistanceEfficiency * roughLandResistance);
            }
            entity.velocity = velocity;
            Projectile projectile = entity as Projectile;

            if (projectile != null)
            {
                projectile.timeLeft = 18000;
                if (projectile.ai[1] < 0f)
                {
                    projectile.ai[1] = 0f;
                }
                projectile.ai[1]     += 1f;
                projectile.localAI[1] = 1f;
                Main.LocalGolfState.RecordSwing(projectile);
            }
        }
示例#4
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);
            }
            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);
                }
            }