using UnityEngine; using System.Collections.Generic; public class TeamCohesionManager : MonoBehaviour { public List groupMembers; public enum ActionType { Heal, Defend, Betray, Ignore } public void ApplyActionEffect(string from, string to, ActionType action) { var source = groupMembers.Find(c => c.characterName == from); var target = groupMembers.Find(c => c.characterName == to); if (source == null || target == null) return; float delta = action switch { ActionType.Heal => 5f, ActionType.Defend => 3f, ActionType.Betray => -10f, ActionType.Ignore => -2f, _ => 0f }; // Race effects if (source.race == CharacterInGroup.RaceType.Elf && target.race == CharacterInGroup.RaceType.Orc) delta -= 3f; if (source.race == CharacterInGroup.RaceType.Human && target.race == CharacterInGroup.RaceType.Human) delta += 1f; // Age difference int ageDiff = Mathf.Abs(source.age - target.age); if (ageDiff > 30) delta -= 1f; // Personality reaction switch (target.personality) { case CharacterInGroup.PersonalityType.Loyal: if (action == ActionType.Defend) delta += 2f; if (action == ActionType.Betray) delta -= 5f; break; case CharacterInGroup.PersonalityType.Ambitious: if (action == ActionType.Heal) delta -= 1f; if (action == ActionType.Ignore) delta -= 2f; break; case CharacterInGroup.PersonalityType.Peaceful: if (action == ActionType.Betray) delta -= 5f; break; case CharacterInGroup.PersonalityType.Impulsive: delta *= 1.5f; break; case CharacterInGroup.PersonalityType.Opportunist: if (action == ActionType.Heal || action == ActionType.Defend) delta += 1f; if (action == ActionType.Ignore) delta -= 3f; break; } target.relations.Modify(from, delta); } public void OnCharacterHurt(string hurtName) { var hurt = groupMembers.Find(c => c.characterName == hurtName); if (hurt == null) return; if (hurt.characterType == CharacterInGroup.CharacterType.Priest) { foreach (var ally in groupMembers) { if (ally.characterType == CharacterInGroup.CharacterType.Warrior && ally.gridY > hurt.gridY) { ally.relations.Modify(hurt.characterName, -5f); } } } } }