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; } }
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); }
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); } }
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); } }