class_name TerrainPhysics extends Resource ## Container for ball behavior parameters when in contact with different terrain types @export_exp_easing() var damping_decay_curve := 1.0 @export var damping_decay_scale := 8.0 @export var default: TerrainParameters @export var rough: TerrainParameters @export var fairway: TerrainParameters @export var green: TerrainParameters @export var sand: TerrainParameters @export var concrete: TerrainParameters @export var rock: TerrainParameters @export var wood: TerrainParameters @export var metal: TerrainParameters @export var glass: TerrainParameters func get_params(type: Terrain.Type) -> TerrainParameters: # NOTE: sure would be nice to just store this in a dict, # but that makes editing physics through the editor unweildy. match type: Terrain.Type.ROUGH: return rough Terrain.Type.FAIRWAY: return fairway Terrain.Type.GREEN: return green Terrain.Type.SAND: return sand Terrain.Type.CONCRETE: return concrete Terrain.Type.ROCK: return rock Terrain.Type.WOOD: return wood Terrain.Type.METAL: return metal Terrain.Type.GLASS: return glass _: return default func get_decay_factor(time: float) -> float: var x := time / damping_decay_scale if damping_decay_curve < 1.0: return 1.0 - pow(1.0 - x, 1.0 / damping_decay_curve) return pow(x, damping_decay_curve)