Exemple #1
0
        /// <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)}");
            }
        }
Exemple #2
0
        /// <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);
                }
            }
        }