Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="pcolor"></param>
        /// <param name="movieClip"></param>
        private void renderDisplayObjectContainer(DisplayObjectContainer parent, Color pcolor, bool movieClip)
        {
            if (phaseId == 0)
            {
                if (parent.updateCounter != updateCounter)
                {
                    sameUpdateCounter = false;
                }
            }
            else if (phaseId == 1)
            {
                parent.updateCounter = Time.frameCount;
            }

            for (int i = 0; i < parent.numChildren; i++)
            {
                if (movieClip)
                {
                    MovieClip obj2 = parent.getChildAt(i) as MovieClip;

                    if (obj2.visible)
                    {
                        BitmapAssetInfo info = obj2.bmpInfo;
                        renderGraphics(info, obj2, obj2.colorTransform);
                        renderDisplayObjectContainer(obj2, obj2.colorTransform, false);
                    }
                }
                else
                {
                    DisplayObjectContainer obj2 = parent.getChildAt(i) as DisplayObjectContainer;

                    BitmapAssetInfo info = obj2.bmpInfo;
                    renderGraphics(info, obj2, pcolor);
                    renderDisplayObjectContainer(obj2, pcolor, false);
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="frameNum"></param>
        /// <param name="isFrameUpdate"></param>
        protected void _setFrame(int frameNum, bool isFrameUpdate)
        {
            if (m_FrameNum == frameNum)
            {
                return;
            }
            if (frameNum < 0)
            {
                frameNum = 0;
            }
            else if (frameNum >= totalFrames)
            {
                frameNum = totalFrames - 1;
            }
            m_FrameNum = frameNum;
            base.m_Children.Clear();

            if ((m_FrameNum < 0) || (m_FrameNum >= m_MovieClipInfo.frames.Count))
            {
                return;
            }

            DisplayObjectInfo[] displayList = m_MovieClipInfo.frames[m_FrameNum];
            int len = displayList.Length;

            for (int i = 0; i < len; i++)
            {
                DisplayObjectInfo dispInfo = displayList[i];

                if (m_InstanceCache == null)
                {
                    m_InstanceCache = new Dictionary <short, DisplayObjectContainer>();
                }
                if (dispInfo.isBitmap)
                {
                    DisplayObjectContainer displayObject = !m_InstanceCache.ContainsKey(dispInfo.instanceId) ? null : m_InstanceCache[dispInfo.instanceId];
                    if ((displayObject != null) && (displayObject.cachedCid != dispInfo.cid))
                    {
                        displayObject = null;
                    }
                    if (displayObject == null)
                    {
                        BitmapAssetInfo bmpInfo = assetContext.bitmaps[dispInfo.cid];

                        displayObject           = new DisplayObjectContainer();
                        bmpInfo.material        = assetContext.material;
                        displayObject.bmpInfo   = bmpInfo;
                        displayObject.cachedCid = dispInfo.cid;

                        m_InstanceCache[dispInfo.instanceId] = displayObject;
                    }
                    base.addChild(displayObject);
                    dispInfo.tranform.applyToSprite(displayObject);
                }
                else
                {
                    MovieClipAssetInfo info3  = assetContext.exports[dispInfo.cid];
                    MovieClipPlayer    player = !m_InstanceCache.ContainsKey(dispInfo.instanceId) ? null : (m_InstanceCache[dispInfo.instanceId] is MovieClipPlayer ? (MovieClipPlayer)m_InstanceCache[dispInfo.instanceId] : null);
                    if ((player != null) && (player.cachedCid != dispInfo.cid))
                    {
                        player = null;
                    }
                    if (player == null)
                    {
                        player = new MovieClipPlayer(null, null);
                        player.setSymbolByCid(assetContext, dispInfo.cid);
                        player.cachedCid = dispInfo.cid;

                        if (isFrameUpdate)
                        {
                            player.m_FrameNum = -1;
                        }
                        else
                        {
                            player.setFrame(1, isFrameUpdate);
                        }
                        m_InstanceCache[dispInfo.instanceId] = player;
                    }
                    base.addChild(player);
                    dispInfo.tranform.applyToSprite(player);
                }
            }

            if (frameCallbacks != null && frameCallbacks.ContainsKey(m_FrameNum))
            {
                frameCallbacks[m_FrameNum]();
            }
            if (!string.IsNullOrEmpty(m_NextSymbolName) && frameNum >= totalFrames - 1)
            {
                setSymbolName(m_NextSymbolName);
            }
        }
Esempio n. 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="info"></param>
        /// <param name="parent"></param>
        /// <param name="pcolor"></param>
        /// <param name="renderQueue"></param>
        private void renderGraphics(BitmapAssetInfo info, DisplayObjectContainer parent, Color pcolor, int renderQueue)
        {
            Submesh submesh = null;

            if (info != null)
            {
                Material material = info.material;
                if (material != null)
                {
                    material.renderQueue = renderQueue;
                    if (phaseId == 0)
                    {
                        if (currentMaterial != material)
                        {
                            if (currentMaterial != null)
                            {
                                AppSubMesh();
                                triId    = 0;
                                numIndex = 0;
                            }
                            currentMaterial = material;
                        }

                        numVerts += 4;
                        numIndex += 6;
                        quadCount++;
                        zDrawOffset += zSpace;
                    }
                    else if (phaseId == 1)
                    {
                        if (currentMaterial != material)
                        {
                            subMeshId++;
                            currentMaterial = material;
                            triId           = 0;
                            submesh         = submeshIndices[subMeshId];
                        }

                        float  x           = 0f;
                        float  y           = 0f;
                        float  drawWidth   = info.srcRect.width;
                        float  drawHeight  = info.srcRect.height;
                        Rect   drawSrcRect = info.uvRect;
                        float  zDrawOffset = this.zDrawOffset;
                        Matrix matrix      = parent._fastGetFullMatrixRef();
                        lowerLeftUV.x  = drawSrcRect.x;
                        lowerLeftUV.y  = 1f - drawSrcRect.y;
                        UVDimensions.x = drawSrcRect.width;
                        UVDimensions.y = drawSrcRect.height;
                        tmpUv.x        = lowerLeftUV.x + UVDimensions.x;
                        tmpUv.y        = lowerLeftUV.y;
                        UVs[UVId++]    = tmpUv;
                        tmpUv.x        = lowerLeftUV.x + UVDimensions.x;
                        tmpUv.y        = lowerLeftUV.y - UVDimensions.y;
                        UVs[UVId++]    = tmpUv;
                        tmpUv.x        = lowerLeftUV.x;
                        tmpUv.y        = lowerLeftUV.y - UVDimensions.y;
                        UVs[UVId++]    = tmpUv;
                        tmpUv.x        = lowerLeftUV.x;
                        tmpUv.y        = lowerLeftUV.y;
                        UVs[UVId++]    = tmpUv;

                        if (!simpleGeneration)
                        {
                            colors[ColourId++] = white;
                            colors[ColourId++] = white;
                            colors[ColourId++] = white;
                            colors[ColourId++] = white;
                        }
                        else
                        {
                            float alpha = parent.getInheritedAlpha();
                            Color color = pcolor;
                            if (alpha <= 0.95f || alpha >= 0.05f)
                            {
                                Color tem = Color.white;
                                tem.a = alpha;
                                color = pcolor * tem;
                            }

                            colors[ColourId++] = color;
                            colors[ColourId++] = color;
                            colors[ColourId++] = color;
                            colors[ColourId++] = color;
                        }

                        vertices[VertId++] = matrix.transformVector3Static(x + drawWidth, y, zDrawOffset);
                        vertices[VertId++] = matrix.transformVector3Static(x + drawWidth, y + drawHeight, zDrawOffset);
                        vertices[VertId++] = matrix.transformVector3Static(x, y + drawHeight, zDrawOffset);
                        vertices[VertId++] = matrix.transformVector3Static(x, y, zDrawOffset);

                        if (submesh == null)
                        {
                            submesh = submeshIndices[subMeshId];
                        }
                        int[] triangles = submesh.triangles;
                        int   num11     = quadCount * 4;

                        triangles[triId++] = num11;
                        triangles[triId++] = num11 + 1;
                        triangles[triId++] = num11 + 3;
                        triangles[triId++] = num11 + 3;
                        triangles[triId++] = num11 + 1;
                        triangles[triId++] = num11 + 2;
                        quadCount++;
                        zDrawOffset += zSpace;
                    }
                }
            }
        }
Esempio n. 4
0
	void HandleCharsTag( XmlNode pParent ) {
		
	 	fontInfo.cursorMinY = float.MaxValue;
		fontInfo.cursorMaxY = 0;	
		
    	foreach (XmlNode node in pParent) {
			if( node.Name == "char" ) {
				
				// Get BMFont char attributes
				int page = (int)int.Parse( node.Attributes[ "page" ].InnerText );
				char charCode = (char)int.Parse( node.Attributes[ "id" ].InnerText );
				float x = float.Parse( node.Attributes[ "x" ].InnerText );
				float y = float.Parse( node.Attributes[ "y" ].InnerText );
				float width = float.Parse( node.Attributes[ "width" ].InnerText );
				float height = float.Parse( node.Attributes[ "height" ].InnerText );
				//float xoffset = float.Parse( node.Attributes[ "xoffset" ].InnerText );
				float yoffset = float.Parse( node.Attributes[ "yoffset" ].InnerText );
				float xadvance = float.Parse( node.Attributes[ "xadvance" ].InnerText );
				
				// Create asset for char
				BitmapAssetInfo bmpInfo = new BitmapAssetInfo();				
				bmpInfo.textureUri = pages[ page ];
				bmpInfo.srcRect = new Rect( x,y,width,height );
				bmpInfo.shapeRect = new Rect( x,y,width,height );
				int cid =  ctx.genUniqueCid();
				ctx.exports[ cid ] = bmpInfo;
				bmpInfo.bitmapData = ctx.textureManager.getBitmapDataFromSceneTexture( bmpInfo.textureUri, fontAsset.textures[0] );
				
				// Create char info
				BitmapFontCharInfo bmpChar = new BitmapFontCharInfo();
				bmpChar.c = charCode;
				bmpChar.charHeight = width;
				bmpChar.charWidth = xadvance;
				bmpChar.charStartX = 0;
				bmpChar.charStartY = yoffset;	
				bmpChar.topLine = yoffset;				
				bmpChar.cid = cid;				
				fontInfo.characters[ charCode ] = bmpChar;		
				
				if( yoffset < fontInfo.cursorMinY || fontInfo.cursorMinY == float.MaxValue ) {
					fontInfo.cursorMinY = yoffset;
				}
				
				if( yoffset + height > fontInfo.cursorMaxY ) {
					fontInfo.cursorMaxY = yoffset + height;
				}				
			}
		}
	}