コード例 #1
0
        public static int PickupObject(Ray ray)
        {
            int[] ids = SpriteManager.GetLayersID();

            foreach (int id in ids)
            {
                SpriteLayer layer = SpriteManager.GetLayer(id);

                for (int i = 0, e = layer.size; i < e; i++)
                {
                    SpritePrimitiveGroup group = layer[i];

                    for (int idx = 0; idx < group.count.value; idx++)
                    {
                        SpritePrimitive pri = group.primitives[idx];
                        if (pri.visible)
                        {
                            bool ret = IntersectTriangle(ray.origin, ray.direction, pri.position[0], pri.position[1], pri.position[2], 0, 0, 0) ||
                                       IntersectTriangle(ray.origin, ray.direction, pri.position[0], pri.position[2], pri.position[3], 0, 0, 0);

                            if (ret)
                            {
                                return(pri.ownerID);
                            }
                        }
                    }
                }
            }

            return(0);
        }
コード例 #2
0
        internal void Remove(SpritePrimitiveGroup data)
        {
            int idx     = data.index;
            int lastIdx = baseContainer.Count - 1;

            if (idx <= lastIdx)
            {
                SpritePrimitiveGroup swap = baseContainer[lastIdx];
                swap.index         = idx;
                baseContainer[idx] = swap;
                baseContainer.RemoveAt(lastIdx);
            }
        }
コード例 #3
0
        public static void EnumSpriteInSpriteManager(
            SpriteLayerDelegate beginLayer, SpriteLayerDelegate endLayer,
            PrimitiveGroupDelegate beginGroup, PrimitiveGroupDelegate endGroup,
            PrimitiveDelegate primitive)
        {
            int[] ids = SpriteManager.GetLayersID();

            foreach (int id in ids)
            {
                SpriteLayer layer = SpriteManager.GetLayer(id);

                if (beginLayer != null)
                {
                    beginLayer(id, layer.size);
                }


                for (int i = 0, e = layer.size; i < e; i++)
                {
                    SpritePrimitiveGroup group = layer[i];

                    if (beginGroup != null)
                    {
                        beginGroup(group, i, group.owner);
                    }


                    if (primitive != null)
                    {
                        primitive(group.primitives, group.count.value, group);
                    }


                    if (endGroup != null)
                    {
                        endGroup(group, i, group.owner);
                    }
                }

                if (endLayer != null)
                {
                    endLayer(id, layer.size);
                }
            }
        }
コード例 #4
0
        override protected int getPrimitive(int priCount, bool isClipping, Vector3 cameraPos, float radius)
        {
            if (_primitives == null)
            {
                Init(maxPrimitiveCount);
            }

            int queueMaxLength = _primitives.Length;

            if (spriteRenderer != null)
            {
                SpritePrimitiveGroup group = spriteRenderer.primitiveGroup;

                for (int pi = 0; pi < group.count.value; pi++)
                {
                    SpritePrimitive pri = group.primitives[pi];
                    if (pri.visible == false || pri.texId == 0)
                    {
                        continue;
                    }

                    _primitives[priCount] = pri;
                    priCount++;

                    if (priCount >= queueMaxLength)
                    {
                        Debug.Log("Commited SpritePrimitive's count is more than " + queueMaxLength + "!.\n" +
                                  "if in editor, you should disable some layer.\n" +
                                  "if in runtime, you should enable Camera2D clipping..\n");

                        return(priCount);
                    }
                }
            }

            return(priCount);
        }
コード例 #5
0
 internal static void RemovePrimitiveGroupFromLayer(int id, SpritePrimitiveGroup group)
 {
     instance._RemovePrimitiveGroupFromLayer(id, group);
 }
コード例 #6
0
 internal static void AddPrimitiveGroupToLayer(int id, SpritePrimitiveGroup group)
 {
     instance._AddPrimitiveGroupToLayer(id, group);
 }
コード例 #7
0
 void _RemovePrimitiveGroupFromLayer(int id, SpritePrimitiveGroup primitive)
 {
     SpriteLayer layer = _GetLayer(id);
     layer.Remove(primitive);
 }
コード例 #8
0
 void _AddPrimitiveGroupToLayer(int id, SpritePrimitiveGroup group)
 {
     SpriteLayer layer = _GetLayer(id);
     layer.Add(group);
 }
コード例 #9
0
        internal void Remove( SpritePrimitiveGroup data)
        {
            int idx = data.index;
            int lastIdx = baseContainer.Count - 1;

            if (idx <= lastIdx)
            {
                SpritePrimitiveGroup swap = baseContainer[lastIdx];
                swap.index = idx;
                baseContainer[idx] = swap;
                baseContainer.RemoveAt(lastIdx);
            }
        }
コード例 #10
0
 internal void Add( SpritePrimitiveGroup data)
 {
     baseContainer.Add(data);
     data.index = baseContainer.Count - 1;
 }
コード例 #11
0
 internal static void RemovePrimitiveGroupFromLayer(int id, SpritePrimitiveGroup group)
 {
     instance._RemovePrimitiveGroupFromLayer(id, group);
 }
コード例 #12
0
 internal static void AddPrimitiveGroupToLayer(int id, SpritePrimitiveGroup group)
 {
     instance._AddPrimitiveGroupToLayer(id, group);
 }
コード例 #13
0
        void _RemovePrimitiveGroupFromLayer(int id, SpritePrimitiveGroup primitive)
        {
            SpriteLayer layer = _GetLayer(id);

            layer.Remove(primitive);
        }
コード例 #14
0
        void _AddPrimitiveGroupToLayer(int id, SpritePrimitiveGroup group)
        {
            SpriteLayer layer = _GetLayer(id);

            layer.Add(group);
        }
コード例 #15
0
 internal void Add(SpritePrimitiveGroup data)
 {
     baseContainer.Add(data);
     data.index = baseContainer.Count - 1;
 }
コード例 #16
0
        virtual protected int getPrimitive(int priCount, bool isClipping, Vector3 cameraPos, float radius)
        {
            int[] layerid = SpriteManager.GetLayersID();


            if (_primitives == null)
            {
                Init(maxPrimitiveCount);
            }

            int queueMaxLength = _primitives.Length;


            for (int layerIdx = 0, e = layerid.Length; layerIdx < e; layerIdx++)
            {
                int id = layerid[layerIdx];
                int t  = cullingMask.value & (1 << id);

                if (t != 0)
                {
                    SpriteLayer layer = SpriteManager.GetLayer(id);

                    int l = layer.size;
                    if (l == 0)
                    {
                        continue;
                    }

                    if (isClipping)
                    {
                        int ls = layer.size;
                        for (int ri = 0; ri < l; ri++)
                        {
                            layer[ri].renderable.DoClipping(cameraPos, radius);
                        }
                    }

                    for (int gourpIdx = 0; gourpIdx < l; gourpIdx++)
                    {
                        SpritePrimitiveGroup group = layer.baseContainer[gourpIdx];

                        if (!group.visible)
                        {
                            continue;
                        }

                        for (int pi = 0; pi < group.count.value; pi++)
                        {
                            SpritePrimitive pri = group.primitives[pi];
                            if (pri.visible == false || pri.texId == 0)
                            {
                                continue;
                            }

                            _primitives[priCount] = pri;
                            priCount++;

                            if (priCount >= queueMaxLength)
                            {
                                Debug.Log("Commited SpritePrimitive's count is more than " + queueMaxLength + "!.\n" +
                                          "if in editor, you should disable some layer.\n" +
                                          "if in runtime, you should enable Camera2D clipping..\n");

                                return(priCount);
                            }
                        }
                    }
                }
            }

            return(priCount);
        }