internal void Draw(Vector2 offset, float scale) { Scale = scale; Data.Position = (2 * new Vector2(((GameObject.Room)Data).Column - ColumnsToZero, -1 * (((GameObject.Room)Data).Row - RowsToZero))); if (_room == null) { return; } var _gameGraphics = new GameGraphics(true); _gameGraphics.SetDrawSettings(offset * Scale + Data.Position * Scale, Scale /**0.9f*/, 1.0f); if (playerVisual != null) { _room.Player.Position = playerVisual.Data.Position; } if (exitVisual != null) { //System.Diagnostics.Debug.WriteLine("Exit Position: "+ exitVisual.Data.Position); _room.Exit = new Fledermaus.GameObjects.RectangularGameObject(exitVisual.Data.Position + exitVisual.Data.RelativeBounds[0], exitVisual.Data.Position + exitVisual.Data.RelativeBounds[2]); } // _room.LightRays.Clear(); for (int i = 0; i < LightRayVisuals.Count; i++) { //_room.AddLightRay(new Fledermaus.GameObjects.LightRay(lightRayVisuals[i].Data.Position, ((LightRay)lightRayVisuals[i].Data).RayDirection) ); _room.LightRays[i].Origin = lightRayVisuals[i].Data.Position; _room.LightRays[i].FirstDirection = ((LightRay)lightRayVisuals[i].Data).RayDirection; } for (int i = 0; i < _room.Obstacles.Count; i++) { _room.Obstacles[i] = Fledermaus.GameObjects.Obstacle.CreateRectangular(ObstacleVisuals[i].Data.Position + ObstacleVisuals[i].Data.RelativeBounds[0], ObstacleVisuals[i].Data.Position + ObstacleVisuals[i].Data.RelativeBounds[2]); } for (int i = 0; i < _room.Mirrors.Count; i++) { _room.Mirrors[i] = new Fledermaus.GameObjects.Mirror(MirrorVisuals[i].Data.Position + ((Mirror)MirrorVisuals[i].Data).RailStart, MirrorVisuals[i].Data.Position + ((Mirror)MirrorVisuals[i].Data).RailEnd, ((Mirror)MirrorVisuals[i].Data).InitAngle, ((Mirror)MirrorVisuals[i].Data).StartingRelativePosition ); _room.Mirrors[i].MinimumRotation = ((Mirror)MirrorVisuals[i].Data).MinRotation; _room.Mirrors[i].MaximumRotation = ((Mirror)MirrorVisuals[i].Data).MaxRotation; } _gameGraphics.DrawRoom(_room, true); if (IsSelected) { GL.Color4(activeColor); var tmp = new List <Vector2>(); foreach (var bound in Data.RelativeBounds) { tmp.Add(bound); } DrawSquare(offset + Data.Position, tmp); GL.Color4(color); } else { GL.Color4(color); } //DrawSquare(Data.Position, Data.RelativeBounds); // DrawSquare(/*-offset+*/Data.Position, Data.RelativeBounds); if (PlayerVisual != null) { PlayerVisual.Draw(offset + Data.Position, scale); } if (exitVisual != null) { exitVisual.Draw(offset + Data.Position, scale); } foreach (var rayV in lightRayVisuals) { rayV.Draw(offset + Data.Position, scale); } foreach (var obstV in ObstacleVisuals) { obstV.Draw(offset + Data.Position, scale); } foreach (var mirrorV in mirrorVisuals) { mirrorV.Draw(offset + Data.Position, scale); } }