private void BeforeDraw() { m_bNoDrawChildren = false; if (m_childClippingMode == CCClipMode.Bounds) { // We always clip to the bounding box var rect = new CCRect(0, 0, m_obContentSize.Width, m_obContentSize.Height); var bounds = CCAffineTransform.Transform(rect, NodeToWorldTransform()); var winSize = CCDirector.SharedDirector.WinSize; CCRect prevScissorRect; if (CCDrawManager.ScissorRectEnabled) { prevScissorRect = CCDrawManager.ScissorRect; } else { prevScissorRect = new CCRect(0, 0, winSize.Width, winSize.Height); } if (!bounds.IntersectsRect(prevScissorRect)) { m_bNoDrawChildren = true; return; } float minX = Math.Max(bounds.MinX, prevScissorRect.MinX); float minY = Math.Max(bounds.MinY, prevScissorRect.MinY); float maxX = Math.Min(bounds.MaxX, prevScissorRect.MaxX); float maxY = Math.Min(bounds.MaxY, prevScissorRect.MaxY); if (CCDrawManager.ScissorRectEnabled) { m_bRestoreScissor = true; } else { CCDrawManager.ScissorRectEnabled = true; } m_tSaveScissorRect = prevScissorRect; CCDrawManager.SetScissorInPoints(minX, minY, maxX - minX, maxY - minY); } else if (m_childClippingMode == CCClipMode.BoundsWithRenderTarget) { m_tSaveScissorRect = CCDrawManager.ScissorRect; m_bRestoreScissor = CCDrawManager.ScissorRectEnabled; CCDrawManager.ScissorRectEnabled = false; CCDrawManager.PushMatrix(); CCDrawManager.SetIdentityMatrix(); m_pRenderTexture.BeginWithClear(0, 0, 0, 0); } }
public CCBoundingBoxI Transform(CCAffineTransform matrix) { var top = MinY; var left = MinX; var right = MaxX; var bottom = MaxY; var topLeft = new CCPointI(left, top); var topRight = new CCPointI(right, top); var bottomLeft = new CCPointI(left, bottom); var bottomRight = new CCPointI(right, bottom); matrix.Transform(ref topLeft.X, ref topLeft.Y); matrix.Transform(ref topRight.Y, ref topRight.Y); matrix.Transform(ref bottomLeft.X, ref bottomLeft.Y); matrix.Transform(ref bottomRight.X, ref bottomRight.Y); int minX = Math.Min(Math.Min(topLeft.X, topRight.X), Math.Min(bottomLeft.X, bottomRight.X)); int maxX = Math.Max(Math.Max(topLeft.X, topRight.X), Math.Max(bottomLeft.X, bottomRight.X)); int minY = Math.Min(Math.Min(topLeft.Y, topRight.Y), Math.Min(bottomLeft.Y, bottomRight.Y)); int maxY = Math.Max(Math.Max(topLeft.Y, topRight.Y), Math.Max(bottomLeft.Y, bottomRight.Y)); return(new CCBoundingBoxI(minX, minY, maxX, maxY)); }
public static CCRect Transform(CCRect rect, CCAffineTransform anAffineTransform) { return anAffineTransform.Transform(rect); }
public CCBoundingBoxI Transform(ref CCAffineTransform matrix) { var top = MinY; var left = MinX; var right = MaxX; var bottom = MaxY; var topLeft = new CCPointI(left, top); var topRight = new CCPointI(right, top); var bottomLeft = new CCPointI(left, bottom); var bottomRight = new CCPointI(right, bottom); matrix.Transform(ref topLeft.X, ref topLeft.Y); matrix.Transform(ref topRight.X, ref topRight.Y); matrix.Transform(ref bottomLeft.X, ref bottomLeft.Y); matrix.Transform(ref bottomRight.X, ref bottomRight.Y); int minX = Math.Min(Math.Min(topLeft.X, topRight.X), Math.Min(bottomLeft.X, bottomRight.X)); int maxX = Math.Max(Math.Max(topLeft.X, topRight.X), Math.Max(bottomLeft.X, bottomRight.X)); int minY = Math.Min(Math.Min(topLeft.Y, topRight.Y), Math.Min(bottomLeft.Y, bottomRight.Y)); int maxY = Math.Max(Math.Max(topLeft.Y, topRight.Y), Math.Max(bottomLeft.Y, bottomRight.Y)); return new CCBoundingBoxI(minX, minY, maxX, maxY); }
public CCPoint ConvertToWorldSpace(CCPoint nodePoint) { return(CCAffineTransform.Transform(nodePoint, NodeToWorldTransform())); }
public CCPoint ConvertToNodeSpace(CCPoint worldPoint) { return(CCAffineTransform.Transform(worldPoint, WorldToNodeTransform())); }
public bool UpdateWithBatchNode(CCSpriteBatchNode batchnode, CCRect rect, bool rotated, CCRect capInsets) { var opacity = Opacity; var color = Color; // Release old sprites RemoveAllChildrenWithCleanup(true); _scale9Image = batchnode; _scale9Image.RemoveAllChildrenWithCleanup(true); m_capInsets = capInsets; // If there is no given rect if (rect.Equals(CCRect.Zero)) { // Get the texture size as original CCSize textureSize = _scale9Image.TextureAtlas.Texture.ContentSize; rect = new CCRect(0, 0, textureSize.Width, textureSize.Height); } // Set the given rect's size as original size m_spriteRect = rect; m_originalSize = rect.Size; m_preferredSize = m_originalSize; m_capInsetsInternal = capInsets; float h = rect.Size.Height; float w = rect.Size.Width; // If there is no specified center region if (m_capInsetsInternal.Equals(CCRect.Zero)) { m_capInsetsInternal = new CCRect(w / 3, h / 3, w / 3, h / 3); } float left_w = m_capInsetsInternal.Origin.X; float center_w = m_capInsetsInternal.Size.Width; float right_w = rect.Size.Width - (left_w + center_w); float top_h = m_capInsetsInternal.Origin.Y; float center_h = m_capInsetsInternal.Size.Height; float bottom_h = rect.Size.Height - (top_h + center_h); // calculate rects // ... top row float x = 0.0f; float y = 0.0f; // top left CCRect lefttopbounds = new CCRect(x, y, left_w, top_h); // top center x += left_w; CCRect centertopbounds = new CCRect(x, y, center_w, top_h); // top right x += center_w; CCRect righttopbounds = new CCRect(x, y, right_w, top_h); // ... center row x = 0.0f; y = 0.0f; y += top_h; // center left CCRect leftcenterbounds = new CCRect(x, y, left_w, center_h); // center center x += left_w; CCRect centerbounds = new CCRect(x, y, center_w, center_h); // center right x += center_w; CCRect rightcenterbounds = new CCRect(x, y, right_w, center_h); // ... bottom row x = 0.0f; y = 0.0f; y += top_h; y += center_h; // bottom left CCRect leftbottombounds = new CCRect(x, y, left_w, bottom_h); // bottom center x += left_w; CCRect centerbottombounds = new CCRect(x, y, center_w, bottom_h); // bottom right x += center_w; CCRect rightbottombounds = new CCRect(x, y, right_w, bottom_h); if (!rotated) { // CCLog("!rotated"); CCAffineTransform t = CCAffineTransform.Identity; t = CCAffineTransform.Translate(t, rect.Origin.X, rect.Origin.Y); centerbounds = CCAffineTransform.Transform(centerbounds, t); rightbottombounds = CCAffineTransform.Transform(rightbottombounds, t); leftbottombounds = CCAffineTransform.Transform(leftbottombounds, t); righttopbounds = CCAffineTransform.Transform(righttopbounds, t); lefttopbounds = CCAffineTransform.Transform(lefttopbounds, t); rightcenterbounds = CCAffineTransform.Transform(rightcenterbounds, t); leftcenterbounds = CCAffineTransform.Transform(leftcenterbounds, t); centerbottombounds = CCAffineTransform.Transform(centerbottombounds, t); centertopbounds = CCAffineTransform.Transform(centertopbounds, t); // Centre _centre = new CCSprite(); _centre.InitWithTexture(_scale9Image.Texture, centerbounds); _scale9Image.AddChild(_centre, 0, (int)Positions.Centre); // Top _top = new CCSprite(); _top.InitWithTexture(_scale9Image.Texture, centertopbounds); _scale9Image.AddChild(_top, 1, (int)Positions.Top); // Bottom _bottom = new CCSprite(); _bottom.InitWithTexture(_scale9Image.Texture, centerbottombounds); _scale9Image.AddChild(_bottom, 1, (int)Positions.Bottom); // Left _left = new CCSprite(); _left.InitWithTexture(_scale9Image.Texture, leftcenterbounds); _scale9Image.AddChild(_left, 1, (int)Positions.Left); // Right _right = new CCSprite(); _right.InitWithTexture(_scale9Image.Texture, rightcenterbounds); _scale9Image.AddChild(_right, 1, (int)Positions.Right); // Top left _topLeft = new CCSprite(); _topLeft.InitWithTexture(_scale9Image.Texture, lefttopbounds); _scale9Image.AddChild(_topLeft, 2, (int)Positions.TopLeft); // Top right _topRight = new CCSprite(); _topRight.InitWithTexture(_scale9Image.Texture, righttopbounds); _scale9Image.AddChild(_topRight, 2, (int)Positions.TopRight); // Bottom left _bottomLeft = new CCSprite(); _bottomLeft.InitWithTexture(_scale9Image.Texture, leftbottombounds); _scale9Image.AddChild(_bottomLeft, 2, (int)Positions.BottomLeft); // Bottom right _bottomRight = new CCSprite(); _bottomRight.InitWithTexture(_scale9Image.Texture, rightbottombounds); _scale9Image.AddChild(_bottomRight, 2, (int)Positions.BottomRight); } else { // set up transformation of coordinates // to handle the case where the sprite is stored rotated // in the spritesheet // CCLog("rotated"); CCAffineTransform t = CCAffineTransform.Identity; CCRect rotatedcenterbounds = centerbounds; CCRect rotatedrightbottombounds = rightbottombounds; CCRect rotatedleftbottombounds = leftbottombounds; CCRect rotatedrighttopbounds = righttopbounds; CCRect rotatedlefttopbounds = lefttopbounds; CCRect rotatedrightcenterbounds = rightcenterbounds; CCRect rotatedleftcenterbounds = leftcenterbounds; CCRect rotatedcenterbottombounds = centerbottombounds; CCRect rotatedcentertopbounds = centertopbounds; t = CCAffineTransform.Translate(t, rect.Size.Height + rect.Origin.X, rect.Origin.Y); t = CCAffineTransform.Rotate(t, 1.57079633f); centerbounds = CCAffineTransform.Transform(centerbounds, t); rightbottombounds = CCAffineTransform.Transform(rightbottombounds, t); leftbottombounds = CCAffineTransform.Transform(leftbottombounds, t); righttopbounds = CCAffineTransform.Transform(righttopbounds, t); lefttopbounds = CCAffineTransform.Transform(lefttopbounds, t); rightcenterbounds = CCAffineTransform.Transform(rightcenterbounds, t); leftcenterbounds = CCAffineTransform.Transform(leftcenterbounds, t); centerbottombounds = CCAffineTransform.Transform(centerbottombounds, t); centertopbounds = CCAffineTransform.Transform(centertopbounds, t); rotatedcenterbounds.Origin = centerbounds.Origin; rotatedrightbottombounds.Origin = rightbottombounds.Origin; rotatedleftbottombounds.Origin = leftbottombounds.Origin; rotatedrighttopbounds.Origin = righttopbounds.Origin; rotatedlefttopbounds.Origin = lefttopbounds.Origin; rotatedrightcenterbounds.Origin = rightcenterbounds.Origin; rotatedleftcenterbounds.Origin = leftcenterbounds.Origin; rotatedcenterbottombounds.Origin = centerbottombounds.Origin; rotatedcentertopbounds.Origin = centertopbounds.Origin; // Centre _centre = new CCSprite(); _centre.InitWithTexture(_scale9Image.Texture, rotatedcenterbounds, true); _scale9Image.AddChild(_centre, 0, (int)Positions.Centre); // Top _top = new CCSprite(); _top.InitWithTexture(_scale9Image.Texture, rotatedcentertopbounds, true); _scale9Image.AddChild(_top, 1, (int)Positions.Top); // Bottom _bottom = new CCSprite(); _bottom.InitWithTexture(_scale9Image.Texture, rotatedcenterbottombounds, true); _scale9Image.AddChild(_bottom, 1, (int)Positions.Bottom); // Left _left = new CCSprite(); _left.InitWithTexture(_scale9Image.Texture, rotatedleftcenterbounds, true); _scale9Image.AddChild(_left, 1, (int)Positions.Left); // Right _right = new CCSprite(); _right.InitWithTexture(_scale9Image.Texture, rotatedrightcenterbounds, true); _scale9Image.AddChild(_right, 1, (int)Positions.Right); // Top left _topLeft = new CCSprite(); _topLeft.InitWithTexture(_scale9Image.Texture, rotatedlefttopbounds, true); _scale9Image.AddChild(_topLeft, 2, (int)Positions.TopLeft); // Top right _topRight = new CCSprite(); _topRight.InitWithTexture(_scale9Image.Texture, rotatedrighttopbounds, true); _scale9Image.AddChild(_topRight, 2, (int)Positions.TopRight); // Bottom left _bottomLeft = new CCSprite(); _bottomLeft.InitWithTexture(_scale9Image.Texture, rotatedleftbottombounds, true); _scale9Image.AddChild(_bottomLeft, 2, (int)Positions.BottomLeft); // Bottom right _bottomRight = new CCSprite(); _bottomRight.InitWithTexture(_scale9Image.Texture, rotatedrightbottombounds, true); _scale9Image.AddChild(_bottomRight, 2, (int)Positions.BottomRight); } ContentSize = rect.Size; AddChild(_scale9Image); if (m_bSpritesGenerated) { // Restore color and opacity Opacity = opacity; Color = color; } m_bSpritesGenerated = true; return(true); }
private CCRect GetViewRect() { var rect = new CCRect(0, 0, _viewSize.Width, _viewSize.Height); return(CCAffineTransform.Transform(rect, NodeToWorldTransform())); }
public static CCRect Transform(CCRect rect, CCAffineTransform anAffineTransform) { return(anAffineTransform.Transform(rect)); }