/// <summary> /// 인자로 받은 에이전트에 대한 상태 변경자를 뺀다. /// </summary> /// <param name="agentAddress"></param> /// <param name="modifier"></param> public void Remove(Address agentAddress, AgentStateModifier modifier) { if (modifier is null || modifier.IsEmpty) { return; } var modifierInfo = _agentModifierInfo; if (agentAddress.Equals(modifierInfo.Address)) { var modifiers = modifierInfo.Modifiers; if (TryGetSameTypeModifier(modifier, modifiers, out var outModifier)) { outModifier.Remove(modifier); if (outModifier.IsEmpty) { modifiers.Remove(outModifier); } modifier = outModifier; } else { modifier = null; } } if (modifier is null) { Debug.LogWarning( $"[{nameof(LocalLayer)}] No found {nameof(modifier)} of {nameof(agentAddress)}"); } }
/// <summary> /// 인자로 받은 에이전트에 대한 상태 변경자를 더한다. /// </summary> /// <param name="agentAddress"></param> /// <param name="modifier"></param> public void Add(Address agentAddress, AgentStateModifier modifier) { // FIXME: 다른 Add() 오버로드와 겹치는 로직이 아주 많음. if (modifier is null || modifier.IsEmpty) { return; } var modifierInfo = _agentModifierInfo; if (agentAddress.Equals(modifierInfo.Address)) { var modifiers = modifierInfo.Modifiers; if (TryGetSameTypeModifier(modifier, modifiers, out var outModifier)) { outModifier.Add(modifier); if (outModifier.IsEmpty) { modifiers.Remove(outModifier); } } else { modifiers.Add(modifier); } } }