Exemplo n.º 1
0
        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);
            }
        }