feat: add witnessed knowledge and wind ambience
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
class_name RelationshipStateRecord
|
||||
extends RefCounted
|
||||
|
||||
const SCHEMA_VERSION := 1
|
||||
const NO_CAUSE_EVENT := -1
|
||||
const NEUTRAL_TRUST := 0.5
|
||||
|
||||
var data: Dictionary
|
||||
|
||||
|
||||
func _init(record_data: Dictionary = {}) -> void:
|
||||
data = record_data.duplicate(true)
|
||||
|
||||
|
||||
static func create(
|
||||
observer_id: int,
|
||||
subject_id: int,
|
||||
familiarity: float,
|
||||
trust: float = NEUTRAL_TRUST,
|
||||
last_trust_cause_event_id: int = NO_CAUSE_EVENT
|
||||
) -> RelationshipStateRecord:
|
||||
return (
|
||||
RelationshipStateRecord
|
||||
. new(
|
||||
{
|
||||
"schema_version": SCHEMA_VERSION,
|
||||
"observer_id": observer_id,
|
||||
"subject_id": subject_id,
|
||||
"familiarity": clampf(familiarity, 0.0, 1.0),
|
||||
"trust": clampf(trust, 0.0, 1.0),
|
||||
"last_trust_cause_event_id": last_trust_cause_event_id,
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
static func from_dictionary(record_data: Dictionary) -> RelationshipStateRecord:
|
||||
if int(record_data.get("schema_version", -1)) != SCHEMA_VERSION:
|
||||
return null
|
||||
if not record_data.has_all(
|
||||
["observer_id", "subject_id", "familiarity", "trust", "last_trust_cause_event_id"]
|
||||
):
|
||||
return null
|
||||
var observer_id := int(record_data["observer_id"])
|
||||
var subject_id := int(record_data["subject_id"])
|
||||
var familiarity := float(record_data["familiarity"])
|
||||
var trust := float(record_data["trust"])
|
||||
var cause_event_id := int(record_data["last_trust_cause_event_id"])
|
||||
if observer_id < 0 or subject_id < 0 or observer_id == subject_id:
|
||||
return null
|
||||
if familiarity < 0.0 or familiarity > 1.0 or trust < 0.0 or trust > 1.0:
|
||||
return null
|
||||
if cause_event_id < NO_CAUSE_EVENT:
|
||||
return null
|
||||
return create(observer_id, subject_id, familiarity, trust, cause_event_id)
|
||||
|
||||
|
||||
func get_observer_id() -> int:
|
||||
return int(data["observer_id"])
|
||||
|
||||
|
||||
func get_subject_id() -> int:
|
||||
return int(data["subject_id"])
|
||||
|
||||
|
||||
func get_familiarity() -> float:
|
||||
return float(data["familiarity"])
|
||||
|
||||
|
||||
func get_trust() -> float:
|
||||
return float(data["trust"])
|
||||
|
||||
|
||||
func get_last_trust_cause_event_id() -> int:
|
||||
return int(data["last_trust_cause_event_id"])
|
||||
|
||||
|
||||
func increase_familiarity(amount: float) -> float:
|
||||
var previous := get_familiarity()
|
||||
data["familiarity"] = clampf(previous + maxf(amount, 0.0), 0.0, 1.0)
|
||||
return get_familiarity() - previous
|
||||
|
||||
|
||||
func increase_trust(amount: float, cause_event_id: int) -> float:
|
||||
var previous := get_trust()
|
||||
data["trust"] = clampf(previous + maxf(amount, 0.0), 0.0, 1.0)
|
||||
var applied := get_trust() - previous
|
||||
if applied > 0.0:
|
||||
data["last_trust_cause_event_id"] = cause_event_id
|
||||
return applied
|
||||
|
||||
|
||||
func to_dictionary() -> Dictionary:
|
||||
return data.duplicate(true)
|
||||
Reference in New Issue
Block a user