| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using UnityEngine;
- using System.Collections.Generic;
- public class TeamCohesionManager : MonoBehaviour
- {
- public List<CharacterInGroup> 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);
- Debug.Log($"{from} affecte {to} avec {action}, nouvelle relation : {target.relations.Get(from)}");
- }
- 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);
- Debug.Log($"{ally.characterName} en veut à {hurt.characterName} pour s'être mis en danger devant lui.");
- }
- }
- }
- }
- }
|