Exemplo n.º 1
0
        //Public
        /// <summary>
        /// 효과를 추가합니다.
        /// </summary>
        public void AddEffect(CharacterEffect effect, EffectStateStruct state)
        {
            if (m_Effect.TryGetValue(effect, out EffectStateStruct originalState))
            {
                originalState.Replace(state);
                m_Effect[effect] = originalState;
            }
            else
            {
                m_Effect.Add(effect, state);

                //초기화
                effect.Init(this);

                //DefaultVFX에서 효과 갯수를 추가한다.
                LoopDefaultVFX(effect, (Type effectType, EffectVFXStateStruct vfxState) =>
                {
                    vfxState.effectCount++;
                    m_DefaultVFX[effectType] = vfxState;

                    //효과가 추가된 기본 VFX 재생
                    vfxState.vfx.OpenVFX();
                });
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// 해당 효과의 상태를 설정합니다.
 /// </summary>
 /// <param name="effect">효과</param>
 /// <param name="newState">변경할 상태</param>
 public void SetEffectState(CharacterEffect effect, EffectStateStruct newState)
 {
     if (m_Effect.ContainsKey(effect))
     {
         m_Effect[effect] = newState;
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// 현재 적용된 모든 이펙트를 가져옵니다.
        /// </summary>
        /// <returns></returns>
        public CharacterEffect[] GetEffect_All()
        {
            CharacterEffect[] effect = new CharacterEffect[m_Effect.Keys.Count];
            m_Effect.Keys.CopyTo(effect, 0);

            return(effect);
        }
Exemplo n.º 4
0
 /// <summary>
 /// 해당 효과의 상태를 가져옵니다.
 /// </summary>
 /// <param name="effect">효과</param>
 /// <returns></returns>
 public EffectStateStruct?GetEffectState(CharacterEffect effect)
 {
     if (m_Effect.TryGetValue(effect, out EffectStateStruct state))
     {
         return(state);
     }
     else
     {
         return(null);
     }
 }
Exemplo n.º 5
0
        //Private
        /// <summary>
        /// 해당 이펙트 타입에 해당하는 DefaultVFX를 전부 탐색합니다.
        /// </summary>
        /// <param name="effect"></param>
        private void LoopDefaultVFX(CharacterEffect effect, Action <Type, EffectVFXStateStruct> call)
        {
            Type effectType = effect.GetType();

            while (effectType.BaseType != null)
            {
                if (m_DefaultVFX.TryGetValue(effectType, out EffectVFXStateStruct vfxState))
                {
                    call(effectType, vfxState);
                }
                effectType = effectType.BaseType;
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 효과를 제거합니다.
        /// </summary>
        public void RemoveEffect(CharacterEffect effect)
        {
            if (m_Effect.Remove(effect))
            {
                //DefaultVFX에서 효과 갯수를 제거한다.
                LoopDefaultVFX(effect, (Type effectType, EffectVFXStateStruct vfxState) =>
                {
                    vfxState.effectCount--;
                    m_DefaultVFX[effectType] = vfxState;

                    //효과로 제거된 기본 VFX 재생 중지
                    if (vfxState.effectCount < 0)
                    {
                        vfxState.vfx.CloseVFX(false);
                    }
                });
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// 해당 효과의 상태를 설정합니다.
 /// </summary>
 /// <param name="effect">효과</param>
 /// <param name="newState">변경할 상태</param>
 public void SetEffectState(CharacterEffect effect, EffectStateStruct newState)
 {
     m_EffectList.SetEffectState(effect, newState);
 }
Exemplo n.º 8
0
 /// <summary>
 /// 해당 효과의 상태를 가져옵니다.
 /// </summary>
 /// <param name="effect">효과</param>
 /// <returns></returns>
 public EffectStateStruct?GetEffectState(CharacterEffect effect)
 {
     return(m_EffectList.GetEffectState(effect));
 }
Exemplo n.º 9
0
 /// <summary>
 /// 캐릭터 효과를 제거합니다.
 /// </summary>
 /// <param name="effect"></param>
 public void RemoveEffect(CharacterEffect effect)
 {
     m_EffectList.RemoveEffect(effect);
     OnRemoveEffect(effect);
 }
Exemplo n.º 10
0
 /// <summary>
 /// 캐릭터 효과를 추가합니다.
 /// </summary>
 /// <param name="effect">추가할 효과</param>
 public void AddEffect(CharacterEffect effect, EffectStateStruct state)
 {
     m_EffectList.AddEffect(effect, state);
     OnAddEffect(effect);
 }
Exemplo n.º 11
0
 /// <summary>
 /// 캐릭터 효과가 제거될 때 호출됩니다.
 /// </summary>
 /// <param name="effect"></param>
 protected virtual void OnRemoveEffect(CharacterEffect effect)
 {
 }
Exemplo n.º 12
0
 /// <summary>
 /// 캐릭터 효과가 추가되었을 떄 호출됩니다.
 /// </summary>
 /// <param name="effect"></param>
 protected virtual void OnAddEffect(CharacterEffect effect)
 {
 }