private void Tool_ImportRoom_Click(object sender, EventArgs e)
        {
            int selectedRoom = RoomListBox.Items.Count;
            OpenFileDialog input = new OpenFileDialog();
            input.CheckFileExists = true;
            input.CheckPathExists = true;
            input.AddExtension = true;
            input.DefaultExt = ".rm";
            input.Filter = "Room file (*.rm)|*.rm";
            if (DialogResult.OK == input.ShowDialog())
            {
                StreamReader inFile = new StreamReader(input.FileName.ToString());

                // Import every room
                Room newRoom = new Room();
                newRoom.x = Convert.ToInt32(inFile.ReadLine());
                newRoom.y = Convert.ToInt32(inFile.ReadLine());
                newRoom.width = Convert.ToInt32(inFile.ReadLine());
                newRoom.height = Convert.ToInt32(inFile.ReadLine());
                newRoom.backgroundID = Convert.ToInt32(inFile.ReadLine());
                newRoom.checkpoint = Convert.ToBoolean(Convert.ToInt32(inFile.ReadLine()));
                newRoom.checkpointX = Convert.ToInt32(inFile.ReadLine());
                newRoom.checkpointY = (float)Convert.ToDecimal(inFile.ReadLine());
                roomList.Add(newRoom);
                RoomListBox.Items.Add(newRoom);
                _updateRoom(-1, newRoom.x, newRoom.y, newRoom.height, newRoom.width, newRoom.checkpoint, newRoom.checkpointX, newRoom.checkpointY, newRoom.backgroundID);

                // Import every wall
                int numWallTiles = Convert.ToInt32(inFile.ReadLine());
                for (int wallIter = 0; wallIter < numWallTiles; wallIter++)
                {
                    Wall newWall = new Wall();
                    newWall.x = Convert.ToInt32(inFile.ReadLine());
                    newWall.y = Convert.ToInt32(inFile.ReadLine());
                    newWall.size = Convert.ToInt32(inFile.ReadLine());
                    newWall.horizontal = Convert.ToBoolean(Convert.ToInt32(inFile.ReadLine()));
                    roomList[selectedRoom].wallTiles.Add(newWall);
                    //WallListBox.Items.Add(newRoom.info);
                    _updateWallTile(selectedRoom, -1, newWall.x, newWall.y, newWall.horizontal, newWall.size);
                }

                // Import every light
                int numLights = Convert.ToInt32(inFile.ReadLine());
                for (int lightIter = 0; lightIter < numLights; lightIter++)
                {
                    Light newLight = new Light();
                    newLight.type = (Light.LightType)Convert.ToInt32(inFile.ReadLine());
                    newLight.x = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLight.y = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLight.z = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLight.red = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLight.green = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLight.blue = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLight.radius = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLight.intensity = (float)Convert.ToDecimal(inFile.ReadLine());
                    roomList[selectedRoom].lights.Add(newLight);
                    //RoomLightListBox.Items.Add(newLight);
                    _updateLight(selectedRoom, -1, (int)newLight.type, newLight.x, newLight.y, newLight.z, newLight.red, newLight.green, newLight.blue, newLight.radius, newLight.intensity);
                }

                // Import every game object
                int numGameObjects = Convert.ToInt32(inFile.ReadLine());
                for (int objectIter = 0; objectIter < numGameObjects; objectIter++)
                {
                    GameObject newObject = new GameObject();
                    newObject.x = Convert.ToInt32(inFile.ReadLine());
                    newObject.y = Convert.ToInt32(inFile.ReadLine());
                    newObject.objectID = Convert.ToInt32(inFile.ReadLine());
                    newObject.rotation = Convert.ToInt32(inFile.ReadLine());
                    newObject.flag = Convert.ToInt32(inFile.ReadLine());
                    roomList[selectedRoom].objects.Add(newObject);
                    //GameObjectListBox.Items.Add(newObject);
                    _updateGameObject(selectedRoom, -1, newObject.x, newObject.y, newObject.rotation, newObject.objectID);
                }

                // Import every door
                int numDoors = Convert.ToInt32(inFile.ReadLine());
                for (int doorIter = 0; doorIter < numDoors; doorIter++)
                {
                    Door newDoor = new Door();
                    newDoor.x = Convert.ToInt32(inFile.ReadLine());
                    newDoor.y = Convert.ToInt32(inFile.ReadLine());
                    newDoor.breakable = Convert.ToBoolean(Convert.ToInt32(inFile.ReadLine()));
                    newDoor.rotation = Convert.ToInt32(inFile.ReadLine());
                    newDoor.roomID = Convert.ToInt32(inFile.ReadLine());
                    newDoor.roomX = (float)Convert.ToDecimal(inFile.ReadLine());
                    newDoor.roomY = (float)Convert.ToDecimal(inFile.ReadLine());
                    roomList[selectedRoom].doors.Add(newDoor);
                    //DoorListBox.Items.Add(newDoor.info);
                    _updateDoor(selectedRoom, -1, newDoor.roomID, newDoor.breakable, newDoor.x, newDoor.y, newDoor.roomX, newDoor.roomY, newDoor.rotation);
                }

                // Import every platform
                int numPlatforms = Convert.ToInt32(inFile.ReadLine());
                for (int platformIter = 0; platformIter < numPlatforms; platformIter++)
                {
                    MovingPlatform newPlatform = new MovingPlatform();
                    int waypointCount = Convert.ToInt32(inFile.ReadLine());
                    newPlatform.x = (float)Convert.ToDecimal(inFile.ReadLine());
                    newPlatform.y = (float)Convert.ToDecimal(inFile.ReadLine());
                    for (int waypointIter = 0; waypointIter < waypointCount - 1; waypointIter++)
                    {
                        Base newWaypoint = new Base();
                        newWaypoint.x = (float)Convert.ToDecimal(inFile.ReadLine());
                        newWaypoint.y = (float)Convert.ToDecimal(inFile.ReadLine());
                        newPlatform.waypoints.Add(newWaypoint);
                    }
                    newPlatform.rotation = Convert.ToInt32(inFile.ReadLine());
                    newPlatform.speed = Convert.ToInt32(inFile.ReadLine());
                    roomList[selectedRoom].movingPlatforms.Add(newPlatform);
                    //MovingPlatformListBox.Items.Add(newPlatform);
                    _updateMovingPlatform(selectedRoom, -1, newPlatform.x, newPlatform.y, newPlatform.endX, newPlatform.endY, newPlatform.rotation, newPlatform.speed);
                }

                // Import every
                int numEnemies = Convert.ToInt32(inFile.ReadLine());
                for (int enemyIter = 0; enemyIter < numEnemies; enemyIter++)
                {
                    Enemy newEnemy = new Enemy();
                    newEnemy.x = (float)Convert.ToDecimal(inFile.ReadLine());
                    newEnemy.y = (float)Convert.ToDecimal(inFile.ReadLine());
                    newEnemy.endX = (float)Convert.ToDecimal(inFile.ReadLine());
                    newEnemy.endY = (float)Convert.ToDecimal(inFile.ReadLine());
                    newEnemy.type = (Enemy.EnemyType)Convert.ToInt32(inFile.ReadLine());
                    newEnemy.speed = Convert.ToInt32(inFile.ReadLine());
                    roomList[selectedRoom].enemies.Add(newEnemy);
                    //EnemyListBox.Items.Add(newEnemy);
                    _updateEnemy(selectedRoom, -1, (int)newEnemy.type, newEnemy.x, newEnemy.y, newEnemy.endX, newEnemy.endY, newEnemy.speed);
                }

                // Import every BG Object
                int numBGObjects = Convert.ToInt32(inFile.ReadLine());
                for (int BGOjectIter = 0; BGOjectIter < numBGObjects; BGOjectIter++)
                {
                    BackgroundObject newBackgroundObject = new BackgroundObject();
                    newBackgroundObject.x = (float)Convert.ToDecimal(inFile.ReadLine());
                    newBackgroundObject.y = (float)Convert.ToDecimal(inFile.ReadLine());
                    newBackgroundObject.z = (float)Convert.ToDecimal(inFile.ReadLine());
                    newBackgroundObject.rotation = Convert.ToInt32(inFile.ReadLine());
                    Convert.ToInt32(inFile.ReadLine()); // quick replace. see save out for more comment
                    Convert.ToInt32(inFile.ReadLine());
                    newBackgroundObject.objectID = Convert.ToInt32(inFile.ReadLine());
                    roomList[selectedRoom].backgroundObjects.Add(newBackgroundObject);
                    //BackgroundObjectListBox.Items.Add(newBackgroundObject);
                    _updateBackgroundObject(selectedRoom, -1, newBackgroundObject.objectID, newBackgroundObject.x, newBackgroundObject.y, newBackgroundObject.z, newBackgroundObject.rotation, 0.0f, 0.0f);
                }
                int numCrushers = Convert.ToInt32(inFile.ReadLine());
                for (int objectIter = 0; objectIter < numCrushers; objectIter++)
                {
                    Crusher newCrusher = new Crusher();
                    newCrusher.x = (float)Convert.ToDecimal(inFile.ReadLine());
                    newCrusher.y = (float)Convert.ToDecimal(inFile.ReadLine());
                    newCrusher.z = (float)Convert.ToDecimal(inFile.ReadLine());
                    newCrusher.height = (float)Convert.ToDecimal(inFile.ReadLine());
                    newCrusher.speed = (float)Convert.ToDecimal(inFile.ReadLine());
                    roomList[selectedRoom].crushers.Add(newCrusher);
                    //CrusherListBox.Items.Add(newCrusher);
                    _updateCrusher(selectedRoom, -1, newCrusher.x, newCrusher.y, newCrusher.z, newCrusher.height, newCrusher.speed);
                }
                //
                int numLasers = Convert.ToInt32(inFile.ReadLine());
                for (int objectIter = 0; objectIter < numLasers; objectIter++)
                {
                    Laser newLaser = new Laser();
                    newLaser.x = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLaser.y = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLaser.z = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLaser.length = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLaser.timeOn = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLaser.timeOff = (float)Convert.ToDecimal(inFile.ReadLine());
                    newLaser.horizontal = Convert.ToBoolean(Convert.ToInt32(inFile.ReadLine()));
                    roomList[selectedRoom].lasers.Add(newLaser);
                    //LaserListBox.Items.Add(newLaser);
                    _updateLaser(selectedRoom, -1, newLaser.horizontal, newLaser.x, newLaser.y, newLaser.z, newLaser.length, newLaser.timeOn, newLaser.timeOff);
                }
                //
                int numPickups = Convert.ToInt32(inFile.ReadLine());
                for (int objectIter = 0; objectIter < numPickups; objectIter++)
                {
                    Pickup newPickup = new Pickup();
                    newPickup.x = (float)Convert.ToDecimal(inFile.ReadLine());
                    newPickup.y = (float)Convert.ToDecimal(inFile.ReadLine());
                    newPickup.z = (float)Convert.ToDecimal(inFile.ReadLine());
                    newPickup.type = (Pickup.PickupTypes)Convert.ToInt32(inFile.ReadLine());
                    roomList[selectedRoom].pickups.Add(newPickup);
                    //PickupListBox.Items.Add(newPickup);
                    _updatePickup(selectedRoom, -1, newPickup.x, newPickup.y, newPickup.z, (int)newPickup.type);
                }
                int numFans = Convert.ToInt32(inFile.ReadLine());
                for (int objectIter = 0; objectIter < numFans; objectIter++)
                {
                    WindFan newFan = new WindFan();
                    newFan.x = (float)Convert.ToDecimal(inFile.ReadLine());
                    newFan.y = (float)Convert.ToDecimal(inFile.ReadLine());
                    newFan.z = (float)Convert.ToDecimal(inFile.ReadLine());
                    newFan.rotation = (float)Convert.ToDecimal(inFile.ReadLine());
                    newFan.speed = (float)Convert.ToDecimal(inFile.ReadLine());
                    newFan.length = (float)Convert.ToDecimal(inFile.ReadLine());
                    roomList[selectedRoom].windFans.Add(newFan);
                    //WindFanListBox.Items.Add(newFan);
                    _updateWindFan(selectedRoom, -1, newFan.x, newFan.y, newFan.z, newFan.rotation, newFan.length, newFan.speed);
                }
                inFile.Close();
            }
        }
 private void AddCrusherButton_Click(object sender, EventArgs e)
 {
     // If not valid index return
     int selectedRoom = RoomListBox.SelectedIndex;
     if (selectedRoom == -1)
         return;
     // Create a new light
     Crusher newCrusher = new Crusher();
     // Add to C#
     roomList[selectedRoom].crushers.Add(newCrusher);
     // Add to list box
     CrusherListBox.Items.Add(newCrusher);
     // Add to C++
     _updateCrusher(selectedRoom, -1, newCrusher.x, newCrusher.y, newCrusher.z, newCrusher.height, newCrusher.speed);
 }