Пример #1
0
        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);

                                //}
                            }

                        }
                    }
                }
            }
        }