protected override void OnActionUpdate(FixPoint delta_time) { SkillComponent skill_component = m_context.GetData <SkillComponent>(BTContextKey.OwnerSkillComponent); Skill owner_skill = skill_component.GetOwnerSkill(); owner_skill.BuildSkillTargets(m_target_gathering_param); }
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; }
void Impact() { Skill skill = GetOwnerSkill(); if (!skill.GetDefinitionComponent().NeedGatherTargets) { skill.BuildSkillTargets(); } List <Target> targets = skill.GetTargets(); Entity caster = GetOwnerEntity(); EffectApplicationData app_data = RecyclableObject.Create <EffectApplicationData>(); app_data.m_original_entity_id = caster.ID; app_data.m_source_entity_id = caster.ID; m_generator.Activate(app_data, targets); m_current_target = null; RecyclableObject.Recycle(app_data); #if COMBAT_CLIENT if (m_render_effect_cfgid > 0 && m_render_delay_time <= FixPoint.Zero) { PlayRenderEffect(); } #endif }