public void UpdateSpriteStates(CoronaObject obj, float worldScale, Point offsetPoint) { if (this.currentProject != null) { if (obj.isEntity == true) { for (int i = 0; i < obj.Entity.CoronaObjects.Count; i++) { this.UpdateSpriteStates(obj.Entity.CoronaObjects[i], worldScale,offsetPoint); } } else { if (obj.DisplayObject != null) { Sprite sprite = null; if (obj.DisplayObject.Type.Equals("IMAGE")) { sprite = obj.DisplayObject.GorgonSprite; if (sprite == null) { this.UpdateSpriteContent(obj, worldScale, offsetPoint); return; } if (obj.DisplayObject.ImageFillColor == Color.Empty) obj.DisplayObject.ImageFillColor = Color.White; sprite.SetPosition((float)obj.DisplayObject.SurfaceRect.X + sprite.Axis.X + offsetPoint.X, (float)obj.DisplayObject.SurfaceRect.Y + sprite.Axis.Y + offsetPoint.Y); sprite.Rotation = obj.DisplayObject.Rotation; sprite.Color = Color.FromArgb((int)(obj.DisplayObject.Alpha * 255.0f), obj.DisplayObject.ImageFillColor); float imgScaleX = (float)obj.DisplayObject.SurfaceRect.Width / (float)sprite.Image.Width; float imgScaleY = (float)obj.DisplayObject.SurfaceRect.Height / (float)sprite.Image.Height; float finalXScale = worldScale * imgScaleX; float finalYScale = worldScale * imgScaleY; sprite.SetScale(finalXScale, finalYScale); sprite.SetAxis((float)sprite.Image.Width / 2, (float)sprite.Image.Height / 2); sprite.Rotation = obj.DisplayObject.Rotation; } else if (obj.DisplayObject.Type.Equals("SPRITE")) { CoronaSpriteSet spriteSetParent = obj.DisplayObject.SpriteSet; sprite = obj.DisplayObject.GorgonSprite; if (sprite == null) { this.UpdateSpriteContent(obj, worldScale, offsetPoint); return; } if (obj.DisplayObject.CurrentSequence == "DEFAULT") { if (obj.DisplayObject.SpriteSet.Frames.Count > 0) { //Charger le sprite avec la current frame SpriteFrame spriteFrame = spriteSetParent.Frames[obj.DisplayObject.CurrentFrame]; float factor = obj.DisplayObject.SpriteSet.Frames[obj.DisplayObject.CurrentFrame].SpriteSheetParent.FramesFactor; if (factor <= 0) factor = 1; int width = Convert.ToInt32((float)sprite.Image.Width / factor); int height = Convert.ToInt32((float)sprite.Image.Height / factor); obj.DisplayObject.SurfaceRect = new Rectangle(obj.DisplayObject.SurfaceRect.Location, new Size(width, height)); } } else { CoronaSpriteSetSequence sequence = obj.DisplayObject.getSequenceByName(obj.DisplayObject.CurrentSequence); if (sequence != null) { int convertedCurrentFrame = obj.DisplayObject.CurrentFrame + sequence.FrameDepart - 1; if (obj.DisplayObject.SpriteSet.Frames.Count > 0 && obj.DisplayObject.SpriteSet.Frames.Count > convertedCurrentFrame) { //Charger le sprite avec la current frame SpriteFrame spriteFrame = spriteSetParent.Frames[convertedCurrentFrame]; float factor = obj.DisplayObject.SpriteSet.Frames[convertedCurrentFrame].SpriteSheetParent.FramesFactor; if (factor <= 0) factor = 1; int width = Convert.ToInt32((float)sprite.Image.Width / factor); int height = Convert.ToInt32((float)sprite.Image.Height / factor); obj.DisplayObject.SurfaceRect = new Rectangle(obj.DisplayObject.SurfaceRect.Location, new Size(width, height)); } else { obj.DisplayObject.CurrentFrame = sequence.FrameCount - 1; this.UpdateSpriteContent(obj, worldScale,offsetPoint); } } else { obj.DisplayObject.setSequence(""); this.UpdateSpriteContent(obj, worldScale, offsetPoint); } } sprite.Color = Color.FromArgb((int)(obj.DisplayObject.Alpha * 255.0f), Color.White); sprite.SetPosition((float)obj.DisplayObject.SurfaceRect.X + sprite.Axis.X + offsetPoint.X, (float)obj.DisplayObject.SurfaceRect.Y + sprite.Axis.Y + offsetPoint.Y); float imgScaleX = (float)obj.DisplayObject.SurfaceRect.Width / (float)sprite.Image.Width; float imgScaleY = (float)obj.DisplayObject.SurfaceRect.Height / (float)sprite.Image.Height; float finalXScale = worldScale * imgScaleX; float finalYScale = worldScale * imgScaleY; sprite.SetScale(finalXScale, finalYScale); sprite.SetAxis((float)sprite.Image.Width / 2, (float)sprite.Image.Height / 2); sprite.Rotation = obj.DisplayObject.Rotation; } else if (obj.DisplayObject.Type.Equals("FIGURE")) { Krea.CGE_Figures.Figure fig = obj.DisplayObject.Figure; if (fig.ShapeType.Equals("RECTANGLE")) { this.CleanSprite(obj,false,false); Bitmap textureFigure = fig.DrawInBitmap((int)(255.0f * obj.DisplayObject.Alpha),worldScale); sprite = new Sprite(obj.DisplayObject.Name, GorgonLibrary.Graphics.Image.FromBitmap("shape_" + obj.DisplayObject.Name, textureFigure)); obj.DisplayObject.GorgonSprite = sprite; textureFigure.Dispose(); textureFigure = null; sprite.SetAxis((float)sprite.Image.Width / 2, (float)sprite.Image.Height / 2); sprite.SetPosition((float)obj.DisplayObject.SurfaceRect.X + sprite.Axis.X + offsetPoint.X, (float)obj.DisplayObject.SurfaceRect.Y + sprite.Axis.Y + offsetPoint.Y); sprite.Rotation = obj.DisplayObject.Rotation; } else if (fig.ShapeType.Equals("TEXT")) { //this.CleanSprite(obj, false, false); //Bitmap textureFigure = fig.DrawInBitmap((int)(255.0f * obj.DisplayObject.Alpha),1); //sprite = new Sprite(obj.DisplayObject.Name, GorgonLibrary.Graphics.Image.FromBitmap("text_" + obj.DisplayObject.Name, textureFigure)); //obj.DisplayObject.GorgonSprite = sprite; //sprite.SetAxis((float)sprite.Image.Width / 2, (float)sprite.Image.Height / 2); //sprite.SetPosition((float)obj.DisplayObject.SurfaceRect.X + sprite.Axis.X + offsetPoint.X, // (float)obj.DisplayObject.SurfaceRect.Y + sprite.Axis.Y + offsetPoint.Y); //sprite.Rotation = obj.DisplayObject.Rotation; //Krea.CGE_Figures.Texte textObject = fig as Krea.CGE_Figures.Texte; //TextSprite textSprite = textObject.TextSprite; //if (textSprite != null) //{ // textSprite.Text = textObject.txt; // textSprite.Color = Color.FromArgb((int)(obj.DisplayObject.Alpha * 255.0f), // textObject.FillColor.R, textObject.FillColor.G, textObject.FillColor.B); // textSprite.SetAxis((float)textSprite.Width / 2, (float)textSprite.Height / 2); // textSprite.SetPosition((float)obj.DisplayObject.SurfaceRect.X + textSprite.Axis.X + offsetPoint.X, // (float)obj.DisplayObject.SurfaceRect.Y + textSprite.Axis.Y + offsetPoint.Y); // textSprite.Rotation = obj.DisplayObject.Rotation; // textSprite.SetScale(worldScale, worldScale); //} } } } } } }