Add data-driven fish selection and catch showcase
This commit is contained in:
parent
ae2f724fe2
commit
bd2768b676
39 changed files with 1226 additions and 58 deletions
63
fish/fish_availability.gd
Normal file
63
fish/fish_availability.gd
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
class_name FishAvailability
|
||||
extends Resource
|
||||
|
||||
const FishingContextType = preload("res://fishing/fishing_context.gd")
|
||||
|
||||
@export var allowed_location_tags: Array[StringName] = []
|
||||
@export var required_event_tags: Array[StringName] = []
|
||||
@export var forbidden_event_tags: Array[StringName] = []
|
||||
@export var allow_day: bool = true
|
||||
@export var allow_night: bool = true
|
||||
@export var require_rain: bool = false
|
||||
@export var forbid_rain: bool = false
|
||||
@export var required_bait_tags: Array[StringName] = []
|
||||
@export var preferred_bait_tags: Array[StringName] = []
|
||||
@export_range(0.01, 10.0, 0.01) var preferred_bait_weight_multiplier: float = 1.25
|
||||
|
||||
|
||||
func is_available(context: FishingContextType) -> bool:
|
||||
if context == null or (require_rain and forbid_rain):
|
||||
return false
|
||||
if context.is_night and not allow_night:
|
||||
return false
|
||||
if not context.is_night and not allow_day:
|
||||
return false
|
||||
if require_rain and not context.is_raining:
|
||||
return false
|
||||
if forbid_rain and context.is_raining:
|
||||
return false
|
||||
if (
|
||||
not allowed_location_tags.is_empty()
|
||||
and not _has_any_match(allowed_location_tags, context.location_tags)
|
||||
):
|
||||
return false
|
||||
for required_tag: StringName in required_event_tags:
|
||||
if required_tag not in context.active_event_tags:
|
||||
return false
|
||||
for forbidden_tag: StringName in forbidden_event_tags:
|
||||
if forbidden_tag in context.active_event_tags:
|
||||
return false
|
||||
if (
|
||||
not required_bait_tags.is_empty()
|
||||
and not _has_any_match(required_bait_tags, context.active_bait_tags)
|
||||
):
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
func get_bait_weight_multiplier(context: FishingContextType) -> float:
|
||||
if context == null:
|
||||
return 1.0
|
||||
if _has_any_match(preferred_bait_tags, context.active_bait_tags):
|
||||
return maxf(preferred_bait_weight_multiplier, 0.01)
|
||||
return 1.0
|
||||
|
||||
|
||||
func _has_any_match(
|
||||
required_tags: Array[StringName],
|
||||
active_tags: Array[StringName],
|
||||
) -> bool:
|
||||
for tag: StringName in required_tags:
|
||||
if tag in active_tags:
|
||||
return true
|
||||
return false
|
||||
Loading…
Add table
Add a link
Reference in a new issue