public void Impact()
        {
            m_remain_attack_cnt = m_combo_attack_cnt;
            if (m_combo_type_crc == ComboType_Time)
            {
                CreateOneObject(0);
                if (m_combo_attack_cnt > 1)
                {
                    if (m_task == null)
                    {
                        m_task = LogicTask.Create <ComponentCommonTask>();
                        m_task.Construct(this);
                    }
                    var schedeler = GetLogicWorld().GetTaskScheduler();
                    schedeler.Schedule(m_task, GetCurrentTime(), m_combo_interval, m_combo_interval);
                }
            }
            else if (m_combo_type_crc == ComboType_Angle || m_combo_type_crc == ComboType_Circle)
            {
                for (int i = 0; i < m_combo_attack_cnt; ++i)
                {
                    CreateOneObject(i);
                }
            }

#if COMBAT_CLIENT
            if (m_render_effect_cfgid > 0)
            {
                PlayRenderEffectMessage msg = RenderMessage.Create <PlayRenderEffectMessage>();
                msg.ConstructAsPlay(GetOwnerEntityID(), m_render_effect_cfgid, FixPoint.MinusOne);
                GetLogicWorld().AddRenderMessage(msg);
            }
#endif
        }
        public void PlayRenderEffect()
        {
            PlayRenderEffectMessage msg = RenderMessage.Create <PlayRenderEffectMessage>();

            msg.ConstructAsPlay(GetOwnerEntityID(), m_render_effect_cfgid, FixPoint.MinusOne);
            GetLogicWorld().AddRenderMessage(msg);
        }
Ejemplo n.º 3
0
        bool Deactivate(bool force)
        {
            if (!m_is_active)
            {
                return(false);
            }

            m_definition_component.ClearTimer(SkillTimer.CastingTimer);
            m_definition_component.ClearTimer(SkillTimer.InflictingTimer);
            m_definition_component.ClearTimer(SkillTimer.ExpirationTimer);

            var enumerator = m_components.GetEnumerator();

            while (enumerator.MoveNext())
            {
                SkillComponent cmp = enumerator.Current.Value as SkillComponent;
                if (cmp != null)
                {
                    cmp.Deactivate(force);
                }
            }

            SetSkillActive(false);

#if COMBAT_CLIENT
            int render_effect_cfgid = m_definition_component.GetMainRenderEffectConfigID();
            if (render_effect_cfgid > 0)
            {
                PlayRenderEffectMessage msg = RenderMessage.Create <PlayRenderEffectMessage>();
                msg.ConstructAsStop(GetOwnerEntityID(), render_effect_cfgid);
                GetLogicWorld().AddRenderMessage(msg);
            }
#endif
            return(true);
        }
Ejemplo n.º 4
0
        protected override void OnActionUpdate(FixPoint delta_time)
        {
#if COMBAT_CLIENT
            Skill skill = GetOwnerSkill();
            PlayRenderEffectMessage start_msg = RenderMessage.Create <PlayRenderEffectMessage>();
            start_msg.ConstructAsPlay(skill.GetOwnerEntityID(), m_render_effect_cfgid, FixPoint.MinusOne);
            GetLogicWorld().AddRenderMessage(start_msg);
#endif
        }
Ejemplo n.º 5
0
        public override void ClearRunningTrace()
        {
#if COMBAT_CLIENT
            Skill skill = GetOwnerSkill();
            PlayRenderEffectMessage stop_msg = RenderMessage.Create <PlayRenderEffectMessage>();
            stop_msg.ConstructAsStop(skill.GetOwnerEntityID(), m_render_effect_cfgid);
            GetLogicWorld().AddRenderMessage(stop_msg);
#endif
        }
Ejemplo n.º 6
0
        public void Impact()
        {
#if COMBAT_CLIENT
            if (m_render_effect_cfgid > 0)
            {
                if (m_remain_attack_cnt != m_combo_attack_cnt)
                {
                    PlayRenderEffectMessage stop_msg = RenderMessage.Create <PlayRenderEffectMessage>();
                    stop_msg.ConstructAsStop(GetOwnerEntityID(), m_render_effect_cfgid);
                    GetLogicWorld().AddRenderMessage(stop_msg);
                }
                PlayRenderEffectMessage start_msg = RenderMessage.Create <PlayRenderEffectMessage>();
                start_msg.ConstructAsPlay(GetOwnerEntityID(), m_render_effect_cfgid, FixPoint.MinusOne);
                GetLogicWorld().AddRenderMessage(start_msg);
            }
#endif
            --m_remain_attack_cnt;
            if (m_remain_attack_cnt <= 0)
            {
                if (m_combo_task != null)
                {
                    m_combo_task.Cancel();
                }
            }
            Skill skill = GetOwnerSkill();
            if (!skill.GetDefinitionComponent().NeedGatherTargets)
            {
                skill.BuildSkillTargets();
            }
            Entity        attacker    = GetOwnerEntity();
            List <Target> targets     = skill.GetTargets();
            LogicWorld    logic_world = GetLogicWorld();
            for (int i = 0; i < targets.Count; ++i)
            {
                m_current_target = targets[i].GetEntity(logic_world);
                if (m_current_target == null)
                {
                    continue;
                }
                DamagableComponent damageable_component = m_current_target.GetComponent(DamagableComponent.ID) as DamagableComponent;
                if (damageable_component == null)
                {
                    continue;
                }
                Damage damage = RecyclableObject.Create <Damage>();
                damage.m_attacker_id         = attacker.ID;
                damage.m_defender_id         = m_current_target.ID;
                damage.m_damage_type         = m_damage_type_id;
                damage.m_damage_amount       = m_damage_amount.Evaluate(this);
                damage.m_damage_amount       = DamageSystem.Instance.CalculateDamageAmount(m_damage_type_id, damage.m_damage_amount, attacker, m_current_target);
                damage.m_render_effect_cfgid = m_damage_render_effect_cfgid;
                damage.m_sound_cfgid         = m_damage_sound_cfgid;
                damageable_component.TakeDamage(damage);
            }
            m_current_target = null;
        }
        public override void Unapply()
        {
#if COMBAT_CLIENT
            if (m_render_effect_cfgid > 0)
            {
                PlayRenderEffectMessage stop_msg = RenderMessage.Create <PlayRenderEffectMessage>();
                stop_msg.ConstructAsStop(GetOwnerEntityID(), m_render_effect_cfgid);
                GetLogicWorld().AddRenderMessage(stop_msg);
            }
#endif
        }
        public override void Apply()
        {
#if COMBAT_CLIENT
            if (m_render_effect_cfgid > 0)
            {
                PlayRenderEffectMessage msg = RenderMessage.Create <PlayRenderEffectMessage>();
                msg.ConstructAsPlay(GetOwnerEntityID(), m_render_effect_cfgid, FixPoint.MinusOne);
                GetLogicWorld().AddRenderMessage(msg);
            }
#endif
        }
        public override void Deactivate(bool force)
        {
            m_generator.Deactivate();
#if COMBAT_CLIENT
            if (m_render_effect_cfgid > 0)
            {
                PlayRenderEffectMessage stop_msg = RenderMessage.Create <PlayRenderEffectMessage>();
                stop_msg.ConstructAsStop(GetOwnerEntityID(), m_render_effect_cfgid);
                GetLogicWorld().AddRenderMessage(stop_msg);
            }
#endif
        }
Ejemplo n.º 10
0
        void ActivateState(StateData data)
        {
            for (int i = 0; i < data.m_disable_componnets.Count; ++i)
            {
                Component component = ParentObject.GetComponent(data.m_disable_componnets[i]);
                if (component != null)
                {
                    component.Disable();
                }
            }
#if COMBAT_CLIENT
            if (data.m_render_effect_cfgid > 0)
            {
                PlayRenderEffectMessage msg = RenderMessage.Create <PlayRenderEffectMessage>();
                msg.ConstructAsPlay(GetOwnerEntityID(), data.m_render_effect_cfgid, FixPoint.MinusOne);
                GetLogicWorld().AddRenderMessage(msg);
            }
#endif
        }
Ejemplo n.º 11
0
        bool PostActivate(FixPoint start_time)
        {
            if (m_definition_component.NeedGatherTargets)
            {
                BuildSkillTargets();
                if (!CheckTargetRange())
                {
                    Deactivate(false);
                    return(false);
                }
            }

            FixPoint mana_cost = m_definition_component.ManaCost;

            if (mana_cost > FixPoint.Zero)
            {
                if (!m_mana_component.ChangeMana(m_definition_component.ManaType, -mana_cost))
                {
                    Deactivate(false);
                    return(false);
                }
            }

            var enumerator = m_components.GetEnumerator();

            while (enumerator.MoveNext())
            {
                SkillComponent cmp = enumerator.Current.Value as SkillComponent;
                if (cmp != null)
                {
                    cmp.PostActivate(start_time);
                }
            }

            m_definition_component.StartCooldownTimer(start_time, m_owner_component);

            if (m_definition_component.InflictTime > FixPoint.Zero)
            {
                m_definition_component.StartInflictingTimer(start_time, m_owner_component);
            }
            else
            {
                Inflict(start_time);
            }

            if (m_definition_component.NormalAttack)
            {
                GetOwnerEntity().SendSignal(SignalType.CastNormalAttack);
            }
            else if (!m_definition_component.StartsActive)
            {
                GetOwnerEntity().SendSignal(SignalType.CastSkill);
            }

            string main_animation = m_definition_component.GenerateMainActionNameLogicly();

#if COMBAT_CLIENT
            if (main_animation != null)
            {
                PlayAnimationRenderMessage msg = RenderMessage.Create <PlayAnimationRenderMessage>();
                FixPoint speed = m_definition_component.NormalAttack ? m_owner_component.AttackSpeedRate : FixPoint.One;
                if (m_definition_component.m_expiration_animation == null)
                {
                    msg.Construct(GetOwnerEntityID(), main_animation, AnimationName.IDLE, true, speed);
                }
                else
                {
                    msg.Construct(GetOwnerEntityID(), main_animation, m_definition_component.m_expiration_animation, true, speed);
                }
                GetLogicWorld().AddRenderMessage(msg);
            }
            int render_effect_cfgid = m_definition_component.GetMainRenderEffectConfigID();
            if (render_effect_cfgid > 0)
            {
                PlayRenderEffectMessage msg = RenderMessage.Create <PlayRenderEffectMessage>();
                msg.ConstructAsPlay(GetOwnerEntityID(), render_effect_cfgid, FixPoint.MinusOne);
                GetLogicWorld().AddRenderMessage(msg);
            }
            if (m_definition_component.m_main_sound > 0)
            {
                PlaySoundMessage msg = RenderMessage.Create <PlaySoundMessage>();
                msg.Construct(GetOwnerEntityID(), m_definition_component.m_main_sound, FixPoint.MinusOne);
                GetLogicWorld().AddRenderMessage(msg);
            }
#endif
            return(true);
        }