Beispiel #1
0
        public PositionComponent GetNearestEnemy(Entity source_entity)
        {
            Player                   source_player       = source_entity.GetOwnerPlayer();
            PositionComponent        source_position_cmp = source_entity.GetComponent(PositionComponent.ID) as PositionComponent;
            Vector3FP                source_position     = source_position_cmp.CurrentPosition;
            List <PositionComponent> list = source_position_cmp.GetSpacePartition().CollectEntity_All();

            PositionComponent potential_enemy = null;
            FixPoint          min_distance    = FixPoint.MaxValue;

            for (int i = 0; i < list.Count; ++i)
            {
                PositionComponent target_position_component = list[i];
                Entity            entity = target_position_component.GetOwnerEntity();
                if (entity.GetComponent(DamagableComponent.ID) == null)
                {
                    continue;
                }
                if (!FactionRelation.IsFactionSatisfied(source_player.GetFaction(entity.GetOwnerPlayerID()), FactionRelation.Enemy))
                {
                    continue;
                }
                Vector3FP offset   = source_position - target_position_component.CurrentPosition;
                FixPoint  distance = FixPoint.FastDistance(offset.x, offset.z);
                if (distance < min_distance)
                {
                    potential_enemy = target_position_component;
                    min_distance    = distance;
                }
            }
            return(potential_enemy);
        }
Beispiel #2
0
        void GatherGeneral(ISpacePartition partition, Player player, Vector3FP position, Vector2FP facing, TargetGatheringParam param, List <Entity> targets)
        {
            if (partition == null)
            {
                return;
            }

            List <PositionComponent> list = null;
            int gathering_type            = param.m_type;

            if (gathering_type == TargetGatheringType.ForwardRectangle)
            {
                list = partition.CollectEntity_ForwardRectangle(position, facing, param.m_param1, param.m_param2);
            }
            else if (gathering_type == TargetGatheringType.SurroundingRing)
            {
                list = partition.CollectEntity_SurroundingRing(position, param.m_param1, param.m_param2);
            }
            else if (gathering_type == TargetGatheringType.ForwardSector)
            {
                list = partition.CollectEntity_ForwardSector(position, facing, param.m_param1, param.m_param2);
            }
            else if (gathering_type == TargetGatheringType.All)
            {
                list = partition.CollectEntity_All();
            }
            if (list == null)
            {
                return;
            }

            for (int i = 0; i < list.Count; ++i)
            {
                PositionComponent position_component = list[i];
                Entity            entity             = position_component.GetOwnerEntity();
                if (param.m_category != 0)
                {
                    EntityDefinitionComponent definition_component = entity.GetComponent(EntityDefinitionComponent.ID) as EntityDefinitionComponent;
                    if (definition_component == null)
                    {
                        continue;
                    }
                    if (!definition_component.IsCategory(param.m_category))
                    {
                        continue;
                    }
                }
                if (player != null && !FactionRelation.IsFactionSatisfied(player.GetFaction(entity.GetOwnerPlayerID()), param.m_faction))
                {
                    continue;
                }
                targets.Add(entity);
            }
        }
        bool DetectCollision(ISpacePartition partition, Vector3FP position, FixPoint radius)
        {
            if (partition == null)
            {
                return(false);
            }
            List <PositionComponent> list = partition.CollectEntity_SurroundingRing(position, radius, FixPoint.Zero, m_param.m_source_entity_id);

            if (list.Count == 0)
            {
                return(false);
            }
            for (int i = 0; i < list.Count; ++i)
            {
                PositionComponent position_component = list[i];
                Entity            entity             = position_component.GetOwnerEntity();
                if (m_pierce_entity)
                {
                    if (m_effected_entities.Contains(entity.ID))
                    {
                        continue;
                    }
                    else
                    {
                        m_effected_entities.Add(entity.ID);
                    }
                }
                if (position_component.Height <= FixPoint.Zero) //ZZWTODO
                {
                    continue;
                }
                if (!FactionRelation.IsFactionSatisfied(GetOwnerPlayer().GetFaction(entity.GetOwnerPlayerID()), m_collision_faction))
                {
                    continue;
                }
                Explode(entity);
                if (!m_pierce_entity)
                {
                    return(true);
                }
            }
            return(false);
        }
Beispiel #4
0
        void DetectCollision(ISpacePartition partition, Vector3FP position, FixPoint radius)
        {
            if (partition == null)
            {
                return;
            }
            SkillComponent           skill_component = m_context.GetData <SkillComponent>(BTContextKey.OwnerSkillComponent);
            Skill                    skill           = skill_component.GetOwnerSkill();
            List <PositionComponent> list            = partition.CollectEntity_SurroundingRing(position, radius, FixPoint.Zero, skill.GetOwnerEntityID());

            if (list.Count == 0)
            {
                return;
            }
            for (int i = 0; i < list.Count; ++i)
            {
                PositionComponent position_component = list[i];
                Entity            entity             = position_component.GetOwnerEntity();
                if (m_collided_targets.Contains(entity.ID))
                {
                    continue;
                }
                m_collided_targets.Add(entity.ID);
                if (position_component.Height <= FixPoint.Zero) //ZZWTODO
                {
                    continue;
                }
                if (!FactionRelation.IsFactionSatisfied(skill.GetOwnerPlayer().GetFaction(entity.GetOwnerPlayerID()), FactionRelation.NotAlly))
                {
                    continue;
                }
                Entity current_target = entity;
                skill_component.CurrentTarget = current_target;
                EffectApplicationData app_data = RecyclableObject.Create <EffectApplicationData>();
                app_data.m_original_entity_id = skill.GetOwnerEntityID();
                app_data.m_source_entity_id   = app_data.m_original_entity_id;
                m_collision_target_generator.Activate(app_data, entity);
                RecyclableObject.Recycle(app_data);
            }
            skill_component.CurrentTarget = null;
        }