protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if(this.ActiveBlueprint == null) return;
List<Corner> cornerExcludes = new List<Corner>();
List<Wall> wallExcludes = new List<Wall>();
Graphics g = e.Graphics;
BlueprintRenderEventArgs centerArgs = new BlueprintRenderEventArgs(g, this._editMode, this._center, null, null);
this.Renderer.OnRenderCenter(centerArgs);
foreach(Room room in this.ActiveBlueprint.Rooms) {
BlueprintRenderEventArgs roomArgs = new BlueprintRenderEventArgs(g, this._editMode, this._center, room, room.GetType());
if(room == this.SelectedRoom) this.Renderer.OnRenderRoomSelected(roomArgs);
else if(room == this._currentRoom) this.Renderer.OnRenderRoomNew(roomArgs);
else if(room == this.HoveredRoom) this.Renderer.OnRenderRoomHover(roomArgs);
else this.Renderer.OnRenderRoom(roomArgs);
foreach(Corner corner in room.GetCorners()) {
if(cornerExcludes.Contains(corner)) continue;
cornerExcludes.Add(corner);
foreach(Wall wall in corner.GetWalls()) {
if(wallExcludes.Contains(wall)) continue;
wallExcludes.Add(wall);
BlueprintRenderEventArgs wallArgs = new BlueprintRenderEventArgs(g, this._editMode, this._center, wall, wall.GetType());
if(wall == this.SelectedWall) this.Renderer.OnRenderWallSelected(wallArgs);
else if(wall == this.HoveredWall) this.Renderer.OnRenderWallHover(wallArgs);
else this.Renderer.OnRenderWall(wallArgs);
}
BlueprintRenderEventArgs cornerArgs = new BlueprintRenderEventArgs(g, this._editMode, this._center, corner, corner.GetType());
if(corner == this.SelectedCorner) this.Renderer.OnRenderCornerSelected(cornerArgs);
else if(corner == this.HoveredCorner) this.Renderer.OnRenderCornerHover(cornerArgs);
else if((this._currentRoom != null && this._currentRoom.GetCorners().Contains(corner))
|| this.SelectedRoom != null && this.SelectedRoom.GetCorners().Contains(corner))
this.Renderer.OnRenderCornerHighlighted(cornerArgs);
else this.Renderer.OnRenderCorner(cornerArgs);
if(this._snapCorners.Count > 0 && this._movingCorner
&& (corner == this.SelectedCorner || this._snapCorners.Contains(corner))) {
this.Renderer.OnRenderCornerSnap(cornerArgs);
}
}
}
g.FillRectangle(Brushes.White, new Rectangle(0, 0, 100, 20));
g.DrawRectangle(Pens.Black, new Rectangle(0, 0, 100, 20));
g.DrawString(this.ActiveBlueprint.Name, new Font("Arial", 12, FontStyle.Bold), Brushes.Black, new RectangleF(0, 0, 100, 20));
if(this._status != Status.None) {
string hint = string.Empty;
switch(this._status) {
case Status.CreateRoomSelect:
hint = HINT_CREATE_ROOM_SELECTCORNER;
break;
case Status.CreateRoom:
hint = HINT_CREATE_ROOM;
break;
case Status.CreateCorner:
hint = HINT_CREATE_CORNER;
break;
case Status.ConnectCorners:
hint = HINT_CONNECT_CORNERS;
break;
default:
break;
}
if(hint != string.Empty) {
g.DrawString(hint, new Font("Arial", 16, FontStyle.Italic), Brushes.Black, new RectangleF(10, 25, 400, 50));
}
}
}