Exemple #1
0
        /// <summary>
        /// Empty Constructor For New Worlds
        /// </summary>
        /// <param name="name">World Name</param>
        /// <param name="EditorWidth">Editor Width</param>
        /// <param name="EditorHeight">Editor Height</param>
        public EditorWorld(string name, int EditorWidth, int EditorHeight)
        {
            WorldName = name;
            _Layers   = LayerInfo.CreateDefault();

            EditorScreen _TmpScreen = new EditorScreen(0, 0, this, true);

            Screens.Add(GetKey(0, 0, Enumerations.RelativePosition.Main), _TmpScreen);

            EditorScreenWidth  = EditorWidth;
            EditorScreenHeight = EditorHeight;
            OffsetX            = (EditorScreenWidth - 800) / 2;
            OffsetY            = (EditorScreenHeight - 600) / 2;

            _BackBufferImage   = new Bitmap(EditorScreenWidth, EditorScreenHeight);
            _WorkingLayerImage = new Bitmap(800, 600);

            // _G = The Whole Map Drawn Including the Sides
            _G = System.Drawing.Graphics.FromImage(_BackBufferImage);
            // _WorkingLayerGraphics = Current Layer Being Edited (Also used for Saving Screen Layer Info)
            _WorkingLayerGraphics = System.Drawing.Graphics.FromImage(_WorkingLayerImage);
            // _MiniMapBufferGraphics = Minimap Image Used For Displaying the Minimap
            _MiniMapBufferGraphics = System.Drawing.Graphics.FromImage(_MiniMapBufferImage);
            // _SingleScreenGraphicsObject = Single Screen (Main) Drawn.  Used For Updating Only The Editing Part
            _SingleScreenGraphicsObject = System.Drawing.Graphics.FromImage(_SingleScreenImage);
        }
Exemple #2
0
        /// <summary>
        /// Draw A Single Screen That Which Is 800,600
        /// </summary>
        /// <param name="X">Position X In The World</param>
        /// <param name="Y">Position Y In The World</param>
        /// <returns></returns>
        public Image DrawLocation_SingleScreen(int X, int Y, bool DrawObjects)
        {
            _SingleScreenGraphicsObject.Clear(Color.FromArgb(0, 255, 0));
            #region Draw Each Of The Layers
            foreach (var Layer in _Layers)
            {
                if (Layer.Value.Visible)
                {
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.Main)))
                    {
                        _SingleScreenGraphicsObject.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.Main)].GetLayerImage(Layer.Key.ToLower()), new Point(0, 0));
                    }
                }
            }
            #endregion

            if (DrawObjects)
            {
                #region Draw Objects On Screen
                var AllObjs = from QMapObject in Screens.Values.SelectMany(x => x.MapObjects)
                              where QMapObject.Screen.InRange(X, Y, OffsetX, OffsetY)
                              orderby QMapObject.DrawLocation.Y
                              select new { QMapObject, QMapObject.Screen.X, QMapObject.Screen.Y };

                foreach (var MapO in AllObjs)
                {
                    Enumerations.RelativePosition _RPos = EditorScreen.GetRelativePos(X, Y, MapO.X, MapO.Y);

                    if (_RPos == Enumerations.RelativePosition.Main)
                    {
                        Point _DrawPoint = new Point(MapO.QMapObject.DrawLocation.X, MapO.QMapObject.DrawLocation.Y);
                        _SingleScreenGraphicsObject.DrawImage(ResourceManager.GetMapObjectImageStart(MapO.QMapObject.ID.ToString()), _DrawPoint);
                    }
                }
                #endregion

                #region Draw The Selected Object

                if (SelectedMapObject != Guid.Empty)
                {
                    var SelectedObjs = from QMapObject in Screens.Values.SelectMany(x => x.MapObjects)
                                       where QMapObject.ID == SelectedMapObject
                                       select QMapObject;
                    var FirstObject = SelectedObjs.ToList()[0];

                    _SingleScreenGraphicsObject.DrawRectangle(Pens.White, new Rectangle(new Point(FirstObject.DrawLocation.X + OffsetX, FirstObject.DrawLocation.Y + OffsetY), FirstObject.ImageSize));
                }

                #endregion
            }
            // Draw The Bounding Box for Refrence
            _SingleScreenGraphicsObject.DrawRectangle(Pens.Black, new Rectangle(-1, -1, 800, 600));

            return(_SingleScreenImage);
        }
Exemple #3
0
        public void AddMapObject(int X, int Y, MapObject MapO)
        {
            string _Key = GetKey(X, Y, Enumerations.RelativePosition.Main);

            if (!Screens.ContainsKey(_Key))
            {
                EditorScreen _New = new EditorScreen(X, Y, this, true);
                Screens.Add(_Key, _New);
            }
            MapO.Screen = Screens[_Key];
            Screens[_Key].MapObjects.Add(MapO);

            Screens[_Key].MapObjects = Screens[_Key].MapObjects.OrderBy(x => x.DrawLocation.Y).ToList();
        }
Exemple #4
0
        /// <summary>
        /// Sets the Working Layer
        /// </summary>
        /// <param name="LayerName"></param>
        /// <param name="X">Map X Location</param>
        /// <param name="Y">Map Y Location</param>
        public void SetWorkingLayer(string LayerName, int X, int Y)
        {
            string _Key = GetKey(X, Y, Enumerations.RelativePosition.Main);

            if (!Screens.ContainsKey(_Key))
            {
                EditorScreen _New = new EditorScreen(X, Y, this, true);
                Screens.Add(_Key, _New);
            }

            _WorkingLayerImage = Screens[_Key].GetLayerImage(LayerName);
            if (_WorkingLayerGraphics != null)
            {
                _WorkingLayerGraphics.Dispose();
            }
            _WorkingLayerGraphics = System.Drawing.Graphics.FromImage(_WorkingLayerImage);

            _CurrentLayer = LayerName;
        }
Exemple #5
0
        /// <summary>
        /// Draws the specified Location.  This Should Never Be Called Consecutavly.  The Editor Only calls It
        /// One Time The After It Updates The Editor Screens With Any changes.  Also On A resize or A Paint
        /// </summary>
        /// <param name="X"></param>
        /// <param name="Y"></param>
        /// <returns></returns>
        public Image DrawLocation(int X, int Y)
        {
            _G.Clear(Color.FromArgb(255, 255, 255));
            #region Draw Each Of The Layers
            foreach (var Layer in _Layers)
            {
                if (Layer.Value.Visible)
                {
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.Main)))
                    {
                        _G.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.Main)].GetLayerImage(Layer.Key.ToLower()), new Point(OffsetX, OffsetY));
                    }
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.Left)))
                    {
                        _G.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.Left)].GetLayerImage(Layer.Key.ToLower()), new Rectangle(0, OffsetY, OffsetX, 600), new Rectangle(800 - OffsetX, 0, OffsetX, 600), GraphicsUnit.Pixel);
                    }
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.Right)))
                    {
                        _G.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.Right)].GetLayerImage(Layer.Key.ToLower()), new Rectangle(800 + OffsetX, OffsetY, OffsetX, 600), new Rectangle(0, 0, OffsetX, 600), GraphicsUnit.Pixel);
                    }
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.Bottom)))
                    {
                        _G.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.Bottom)].GetLayerImage(Layer.Key.ToLower()), new Rectangle(OffsetX, 600 + OffsetY, 800, OffsetY), new Rectangle(0, 0, 800, OffsetY), GraphicsUnit.Pixel);
                    }
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.Top)))
                    {
                        _G.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.Top)].GetLayerImage(Layer.Key.ToLower()), new Rectangle(OffsetX, 0, 800, OffsetY), new Rectangle(0, 600 - OffsetY, 800, OffsetY), GraphicsUnit.Pixel);
                    }
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.TopLeft)))
                    {
                        _G.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.TopLeft)].GetLayerImage(Layer.Key.ToLower()), new Rectangle(0, 0, OffsetX, OffsetY), new Rectangle(800 - OffsetX, 600 - OffsetY, OffsetX, OffsetY), GraphicsUnit.Pixel);
                    }
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.TopRight)))
                    {
                        _G.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.TopRight)].GetLayerImage(Layer.Key.ToLower()), new Rectangle(800 + OffsetX, 0, OffsetX, OffsetY), new Rectangle(0, 600 - OffsetY, OffsetX, OffsetY), GraphicsUnit.Pixel);
                    }
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.BottomRight)))
                    {
                        _G.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.BottomRight)].GetLayerImage(Layer.Key.ToLower()), new Rectangle(800 + OffsetX, 600 + OffsetY, OffsetX, OffsetY), new Rectangle(0, 0, OffsetX, OffsetY), GraphicsUnit.Pixel);
                    }
                    if (Screens.ContainsKey(GetKey(X, Y, Enumerations.RelativePosition.BottomLeft)))
                    {
                        _G.DrawImage(Screens[GetKey(X, Y, Enumerations.RelativePosition.BottomLeft)].GetLayerImage(Layer.Key.ToLower()), new Rectangle(0, 600 + OffsetY, OffsetX, OffsetY), new Rectangle(800 - OffsetX, 0, OffsetX, OffsetY), GraphicsUnit.Pixel);
                    }
                }
            }
            #endregion

            #region Draw The Objects

            var AllObjs = from QMapObject in Screens.Values.SelectMany(x => x.MapObjects)
                          where QMapObject.Screen.InRange(X, Y, OffsetX, OffsetY)
                          orderby QMapObject.DrawLocation.Y
                          select new { QMapObject, QMapObject.Screen.X, QMapObject.Screen.Y };

            foreach (var MapO in AllObjs)
            {
                Enumerations.RelativePosition _RPos = EditorScreen.GetRelativePos(X, Y, MapO.X, MapO.Y);

                if (_RPos == Enumerations.RelativePosition.Main)
                {
                    Point _DrawPoint = new Point(MapO.QMapObject.DrawLocation.X + OffsetX, MapO.QMapObject.DrawLocation.Y + OffsetY);
                    _G.DrawImage(ResourceManager.GetMapObjectImageStart(MapO.QMapObject.ID.ToString()), _DrawPoint);
                }
                else if (_RPos == Enumerations.RelativePosition.Right)
                {
                    Point _DrawPoint = new Point(MapO.QMapObject.DrawLocation.X + 800 + OffsetX, MapO.QMapObject.DrawLocation.Y + OffsetY);
                    _G.DrawImage(ResourceManager.GetMapObjectImageStart(MapO.QMapObject.ID.ToString()), _DrawPoint);
                }
                else if (_RPos == Enumerations.RelativePosition.Left)
                {
                    Point _DrawPoint = new Point(MapO.QMapObject.DrawLocation.X - 800, MapO.QMapObject.DrawLocation.Y + OffsetY);
                    _G.DrawImage(ResourceManager.GetMapObjectImageStart(MapO.QMapObject.ID.ToString()), _DrawPoint);
                }
                else if (_RPos == Enumerations.RelativePosition.Top)
                {
                    Point _DrawPoint = new Point(MapO.QMapObject.DrawLocation.X + OffsetX, MapO.QMapObject.DrawLocation.Y - 600);
                    _G.DrawImage(ResourceManager.GetMapObjectImageStart(MapO.QMapObject.ID.ToString()), _DrawPoint);
                }
                else if (_RPos == Enumerations.RelativePosition.Bottom)
                {
                    Point _DrawPoint = new Point(MapO.QMapObject.DrawLocation.X + OffsetX, MapO.QMapObject.DrawLocation.Y + 600);
                    _G.DrawImage(ResourceManager.GetMapObjectImageStart(MapO.QMapObject.ID.ToString()), _DrawPoint);
                }
            }



            #endregion

            #region Draw The Selected Object

            if (SelectedMapObject != Guid.Empty)
            {
                var SelectedObjs = from QMapObject in Screens.Values.SelectMany(x => x.MapObjects)
                                   where QMapObject.ID == SelectedMapObject
                                   select QMapObject;
                var FirstObject = SelectedObjs.ToList()[0];

                _G.DrawRectangle(Pens.White, new Rectangle(new Point(FirstObject.DrawLocation.X + OffsetX, FirstObject.DrawLocation.Y + OffsetY), FirstObject.ImageSize));
            }

            #endregion

            // Draw The Bounding Box for Refrence
            _G.DrawRectangle(Pens.Black, new Rectangle(OffsetX - 1, OffsetY - 1, 800, 600));

            return(_BackBufferImage);
        }
Exemple #6
0
        public EditorWorld(string FileName, int EditorWidth, int EditorHeight, Point FocusPoint)
        {
            if (System.IO.File.Exists(FileName) == false)
            {
                throw new Exception("World File Not Found");
            }

            _ApplicationDirectory = AppDomain.CurrentDomain.BaseDirectory.EnsureDirectoryFormat();
            _BaseDirectory        = FileName.Substring(0, FileName.LastIndexOf("\\") + 1).EnsureDirectoryFormat();
            _LayersDirectory      = _BaseDirectory + "layers\\";
            _ObjectDirectory      = _BaseDirectory + "objects\\";

            // LOAD FILE NEW FORMAT
            dynamic Settings = ACT.Core.Dynamic.Encoder.LoadFromFile(FileName);

            NonPassableColor = System.Drawing.ColorTranslator.FromHtml(Settings.nonpassablecolor);

            #region Load The Layers
            foreach (string name in Settings.layers.GetMemberNames)
            {
                if (name == "name")
                {
                    continue;
                }
                dynamic   _TmpLayerData = Settings.layers.GetObject(name);
                LayerInfo _NewLayer     = new LayerInfo();
                _NewLayer.Name      = _TmpLayerData.Name;
                _NewLayer.Visible   = Convert.ToBoolean(_TmpLayerData.visible);
                _NewLayer.LayerType = Enum.Parse(typeof(Enumerations.LayerType), _TmpLayerData.type);
                _Layers.Add(_NewLayer.Name, _NewLayer);
            }
            #endregion

            #region Load The Screens
            foreach (string name in Settings.screens.GetMemberNames)
            {
                if (name == "name")
                {
                    continue;
                }
                dynamic _TmpScreenData = Settings.screens.GetObject(name);

                string[] PositionData = name.SplitString("-", StringSplitOptions.RemoveEmptyEntries);
                if (PositionData.Length != 2)
                {
                    ErrorLogable.LogError(null, "Invalid PositionData-Name", ACT.Core.Enums.ErrorLevel.Severe);
                    continue;
                }
                EditorScreen _NewScreen = new EditorScreen(Convert.ToInt32(PositionData[0]), Convert.ToInt32(PositionData[1]), this);

                #region Load the Objects
                foreach (string objname in _TmpScreenData.objects.GetMemberNames)
                {
                    if (objname == "name")
                    {
                        continue;
                    }
                    dynamic MapObjectInfo = _TmpScreenData.objects.GetObject(objname);
                    try
                    {
                        MapObject _NewMapObject = new MapObject();
                        _NewMapObject.ID = new Guid(objname.Trim());
                        string _MapImageLocation = _ObjectDirectory + _NewMapObject.ID + ".png";

                        if (!System.IO.File.Exists(_MapImageLocation))
                        {
                            ErrorLogable.LogError(null, "Error Locating Object: " + _NewMapObject.ID.ToString(), ACT.Core.Enums.ErrorLevel.Critical);
                            continue;
                        }

                        string _Location = MapObjectInfo.location;
                        string _Size     = MapObjectInfo.size;

                        string[] _Points = _Location.SplitString(",", StringSplitOptions.RemoveEmptyEntries);
                        string[] _Sizes  = _Location.SplitString(",", StringSplitOptions.RemoveEmptyEntries);

                        _NewMapObject.DrawLocation = new Point(Convert.ToInt32(_Points[0]), Convert.ToInt32(_Points[1]));
                        _NewMapObject.ImageSize    = new Size(Convert.ToInt32(_Sizes[0]), Convert.ToInt32(_Sizes[1]));
                        _NewMapObject.Position     = Enum.Parse(typeof(NebulaGames.RPGWorld.Enumerations.RelativePosition), MapObjectInfo.relativeposition);
                        _NewMapObject.ResourceName = "";
                        _NewMapObject.Screen       = _NewScreen;
                        _NewScreen.MapObjects.Add(_NewMapObject);

                        Graphics.CompressibleImage _TmpMapObject = new CompressibleImage(Image.FromFile(_MapImageLocation), System.Drawing.Imaging.ImageFormat.Png);

                        ResourceManager.AddObject(_NewMapObject.ID.ToString(), _TmpMapObject);
                    }
                    catch (Exception ex)
                    {
                        ErrorLogable.LogError(ex, "Error Loading Object: " + name, ACT.Core.Enums.ErrorLevel.Critical);
                    }
                }
                #endregion

                #region Load the Layer Images
                foreach (string TmpLayerName in _Layers.Keys)
                {
                    if (System.IO.File.Exists(_LayersDirectory + TmpLayerName + "\\" + name + ".png"))
                    {
                        _NewScreen.AddUpdateLayerImage(TmpLayerName.ToLower(), Image.FromFile(_LayersDirectory + TmpLayerName + "\\" + name + ".png"));
                    }
                }
                #endregion

                Screens.Add(name, _NewScreen);
            }
            #endregion

            EditorScreenWidth  = EditorWidth;
            EditorScreenHeight = EditorHeight;

            OffsetX = (EditorScreenWidth - 800) / 2;
            OffsetY = (EditorScreenHeight - 600) / 2;

            _BackBufferImage = new Bitmap(EditorScreenWidth, EditorScreenHeight);
            _G = System.Drawing.Graphics.FromImage(_BackBufferImage);
            _MiniMapBufferGraphics      = System.Drawing.Graphics.FromImage(_MiniMapBufferImage);
            _SingleScreenGraphicsObject = System.Drawing.Graphics.FromImage(_SingleScreenImage);
        }