public override void Apply() { if (m_task == null) { m_task = LogicTask.Create <ComponentCommonTaskWithLastingTime>(); } EffectDefinitionComponent definition_component = ((Effect)ParentObject).GetDefinitionComponent(); Entity entity = GetLogicWorld().GetEntityManager().GetObject(definition_component.SourceEntityID); if (entity != null) { PositionComponent position_component = entity.GetComponent(PositionComponent.ID) as PositionComponent; if (position_component != null) { m_direction = position_component.Facing3D; } } m_task.Construct(this, m_time); var schedeler = GetLogicWorld().GetTaskScheduler(); schedeler.Schedule(m_task, GetCurrentTime(), LOGIC_UPDATE_INTERVAL, LOGIC_UPDATE_INTERVAL); #if COMBAT_CLIENT LocomoteRenderMessage msg = RenderMessage.Create <LocomoteRenderMessage>(); msg.ConstructAsStartMoving(GetOwnerEntityID(), true, LocomoteRenderMessage.NotLocomotion); GetLogicWorld().AddRenderMessage(msg); #endif }
public static void KillEntity(Entity entity, int killer_id) { DeathComponent death_component = entity.GetComponent(DeathComponent.ID) as DeathComponent; if (death_component != null) { death_component.KillOwner(killer_id); } else { //Player player = entity.GetOwnerPlayer(); //Entity killer = entity.GetLogicWorld().GetEntityManager().GetObject(killer_id); //player.OnEntityBeKilled(killer, entity); //if (killer != null) //{ // Player killer_player = killer.GetOwnerPlayer(); // killer_player.OnKillEntity(killer, entity); //} //没有死亡组件的就从简了 entity.SendSignal(SignalType.Die); entity.GetLogicWorld().AddSimpleRenderMessage(RenderMessageType.Die, entity.ID); entity.DeletePending = true; var schedeler = entity.GetLogicWorld().GetTaskScheduler(); DeleteEntityTask delete_task = LogicTask.Create <DeleteEntityTask>(); delete_task.Construct(entity.ID); schedeler.Schedule(delete_task, entity.GetCurrentTime(), ms_death_delay); } }
public void Explode(Entity entity) { #if COMBAT_CLIENT if (m_collision_sound_cfgid > 0) { PlaySoundMessage sound_msg = RenderMessage.Create <PlaySoundMessage>(); sound_msg.Construct(GetOwnerEntityID(), m_collision_sound_cfgid, FixPoint.MinusOne); GetLogicWorld().AddRenderMessage(sound_msg); } #endif ApplyGenerator(entity); if (entity == null || !m_pierce_entity) { #if COMBAT_CLIENT LocomoteRenderMessage msg = RenderMessage.Create <LocomoteRenderMessage>(); msg.ConstructAsStopMoving(ParentObject.ID, true); GetLogicWorld().AddRenderMessage(msg); #endif if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } EntityUtil.KillEntity((Entity)ParentObject, ParentObject.ID); } }
protected override void OnDestruct() { if (m_die_task != null) { m_die_task.Cancel(); LogicTask.Recycle(m_die_task); m_die_task = null; } EffectManager effect_manager = GetLogicWorld().GetEffectManager(); if (m_born_generator != null) { effect_manager.DestroyGenerator(m_born_generator.ID, GetOwnerEntityID()); m_born_generator = null; } if (m_die_generator != null) { effect_manager.DestroyGenerator(m_die_generator.ID, GetOwnerEntityID()); m_die_generator = null; } if (m_killer_generator != null) { effect_manager.DestroyGenerator(m_killer_generator.ID, GetOwnerEntityID()); m_killer_generator = null; } }
public override void ResetNode() { if (m_listener_context != null) { Entity owner = m_context.GetData <Entity>(BTContextKey.OwnerEntity); for (int i = 0; i < m_signal_datas.Count; ++i) { owner.RemoveListener(m_signal_datas[i].m_signal_id, m_listener_context.ID); } SignalListenerContext.Recycle(m_listener_context); m_listener_context = null; m_context.GetLogicWorld().UnregisterBehaviorTree(this); m_register_id = 0; } ClearRunningTrace(); base.ResetNode(); if (m_context != null) { BTContext context = m_context; SetContext(null); RecyclableObject.Recycle(context); } m_current_running_entry_index = -1; if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } }
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 override void Inflict(FixPoint start_time) { if (m_generator == null) { return; } if (m_delay_time == FixPoint.Zero) { Impact(); } else { if (m_delay_task == null) { m_delay_task = LogicTask.Create <ComponentCommonTask>(); m_delay_task.Construct(this); } var schedeler = GetLogicWorld().GetTaskScheduler(); schedeler.Schedule(m_delay_task, GetCurrentTime(), m_delay_time); } #if COMBAT_CLIENT if (m_render_effect_cfgid > 0 && m_render_delay_time > FixPoint.Zero) { if (m_render_delay_task == null) { m_render_delay_task = LogicTask.Create <PlayRenderEffectTask>(); m_render_delay_task.Construct(this); } var schedeler = GetLogicWorld().GetTaskScheduler(); schedeler.Schedule(m_render_delay_task, GetCurrentTime(), m_render_delay_time); } #endif }
protected override void OnDestruct() { EffectManager effect_manager = GetLogicWorld().GetEffectManager(); if (m_enter_generator != null) { effect_manager.DestroyGenerator(m_enter_generator.ID, GetOwnerEntityID()); m_enter_generator = null; } if (m_period_generator != null) { effect_manager.DestroyGenerator(m_period_generator.ID, GetOwnerEntityID()); m_period_generator = null; } if (m_region != null) { m_region.Destruct(); m_region = null; } if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } }
protected override void PostInitializeComponent() { Entity owner = GetOwnerEntity(); PositionComponent position_component = owner.GetComponent(PositionComponent.ID) as PositionComponent; if (position_component == null) { return; } EffectManager effect_manager = GetLogicWorld().GetEffectManager(); if (m_enter_generator_cfgid > 0) { m_enter_generator = effect_manager.CreateGenerator(m_enter_generator_cfgid, owner); } if (m_period_generator_cfgid > 0) { m_period_generator = effect_manager.CreateGenerator(m_period_generator_cfgid, owner); } m_region = GetLogicWorld().GetRegionCallbackManager().CreateRegion(); m_region.Construct(this, owner); m_region.SetUpdateInterval(m_region_update_interval); m_region.SetTargetGatheringParam(m_target_gathering_param); m_region.Activate(); if (m_period_generator != null) { m_task = LogicTask.Create <ComponentCommonTask>(); m_task.Construct(this); var schedeler = GetLogicWorld().GetTaskScheduler(); schedeler.Schedule(m_task, GetCurrentTime(), m_period, m_period); } }
public void InitParam(ProjectileParameters param) { m_param = param; if (m_trajectory_type == TrajectoryTypeBezier) { m_param.m_bezier_b = (m_param.m_start_position + m_param.m_target_position) / FixPoint.Two; m_param.m_bezier_b.y += m_extra_hight; } if (m_param.m_life_time <= FixPoint.Zero) { m_param.m_life_time = m_life_time; } PositionComponent position_component = ParentObject.GetComponent(PositionComponent.ID) as PositionComponent; GridGraph grid_graph = position_component.GetGridGraph(); GridNode node = grid_graph.Position2Node(position_component.CurrentPosition); m_previous_walkable = (node != null && node.Walkable); if (m_task == null) { m_task = LogicTask.Create <UpdateProjectileTask>(); } m_task.Construct(this, m_param.m_life_time); var schedeler = GetLogicWorld().GetTaskScheduler(); schedeler.Schedule(m_task, GetCurrentTime(), LOGIC_UPDATE_INTERVAL, LOGIC_UPDATE_INTERVAL); #if COMBAT_CLIENT LocomoteRenderMessage msg = RenderMessage.Create <LocomoteRenderMessage>(); msg.ConstructAsStartMoving(ParentObject.ID, true); GetLogicWorld().AddRenderMessage(msg); #endif }
protected override void OnDestruct() { if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } }
void CancelTask() { if (m_combo_task == null) { return; } m_combo_task.Cancel(); LogicTask.Recycle(m_combo_task); m_combo_task = null; }
protected override void OnDestruct() { DeleteLocomotorSpeedRateTask(); if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } }
void DeleteLocomotorSpeedRateTask() { if (m_update_locomotor_speed_rate_task == null) { return; } m_update_locomotor_speed_rate_task.Cancel(); LogicTask.Recycle(m_update_locomotor_speed_rate_task); m_update_locomotor_speed_rate_task = null; }
public void KillOwner(int killer_id) { //ZZWTODO Resurrect if (m_die_task != null) { m_die_task.Cancel(); } LogicWorld logic_world = GetLogicWorld(); Entity killer = logic_world.GetEntityManager().GetObject(killer_id); if (!DieSilently && killer_id != ParentObject.ID && m_killer_generator != null && killer != null) { EffectApplicationData app_data = RecyclableObject.Create <EffectApplicationData>(); app_data.m_original_entity_id = ParentObject.ID; app_data.m_source_entity_id = ParentObject.ID; m_killer_generator.Activate(app_data, killer); RecyclableObject.Recycle(app_data); } var schedeler = logic_world.GetTaskScheduler(); if (DieSilently) { logic_world.AddSimpleRenderMessage(RenderMessageType.Hide, ParentObject.ID); } else { HideEntityTask hide_task = LogicTask.Create <HideEntityTask>(); hide_task.Construct(ParentObject.ID); schedeler.Schedule(hide_task, GetCurrentTime(), m_hide_delay); } ParentObject.DeletePending = true; ParentObject.SendSignal(SignalType.Die); logic_world.AddSimpleRenderMessage(RenderMessageType.Die, ParentObject.ID); StateComponent state_component = ParentObject.GetComponent(StateComponent.ID) as StateComponent; if (state_component != null) { state_component.AddState(StateSystem.DEAD_STATE, 0); } if (!m_can_resurrect) { DeleteEntityTask delete_task = LogicTask.Create <DeleteEntityTask>(); delete_task.Construct(ParentObject.ID); schedeler.Schedule(delete_task, GetCurrentTime(), m_delete_delay); } logic_world.OnKillEntity(killer, GetOwnerEntity()); }
void Schedule() { if (m_task == null) { m_task = LogicTask.Create <ComponentCommonTask>(); m_task.Construct(this); } var schedeler = GetLogicWorld().GetTaskScheduler(); schedeler.Schedule(m_task, GetCurrentTime(), FixPoint.One, FixPoint.One); }
public override void Unapply() { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; #if COMBAT_CLIENT LocomoteRenderMessage msg = RenderMessage.Create <LocomoteRenderMessage>(); msg.ConstructAsStopMoving(GetOwnerEntityID(), false, LocomoteRenderMessage.NotFromCommand); GetLogicWorld().AddRenderMessage(msg); #endif }
protected override void OnDestruct() { SignalListenerContext.Recycle(m_listener_context); m_listener_context = null; if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } }
public void ScheduleTargeting(FixPoint delay) { if (m_task == null) { m_task = LogicTask.Create <ComponentCommonTask>(); m_task.Construct(this); } LogicWorld logic_world = GetLogicWorld(); var task_scheduler = logic_world.GetTaskScheduler(); task_scheduler.Schedule(m_task, logic_world.GetCurrentTime(), delay); }
protected override void OnDestruct() { RecyclableObject.Recycle(m_damage_amount); m_damage_amount = null; if (m_period_task != null) { m_period_task.Cancel(); LogicTask.Recycle(m_period_task); m_period_task = null; } }
protected override void PreDestruct() { if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } if (m_is_active) { Deactivate(true); } }
protected override void OnDestruct() { if (m_collision_target_generator != null) { GetLogicWorld().GetEffectManager().DestroyGenerator(m_collision_target_generator.ID, GetOwnerEntityID()); m_collision_target_generator = null; } if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } }
protected override void OnDestruct() { if (m_param != null) { RecyclableObject.Recycle(m_param); m_param = null; } if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } }
protected override void OnDestruct() { m_targeting_component = null; SignalListenerContext.Recycle(m_listener_context); m_listener_context = null; if (m_task != null) { m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; } ClearTargets(); m_current_enemy = null; }
public void Construct(LogicWorld logic_world) { if (m_context == null) { BTContext context = RecyclableObject.Create <BTContext>(); context.Construct(logic_world, this); SetContext(context); } if (m_task == null) { m_task = LogicTask.Create <BehaviorTreeTask>(); m_task.Construct(this); } }
public override void Apply() { ApplyDamage(); if (m_period > FixPoint.Zero) { if (m_period_task == null) { m_period_task = LogicTask.Create <ComponentCommonTask>(); m_period_task.Construct(this); } var schedeler = GetLogicWorld().GetTaskScheduler(); schedeler.Schedule(m_period_task, GetCurrentTime(), m_period, m_period); } }
public override void Apply() { m_remain_count = m_object_count; CreateOneObject(); if (m_object_count > 1 || m_object_count == -1) { if (m_task == null) { m_task = LogicTask.Create <ComponentCommonTask>(); m_task.Construct(this); } var schedeler = GetLogicWorld().GetTaskScheduler(); schedeler.Schedule(m_task, GetCurrentTime(), m_interval, m_interval); } }
public void RealInflict() { m_remain_attack_cnt = m_combo_attack_cnt; Impact(); if (m_combo_attack_cnt > 1) { if (m_combo_task == null) { m_combo_task = LogicTask.Create <ComboAttackTask>(); m_combo_task.Construct(this); } var schedeler = GetLogicWorld().GetTaskScheduler(); schedeler.Schedule(m_combo_task, GetCurrentTime(), m_combo_interval, m_combo_interval); } }
void StopSpurt() { if (m_task == null) { return; } m_task.Cancel(); LogicTask.Recycle(m_task); m_task = null; #if COMBAT_CLIENT LocomoteRenderMessage msg = RenderMessage.Create <LocomoteRenderMessage>(); msg.ConstructAsStopMoving(GetOwnerEntityID(), false, LocomoteRenderMessage.NotFromCommand); GetLogicWorld().AddRenderMessage(msg); #endif }
void StartLocomotorSpeedRateTask() { if (m_update_locomotor_speed_rate_task != null) { return; } var schedeler = GetLogicWorld().GetTaskScheduler(); if (schedeler == null) { return; //ZZWTOOD 世界销毁的时候 } m_update_locomotor_speed_rate_task = LogicTask.Create <UpdateLocomotorSpeedRateTask>(); m_update_locomotor_speed_rate_task.Construct(this); schedeler.Schedule(m_update_locomotor_speed_rate_task, GetCurrentTime(), FixPoint.PrecisionFP); }