Esempio n. 1
0
        public void Construct(AttributeManagerComponent owner_component, AttributeDefinition definition, string base_value)
        {
            m_owner_component    = owner_component;
            m_definition         = definition;
            m_base_value_formula = RecyclableObject.Create <Formula>();
            m_base_value_formula.Compile(base_value);

            int count = 0;
            List <ExpressionVariable> variables = m_base_value_formula.GetAllVariables();

            if (variables != null)
            {
                count = variables.Count;
            }
            for (int i = 0; i < count; ++i)
            {
                ExpressionVariable variable = variables[i];
                if (variable.MaxIndex == 1 && variable[0] == ExpressionVariable.VID_LevelTable)
                {
                    m_is_level_based = true;
                }
            }

            ComputeValue();
            m_definition.Reflect(m_owner_component.ParentObject, this, true);
        }
Esempio n. 2
0
 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;
     }
 }
Esempio n. 3
0
        public void RecycleAllRenderEffects()
        {
            var enumerator = m_nodes.GetEnumerator();

            while (enumerator.MoveNext())
            {
                RenderEffectNode node = enumerator.Current.Value;
                for (int i = 0; i < node.m_render_effects.Count; ++i)
                {
                    RenderEffectInfo info   = node.m_render_effects[i];
                    RenderEffectData config = GetRenderWorld().GetRenderEffectData(info.m_render_effect_cfgid);
                    if (info.m_task != null)
                    {
                        RenderTask.Recycle(info.m_task);
                        info.m_task = null;
                    }
                    if (info.m_go != null)
                    {
                        info.m_go.transform.parent = null;
                        UnityResourceManager.Instance.RecycleGameObject(config.m_prefab, info.m_go);
                        info.m_go = null;
                    }
                    node.m_render_effects.RemoveAt(i);
                    RecyclableObject.Recycle(info);
                }
            }
        }
        void CreateAttribute(int id, string base_value)
        {
            AttributeDefinition definition = AttributeSystem.Instance.GetDefinitionByID(id);

            if (definition == null)
            {
                return;
            }
            List <int> referenced_ids = definition.GetReferencedAttributes();

            for (int i = 0; i < referenced_ids.Count; ++i)
            {
                if (!m_attributes.ContainsKey(referenced_ids[i]))
                {
                    string referenced_attribute_base_value;
                    if (!m_base_value.TryGetValue(referenced_ids[i], out referenced_attribute_base_value))
                    {
                        referenced_attribute_base_value = null;
                    }
                    CreateAttribute(referenced_ids[i], referenced_attribute_base_value);
                }
            }
            Attribute attribute = RecyclableObject.Create <Attribute>();

            attribute.Construct(this, definition, base_value);
            m_attributes[id] = attribute;
        }
Esempio n. 5
0
        public void OnEntityEnter(int entity_id)
        {
            Entity owner = GetOwnerEntity();

            if (ObjectUtil.IsDead(owner))
            {
                return;
            }
            if (m_enter_generator == null)
            {
                return;
            }
            Entity entity = GetLogicWorld().GetEntityManager().GetObject(entity_id);

            if (entity == null)
            {
                return;
            }
            if (ObjectUtil.IsDead(entity))
            {
                return;
            }
            EffectApplicationData app_data = RecyclableObject.Create <EffectApplicationData>();

            app_data.m_original_entity_id = ParentObject.ID;
            app_data.m_source_entity_id   = ParentObject.ID;
            m_enter_generator.Activate(app_data, entity);
            RecyclableObject.Recycle(app_data);
        }
Esempio n. 6
0
        public void DestroyGenerator(int generator_id, int owner_entity_id)
        {
            EffectGenerator generator;

            if (!m_generators.TryGetValue(generator_id, out generator))
            {
                return;
            }
            if (generator.RemoveBySelf && !generator.RemoveSelfWhenIdle)
            {
                generator.RemoveSelfWhenIdle = true;
            }
            else
            {
                generator.ForceDeactivate();
                m_generators.Remove(generator_id);
                Entity owner = m_logic_world.GetEntityManager().GetObject(owner_entity_id);
                EffectGeneratorRegistry registry = EntityUtil.GetEffectGeneratorRegistry(owner);
                if (registry != null)
                {
                    registry.RemoveGenerator(generator_id);
                }
                RecyclableObject.Recycle(generator);
            }
        }
Esempio n. 7
0
 public void BuildSkillTargets()
 {
     ClearTargets();
     if (m_definition_component.m_target_gathering_param.m_type == TargetGatheringType.SpecifiedTarget)
     {
         if (m_definition_component.ExternalDataType == SkillDefinitionComponent.NeedExternalTarget)
         {
             int specified_target_id = m_definition_component.ExternalID;
             if (specified_target_id > 0)
             {
                 Target target = RecyclableObject.Create <Target>();
                 target.Construct();
                 target.SetEntityTarget(specified_target_id);
                 m_skill_targets.Add(target);
             }
         }
         else if (m_definition_component.ExternalDataType == SkillDefinitionComponent.NeedExternalOffset)
         {
             PositionComponent position_component = GetOwnerEntity().GetComponent(PositionComponent.ID) as PositionComponent;
             Target            target             = RecyclableObject.Create <Target>();
             target.Construct();
             target.SetPositionTarget(position_component.CurrentPosition + m_definition_component.ExternalVector);
             m_skill_targets.Add(target);
         }
     }
     else
     {
         TargetGatheringManager target_gathering_manager = GetLogicWorld().GetTargetGatheringManager();
         target_gathering_manager.BuildTargetList(GetOwnerEntity(), m_definition_component.m_target_gathering_param, m_skill_targets);
     }
 }
Esempio n. 8
0
        protected override void OnActionUpdate(FixPoint delta_time)
        {
            SkillComponent skill_component = m_context.GetData <SkillComponent>(BTContextKey.OwnerSkillComponent);
            Skill          skill           = skill_component.GetOwnerSkill();
            Entity         attacker        = skill.GetOwnerEntity();
            List <Target>  targets         = skill.GetTargets();
            LogicWorld     logic_world     = skill.GetLogicWorld();

            for (int i = 0; i < targets.Count; ++i)
            {
                Entity current_target = targets[i].GetEntity(logic_world);
                if (current_target == null)
                {
                    continue;
                }
                skill_component.CurrentTarget = current_target;
                DamagableComponent damageable_component = 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         = 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, current_target);
                damage.m_render_effect_cfgid = m_damage_render_effect_cfgid;
                damage.m_sound_cfgid         = m_damage_sound_cfgid;
                damageable_component.TakeDamage(damage);
            }
            skill_component.CurrentTarget = null;
        }
Esempio n. 9
0
        public override void InitializeVariable(Dictionary <string, string> variables)
        {
            string value;

            if (variables.TryGetValue("count", out value))
            {
                m_count            = int.Parse(value);
                m_modefier_configs = new AttributeModifierConfig[m_count];
                Prepare(m_count);
            }
            for (int i = 0; i < m_count; ++i)
            {
                AttributeModifierConfig modifier = RecyclableObject.Create <AttributeModifierConfig>();
                m_modefier_configs[i] = modifier;
                if (variables.TryGetValue(m_attribute_name_key[i], out value))
                {
                    modifier.m_attribute_id = (int)CRC.Calculate(value);
                }
                if (variables.TryGetValue(m_attribute_category_key[i], out value))
                {
                    modifier.m_attribute_category = (int)CRC.Calculate(value);
                }
                if (variables.TryGetValue(m_value_key[i], out value))
                {
                    modifier.m_value.Compile(value);
                }
            }
        }
 public void DestroyRegion(EntityGatheringRegion region)
 {
     if (m_regions.Remove(region.ID))
     {
         region.Deactivate();
         RecyclableObject.Recycle(region);
     }
 }
Esempio n. 11
0
 void ClearMovementProvider()
 {
     if (m_movement_provider != null)
     {
         RecyclableObject.Recycle(m_movement_provider);
         m_movement_provider = null;
     }
 }
Esempio n. 12
0
 void RecycleVariable()
 {
     for (int i = 0; i < m_variables.Count; ++i)
     {
         RecyclableObject.Recycle(m_variables[i]);
     }
     m_variables.Clear();
 }
Esempio n. 13
0
 protected override void ResetRuntimeData()
 {
     if (m_program != null)
     {
         RecyclableObject.Recycle(m_program);
         m_program = null;
     }
 }
        public EntityGatheringRegion CreateRegion()
        {
            EntityGatheringRegion region = RecyclableObject.Create <EntityGatheringRegion>();

            region.PreConstruct(this);
            m_regions[region.ID] = region;
            return(region);
        }
Esempio n. 15
0
 void ClearTargets()
 {
     for (int i = 0; i < m_targets.Count; ++i)
     {
         RecyclableObject.Recycle(m_targets[i]);
     }
     m_targets.Clear();
 }
 protected override void OnDestruct()
 {
     for (int i = 0; i < m_movement_predicts.Count; ++i)
     {
         MovementPredict predict = m_movement_predicts[i];
         RecyclableObject.Recycle(predict);
     }
     m_movement_predicts.Clear();
 }
Esempio n. 17
0
 protected override void OnDestruct()
 {
     for (int i = 0; i < m_count; ++i)
     {
         RecyclableObject.Recycle(m_modefier_configs[i]);
     }
     m_modefier_configs = null;
     m_modifier_ids     = null;
 }
Esempio n. 18
0
        public static SignalListenerContext CreateForBehaviorTree(int listener_id, int tree_id)
        {
            SignalListenerContext context = RecyclableObject.Create <SignalListenerContext>();

            context.m_context_type = SignalListenerContextType.BehaviorTree;
            context.m_listener_id  = listener_id;
            context.m_object_id    = tree_id;
            return(context);
        }
Esempio n. 19
0
 public void Reset()
 {
     m_constant = FixPoint.Zero;
     if (m_program != null)
     {
         RecyclableObject.Recycle(m_program);
         m_program = null;
     }
 }
Esempio n. 20
0
        void ApplyGenerator(EffectGenerator generator)
        {
            EffectApplicationData app_data = RecyclableObject.Create <EffectApplicationData>();

            app_data.m_original_entity_id = ParentObject.ID;
            app_data.m_source_entity_id   = ParentObject.ID;
            generator.Activate(app_data, GetOwnerEntity());
            RecyclableObject.Recycle(app_data);
        }
Esempio n. 21
0
 public void CopyFrom(Formula rhs)
 {
     m_constant = rhs.m_constant;
     if (rhs.m_program != null)
     {
         m_program = RecyclableObject.Create <ExpressionProgram>();
         m_program.CopyFrom(rhs.m_program);
     }
 }
Esempio n. 22
0
        public void OnEntityBeKilled(Entity the_killer, Entity the_dead)
        {
            KillingInfo info = RecyclableObject.Create <KillingInfo>();

            info.m_the_killer = the_killer;
            info.m_the_dead   = the_dead;
            SendSignal(SignalType.EntityBeKilled, info);
            RecyclableObject.Recycle(info);
        }
Esempio n. 23
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;
        }
Esempio n. 24
0
 public void Reset()
 {
     if (m_text_buffer != null)
     {
         RecyclableObject.Recycle(m_text_buffer);
     }
     m_text_buffer   = null;
     m_error         = false;
     m_current_token = null;
 }
Esempio n. 25
0
        public static SignalListenerContext CreateForEffectComponent(int listener_id, int effect_id, int component_type_id)
        {
            SignalListenerContext context = RecyclableObject.Create <SignalListenerContext>();

            context.m_context_type      = SignalListenerContextType.EffectComponent;
            context.m_listener_id       = listener_id;
            context.m_object_id         = effect_id;
            context.m_component_type_id = component_type_id;
            return(context);
        }
Esempio n. 26
0
        int AddVariable(List <string> raw_variable)
        {
            ExpressionVariable variable = RecyclableObject.Create <ExpressionVariable>();

            variable.Construct(raw_variable);
            int index = m_variables.Count;

            m_variables.Add(variable);
            return(index);
        }
Esempio n. 27
0
        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());
        }
Esempio n. 28
0
        protected override void OnActionUpdate(FixPoint delta_time)
        {
            if (m_program == null)
            {
                m_program = RecyclableObject.Create <ExpressionProgram>();
                m_program.Compile(m_context_value_expression);
            }
            FixPoint context_value = m_program.Evaluate(this);

            m_context.SetData(m_context_key, context_value);
        }
Esempio n. 29
0
        public void RemoveModifier(int modifier_id)
        {
            AttributeModifier modifier;

            if (!m_modifiers.TryGetValue(modifier_id, out modifier))
            {
                return;
            }
            m_modifiers.Remove(modifier_id);
            RecyclableObject.Recycle(modifier);
            MarkDirty();
        }
Esempio n. 30
0
 void ClearTargets()
 {
     if (m_targets == null)
     {
         return;
     }
     for (int i = 0; i < m_targets.Count; ++i)
     {
         RecyclableObject.Recycle(m_targets[i]);
     }
     m_targets.Clear();
 }