51 lines
1.3 KiB
GDScript

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)