コード例 #1
0
        public RoomDlg(Room room, AdvData data, ViewMode mode, MainForm parent, Form mdiParent)
        {
            InitializeComponent();
            mRoom = room;
            mData = data;
            mMode = mode;
            updateRoom();

            this.ClientSize = new Size(data.WindowXRes, data.Settings.Resolution.y);
            this.Paint += new PaintEventHandler(RoomDlg_Paint);
            this.MouseDown += new MouseEventHandler(RoomDlg_MouseDown);
            this.MouseMove += new MouseEventHandler(RoomDlg_MouseMove);
            this.MouseUp += new MouseEventHandler(RoomDlg_MouseUp);
            this.DoubleClick += new EventHandler(RoomDlg_DoubleClick);
            this.KeyPress += new KeyPressEventHandler(RoomDlg_KeyPress);
            this.FormClosed += new FormClosedEventHandler(RoomDlg_FormClosed);
            this.DragOver += new DragEventHandler(RoomDlg_DragOver);
            this.DragDrop += new DragEventHandler(RoomDlg_DragDrop);
            mControl = new RoomCtrlDlg(room, data, parent);
            mControl.MdiParent = mdiParent;
            mControl.Location = new Point(Screen.GetWorkingArea(this).Width-mControl.Width, 0);
            mControl.StartPosition = FormStartPosition.Manual;
            mControl.Show();
            mControl.RedrawRoom += new RoomCtrlDlg.RedrawEventHandler(mControl_RedrawRoom);
            mTimer = new Timer();
            mTimer.Tick += new EventHandler(mTimer_Tick);
            mTimer.Interval = 50;
            mTimer.Start();
            mOwner = parent;
        }
コード例 #2
0
 public RoomCtrlDlg(Room room, AdvData data, MainForm mf)
 {
     InitializeComponent();
     mRoom = room;
     mData = data;
     mParent = mf;
     for (int i = 1; i <= 9; ++i)
     {
         zoomfactor.Items.Add(i);
     }
     for (int i = 0; i <= 10; ++i)
     {
         obj_state.Items.Add(i);
     }
     zoomfactor.SelectedItem = mRoom.Zoom;
     doublewalkmap.Checked = mRoom.DoubleWalkmap;
     roomwidth.Minimum = data.WindowXRes;
     roomwidth.Maximum = data.Settings.Resolution.x * 3;
     roomheight.Minimum = data.Settings.Resolution.y;
     roomheight.Maximum = data.Settings.Resolution.y * 2;
     roomwidth.Value = mRoom.Size.x < roomwidth.Minimum ? roomwidth.Minimum : mRoom.Size.x;
     roomheight.Value = mRoom.Size.y;
     light_color.BackColor = mRoom.Lighting;
     mDragOffset.x = -1;
     scroller.Paint += new PaintEventHandler(scroller_Paint);
     scroller.MouseDown += new MouseEventHandler(scroller_MouseDown);
     scroller.MouseMove += new MouseEventHandler(scroller_MouseMove);
     scroller.MouseUp += new MouseEventHandler(scroller_MouseUp);
     roomwidth.ValueChanged += new EventHandler(roomwidth_ValueChanged);
     roomheight.ValueChanged += new EventHandler(roomheight_ValueChanged);
     mFxShapes = new FxShapeTabCtrl(mRoom.FXShapes, this);
     mFxShapes.Visible = false;
     mFxShapes.Location = objectgroup.Location;
     this.Controls.Add(mFxShapes);
     mInvSpacing = new NumericUpDown();
     mInvSpacing.Visible = false;
     mInvSpacing.Location = objectgroup.Location;
     mInvSpacing.Value = room.InvSpacing;
     mInvSpacing.Minimum = 2;
     mInvSpacing.Maximum = 20;
     this.Controls.Add(mInvSpacing);
     mInvSpacing.ValueChanged += new EventHandler(mInvSpacing_ValueChanged);
 }
コード例 #3
0
 public void addRoom(Room room)
 {
     mRooms.Add(room.Name.ToLower(), room);
 }
コード例 #4
0
 protected bool readObjectsLoop(StreamReader rdr, int ver_major, int ver_minor, TreeNode parent)
 {
     string str;
     while (!rdr.EndOfStream)
     {
         str = rdr.ReadLine();
         if (rdr.EndOfStream)
             return true;
         if (str.Length < 2)
             continue;
         string rest = str.Substring(2);
         //TODO check
         string[] typename = new string[2];
         int idx = rest.IndexOf(' ');
         typename[0] = rest.Substring(0, idx);
         typename[1] = rest.Substring(idx+1);
         //ITEM
         if (typename[0] == "Item")
         {
             Item it = new Item(mAdv);
             it.Name = typename[1];
             int numStates = STATES_MAX;
             int delim = 2;
             if (ver_major == 2 || (ver_major == 3 && ver_minor == 0))
             {
                 numStates = 1;
                 delim = 1;
             }
             for (int state = 0; state < numStates; ++state)
             {
                 ItemState ist;
                 ist.frames = new System.Collections.ArrayList();
                 ist.scripts = new System.Collections.ArrayList();
                 for (int frames = 0; frames < FRAMES_MAX; ++frames)
                 {
                     str = rdr.ReadLine();
                     if (str.Length > 0)
                     {
                         if (delim == 2)
                         {
                             string[] split = str.Split(';');
                             ist.frames.Add(split[0]);
                             if (split.Length > 1)
                                 ist.scripts.Add(split[1].Replace('\xaf', ';'));
                             else
                                 ist.scripts.Add("");
                         }
                         else
                         {
                             ist.frames.Add(str.Substring(0, str.Length + 1 - delim));
                             ist.scripts.Add("");
                         }
                     }
                 }
                 str = rdr.ReadLine();
                 ist.fpsDivider = Convert.ToInt32(str);
                 it.Add(ist);
             }
             if (ver_major == 2 || (ver_major == 3 && ver_minor == 0))
             {
                 for (int i = 1; i < STATES_MAX; ++i)
                 {
                     ItemState ist;
                     ist.frames = new System.Collections.ArrayList();
                     ist.scripts = new System.Collections.ArrayList();
                     ist.fpsDivider = 20;
                     it.Add(ist);
                 }
             }
             mAdv.addItem(it);
         }
         //OBJECT
         else if (typename[0] == "Object")
         {
             AdvObject obj = mAdv.getObject(typename[1]);
             if (obj == null)
             {
                 obj = new AdvObject(mAdv);
                 obj.Name = typename[1];
                 mAdv.addObject(obj);
             }
             str = rdr.ReadLine();
             int x = Convert.ToInt32(str);
             str = rdr.ReadLine();
             int y = Convert.ToInt32(str);
             obj.setSize(0, new Vec2i(x, y));
             str = rdr.ReadLine();
             x = Convert.ToInt32(str);
             obj.Lighten = x != 0;
             for (int state = 0; state < STATES_MAX; ++state)
             {
                 ObjectState os = new ObjectState();
                 os.fpsDivider = readExtendedFrames(rdr, os.frames);
                 obj.Add(os);
             }
         }
         //CHARACTER
         else if (typename[0] == "Character")
         {
             AdvCharacter chr = new AdvCharacter(mAdv);
             chr.Name = typename[1];
             str = rdr.ReadLine();
             chr.TextColor = Convert.ToUInt32(str);
             chr.WalkSpeed = Convert.ToInt32(rdr.ReadLine());
             if (ver_major > 0)
             {
                 int tmp = Convert.ToInt32(rdr.ReadLine());
                 chr.NoZoom = tmp != 0;
                 if (ver_major > 3 || (ver_major == 3 && ver_minor > 0))
                 {
                     tmp = Convert.ToInt32(rdr.ReadLine());
                     chr.RealLeftAnimations = tmp != 0;
                 }
                 tmp = Convert.ToInt32(rdr.ReadLine());
                 chr.MemoryReistent = tmp != 0;
                 tmp = Convert.ToInt32(rdr.ReadLine());
                 chr.Ghost = tmp != 0;
                 chr.Walksound = rdr.ReadLine();
             }
             if (ver_major >= 3)
             {
                 str = rdr.ReadLine();
                 string[] names = str.Split(';');
                 for (int i = 0; i < names.Length - 1; ++i)
                 {
                     chr.setStateName(16 + i, names[i]);
                 }
             }
             else
             {
                 for (int i = 0; i < 20; ++i)
                     chr.setStateName(16 + i, "");
             }
             if (ver_major > 0)
             {
                 chr.Font = Convert.ToInt32(rdr.ReadLine());
                 chr.Zoom = Convert.ToInt32(rdr.ReadLine());
             }
             else
                 chr.Zoom = 100;
             for (int state = 0; state < CHAR_STATES_MAX; ++state)
             {
                 CharacterState cs = new CharacterState();
                 cs.size.x = Convert.ToInt32(rdr.ReadLine());
                 cs.size.y = Convert.ToInt32(rdr.ReadLine());
                 cs.basepoint.x = Convert.ToInt32(rdr.ReadLine());
                 cs.basepoint.y = Convert.ToInt32(rdr.ReadLine());
                 cs.fpsDivider = readExtendedFrames(rdr, cs.frames);
                 chr.Add(cs);
             }
             mAdv.addCharacter(chr);
         }
         //CHARACTER INSTANCE
         else if (typename[0] == "Rcharacter")
         {
             string chr = rdr.ReadLine();
             CharacterInstance charinst = new CharacterInstance(mAdv.getCharacter(chr), mAdv);
             if (charinst.Character == null)
                 throw new UnexpectedValueException("No character for character instance found");
             charinst.Name = typename[1];
             charinst.Room = rdr.ReadLine();
             Vec2i pos;
             pos.x = Convert.ToInt32(rdr.ReadLine());
             pos.y = Convert.ToInt32(rdr.ReadLine());
             charinst.RawPosition = pos;
             charinst.LookDir = Convert.ToInt32(rdr.ReadLine());
             charinst.Unmovable = Convert.ToInt32(rdr.ReadLine()) == 0;
             charinst.Locked = Convert.ToInt32(rdr.ReadLine()) != 0;
             if (!mAdv.CharacterInstances.ContainsKey(charinst.Room.ToLower()))
             {
                 mAdv.CharacterInstances[charinst.Room.ToLower()] = new System.Collections.ArrayList();
             }
             mAdv.CharacterInstances[charinst.Room.ToLower()].Add(charinst);
         }
         //ROOM
         else if (typename[0] == "Room")
         {
             Room room = new Room();
             room.Data = mAdv;
             room.Name = typename[1];
             room.Size.x = Convert.ToInt32(rdr.ReadLine());
             room.Size.y = Convert.ToInt32(rdr.ReadLine());
             room.ScrollOffset.x = Convert.ToInt32(rdr.ReadLine());
             room.ScrollOffset.y = Convert.ToInt32(rdr.ReadLine());
             room.Depthmap.x = Convert.ToInt32(rdr.ReadLine());
             room.Depthmap.y = Convert.ToInt32(rdr.ReadLine());
             room.Zoom = Convert.ToInt32(rdr.ReadLine());
             room.Background = rdr.ReadLine();
             room.ParallaxBackground = rdr.ReadLine();
             room.FXShapes = new System.Collections.ArrayList();
             if (ver_major >= 3)
             {
                 int tmp = Convert.ToInt32(rdr.ReadLine());
                 room.DoubleWalkmap = tmp != 0;
             }
             else
             {
                 room.DoubleWalkmap = false;
             }
             if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5))
             {
                 str = rdr.ReadLine();
                 string[] col = str.Split(';');
                 room.Lighting = Color.FromArgb(Convert.ToInt32(col[0]), Convert.ToInt32(col[1]), Convert.ToInt32(col[2]));
             }
             else
                 room.Lighting = Color.FromArgb(255, 255, 255);
             if (ver_major >= 3 || (ver_major == 2 && ver_minor >= 8))
             {
                 for (int i = 0; i < FXSHAPES_MAX; ++i)
                 {
                     FxShape shape = new FxShape();
                     str = rdr.ReadLine();
                     string[] split = str.Split(';');
                     shape.Active = Convert.ToInt32(split[0]) != 0;
                     shape.DependingOnRoomPosition = Convert.ToInt32(split[1]) != 0;
                     shape.Effect = (FxShape.FxEffect)Convert.ToInt32(rdr.ReadLine());
                     shape.Room = rdr.ReadLine();
                     shape.Depth = Convert.ToInt32(rdr.ReadLine());
                     shape.MirrorOffset.x = Convert.ToInt32(rdr.ReadLine());
                     shape.MirrorOffset.y = Convert.ToInt32(rdr.ReadLine());
                     shape.Strength = Convert.ToInt32(rdr.ReadLine());
                     str = rdr.ReadLine();
                     split = str.Split(';');
                     for (int pos = 0; pos < 4; ++pos)
                     {
                         shape.Positions[pos].x = Convert.ToInt32(split[2 * pos]);
                         shape.Positions[pos].y = Convert.ToInt32(split[2 * pos + 1]);
                     }
                     room.FXShapes.Add(shape);
                 }
             }
             else
             {
                 for (int i = 0; i < FXSHAPES_MAX; ++i)
                 {
                     FxShape fs = new FxShape(i);
                     room.FXShapes.Add(fs);
                 }
             }
             //inventory
             room.HasInventory = Convert.ToInt32(rdr.ReadLine()) != 0;
             str = rdr.ReadLine();
             string[] inventory = str.Split(';');
             room.InvPos.x = Convert.ToInt32(inventory[0]);
             room.InvPos.y = Convert.ToInt32(inventory[1]);
             room.InvSize.x = Convert.ToInt32(inventory[2]);
             room.InvSize.y = Convert.ToInt32(inventory[3]);
             if (ver_major < 3)
             {
                 if (room.InvSize.x == 0 || room.InvSize.y == 0)
                     room.HasInventory = false;
                 else
                     room.HasInventory = true;
             }
             System.Globalization.NumberFormatInfo info = new System.Globalization.NumberFormatInfo();
             info.NumberDecimalSeparator = ",";
             try
             {
                 room.InvScale.x = Single.Parse(inventory[4], info);
                 room.InvScale.y = Single.Parse(inventory[5], info);
             }
             catch (Exception)
             {
                 info.NumberDecimalSeparator = ".";
                 room.InvScale.x = Single.Parse(inventory[4], info);
                 room.InvScale.y = Single.Parse(inventory[5], info);
             }
             if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5)){
                 room.InvSpacing = Convert.ToInt32(inventory[6]);
             }
             else
                 room.InvSpacing = 10;
             //walkmap
             str = rdr.ReadLine();
             int walkmapX = 32;
             int walkGridSize = mAdv.Settings.Resolution.x / walkmapX;
             int walkmapY = mAdv.Settings.Resolution.y / walkGridSize;
             walkmapX *= 3;
             walkmapY *= 2;
             int walkmapXOut = walkmapX * 2;
             int walkmapYOut = walkmapY * 2;
             if (ver_major >= 3)
             {
                 walkmapX *= 2;
                 walkmapY *= 2;
             }
             room.Walkmap = new Room.WalkMapEntry[walkmapXOut, walkmapYOut];
             for (int i = 0; i < walkmapX * walkmapY; ++i)
             {
                 int x = i / walkmapY;
                 int y = i % walkmapY;
                 room.Walkmap[x, y].isFree = str[2 * i] != '1';
                 room.Walkmap[x, y].hasScript = str[2 * i + 1] == '1';
             }
             if (mAdv.CharacterInstances.ContainsKey(room.Name.ToLower()))
                 room.Characters = mAdv.CharacterInstances[room.Name.ToLower()];
             mAdv.addRoom(room);
             mLastRoom = room;
         }
         //OBJECT INSTANCE
         else if (typename[0] == "Roomobject")
         {
             string obj = rdr.ReadLine();
             AdvObject newobj = mAdv.getObject(obj);
             if (newobj == null)
             {
                 //this happens during room import
                 newobj = new AdvObject(mAdv);
                 newobj.Name = obj;
                 mAdv.addObject(newobj);
                 //auto add objects
                 if (parent != null)
                 {
                     TreeNode tno = new TreeNode(obj);
                     tno.Tag = ResourceID.OBJECT;
                     tno.ImageIndex = Utilities.ResourceIDToImageIndex((ResourceID)tno.Tag);
                     tno.SelectedImageIndex = tno.ImageIndex;
                     parent.Nodes.Add(tno);
                 }
             }
             ObjectInstance objinst = new ObjectInstance(mAdv.getObject(obj), mAdv);
             objinst.Name = typename[1];
             objinst.Position.x = Convert.ToInt32(rdr.ReadLine());
             objinst.Position.y = Convert.ToInt32(rdr.ReadLine());
             objinst.State = Convert.ToInt32(rdr.ReadLine());
             objinst.Layer = Convert.ToInt32(rdr.ReadLine());
             objinst.Depth = Convert.ToInt32(rdr.ReadLine())*2;
             if (ver_major > 3 || (ver_major == 3 && ver_minor >= 5))
             {
                 objinst.Depth = Convert.ToInt32(rdr.ReadLine());
             }
             objinst.Locked = Convert.ToInt32(rdr.ReadLine()) != 0;
             mLastRoom.Objects.Add(objinst);
         }
     }
     return true;
 }
コード例 #5
0
ファイル: Room.cs プロジェクト: captain-mayhem/captainsengine
 public Room duplicate(string name)
 {
     Room rm = new Room();
     rm.mData = mData;
     rm.Name = name;
     rm.Size = Size;
     rm.ScrollOffset = ScrollOffset;
     rm.Depthmap = Depthmap;
     rm.Zoom = Zoom;
     rm.Background = Background;
     rm.ParallaxBackground = ParallaxBackground;
     rm.DoubleWalkmap = DoubleWalkmap;
     rm.FXShapes = new ArrayList(FXShapes.Count);
     for (int i = 0; i < FXShapes.Count; ++i)
     {
         FxShape shape = (FxShape)FXShapes[i];
         rm.FXShapes.Add(shape.Clone());
     }
     rm.HasInventory = HasInventory;
     rm.InvPos = InvPos;
     rm.InvScale = InvScale;
     rm.InvSize = InvSize;
     rm.InvSpacing = InvSpacing;
     rm.Walkmap = (WalkMapEntry[,])Walkmap.Clone();
     rm.Lighting = Lighting;
     foreach (ObjectInstance inst in Objects)
     {
         ObjectInstance newinst = inst.duplicate(Name, rm.Name);
         rm.Objects.Add(newinst);
     }
     foreach (CharacterInstance inst in Characters)
     {
         CharacterInstance newinst = inst.duplicate(rm.Name);
         rm.Characters.Add(newinst);
     }
     Script roomscr = mData.getScript(Script.Type.ROOM, Name);
     mData.addScript(roomscr.duplicate(rm.Name));
     for (int x = 0; x <= Walkmap.GetUpperBound(0); ++x)
     {
         for (int y = 0; y <= Walkmap.GetUpperBound(1); ++y)
         {
             if (Walkmap[x, y].hasScript)
             {
                 Script wmscr = mData.getScript(Script.Type.WALKMAP, Script.toScriptName(x, y, Name, mData));
                 mData.addScript(wmscr.duplicate(Script.toScriptName(x, y, rm.Name, mData)));
             }
         }
     }
     return rm;
 }