Make crab behavior reflect catch quality
This commit is contained in:
parent
abedd64782
commit
13fc64b80c
4 changed files with 161 additions and 11 deletions
|
|
@ -2,6 +2,7 @@ class_name GatherableData
|
|||
extends Resource
|
||||
|
||||
const FishDataType = preload("res://fish/fish_data.gd")
|
||||
const FishQualityType = preload("res://fish/fish_quality.gd")
|
||||
|
||||
@export var type_id: StringName
|
||||
@export var catch_data: FishDataType
|
||||
|
|
@ -12,6 +13,20 @@ const FishDataType = preload("res://fish/fish_data.gd")
|
|||
@export_range(0.0, 10.0, 0.05) var movement_speed: float = 0.35
|
||||
@export_range(0.1, 20.0, 0.1) var roam_radius: float = 3.5
|
||||
@export_range(0.1, 20.0, 0.1) var scare_radius: float = 2.8
|
||||
@export var quality_movement_speed_multipliers: Array[float] = [
|
||||
1.0,
|
||||
1.15,
|
||||
1.35,
|
||||
1.6,
|
||||
2.0,
|
||||
]
|
||||
@export var quality_scare_radius_multipliers: Array[float] = [
|
||||
1.0,
|
||||
1.1,
|
||||
1.25,
|
||||
1.45,
|
||||
1.7,
|
||||
]
|
||||
@export_range(0.1, 5.0, 0.05) var capture_radius: float = 0.7
|
||||
@export_range(0.1, 10.0, 0.05) var interaction_range: float = 2.6
|
||||
@export_range(0.1, 10.0, 0.05) var charge_duration: float = 2.0
|
||||
|
|
@ -37,6 +52,12 @@ func is_valid() -> bool:
|
|||
and movement_speed >= 0.0
|
||||
and roam_radius > 0.0
|
||||
and scare_radius > 0.0
|
||||
and _quality_multipliers_are_valid(
|
||||
quality_movement_speed_multipliers
|
||||
)
|
||||
and _quality_multipliers_are_valid(
|
||||
quality_scare_radius_multipliers
|
||||
)
|
||||
and capture_radius > 0.0
|
||||
and interaction_range > 0.0
|
||||
and charge_duration > 0.0
|
||||
|
|
@ -46,6 +67,20 @@ func is_valid() -> bool:
|
|||
)
|
||||
|
||||
|
||||
func get_movement_speed_for_quality(quality: int) -> float:
|
||||
return movement_speed * _quality_multiplier(
|
||||
quality_movement_speed_multipliers,
|
||||
quality,
|
||||
)
|
||||
|
||||
|
||||
func get_scare_radius_for_quality(quality: int) -> float:
|
||||
return scare_radius * _quality_multiplier(
|
||||
quality_scare_radius_multipliers,
|
||||
quality,
|
||||
)
|
||||
|
||||
|
||||
func get_respawn_delay(reason: StringName, rng: RandomNumberGenerator) -> float:
|
||||
var minimum_seconds: float = capture_respawn_min_seconds
|
||||
var maximum_seconds: float = capture_respawn_max_seconds
|
||||
|
|
@ -59,3 +94,23 @@ func get_respawn_delay(reason: StringName, rng: RandomNumberGenerator) -> float:
|
|||
|
||||
func is_available() -> bool:
|
||||
return catch_data != null and catch_data.active and is_valid()
|
||||
|
||||
|
||||
func _quality_multiplier(values: Array[float], quality: int) -> float:
|
||||
if values.size() != FishQualityType.TIER_COUNT:
|
||||
return 1.0
|
||||
var safe_quality: int = (
|
||||
quality
|
||||
if FishQualityType.is_valid(quality)
|
||||
else FishQualityType.Tier.BORING
|
||||
)
|
||||
return maxf(values[safe_quality], 0.0)
|
||||
|
||||
|
||||
func _quality_multipliers_are_valid(values: Array[float]) -> bool:
|
||||
if values.size() != FishQualityType.TIER_COUNT:
|
||||
return false
|
||||
for multiplier: float in values:
|
||||
if not is_finite(multiplier) or multiplier <= 0.0:
|
||||
return false
|
||||
return true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue