| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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);
- }
- 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);
- }
- }
- }
- }
- }
|