diff --git a/osu.Game/Graphics/Background/Background.cs b/osu.Game/Graphics/Background/Background.cs new file mode 100644 index 0000000000..28644f1185 --- /dev/null +++ b/osu.Game/Graphics/Background/Background.cs @@ -0,0 +1,36 @@ +//Copyright (c) 2007-2016 ppy Pty Ltd . +//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Sprites; +using osu.Game.Graphics.Containers; +using OpenTK; +using OpenTK.Graphics; + +namespace osu.Game.Graphics.Background +{ + class Background : OsuLargeContainer + { + protected Sprite BackgroundSprite; + + public override void Load() + { + base.Load(); + + Add(BackgroundSprite = new Sprite + { + Texture = Game.Textures.Get(@"Menu/background"), + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Colour = Color4.DarkGray + }); + } + + protected override void Update() + { + base.Update(); + BackgroundSprite.Scale = new Vector2(Math.Max(ActualSize.X / BackgroundSprite.Size.X, ActualSize.Y / BackgroundSprite.Size.Y)); + } + } +} diff --git a/osu.Game/Graphics/Containers/ParallaxContainer.cs b/osu.Game/Graphics/Containers/ParallaxContainer.cs new file mode 100644 index 0000000000..64ca079eec --- /dev/null +++ b/osu.Game/Graphics/Containers/ParallaxContainer.cs @@ -0,0 +1,40 @@ +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics; +using osu.Framework.Input; +using OpenTK; + +namespace osu.Game.Graphics.Containers +{ + class ParallaxContainer : LargeContainer + { + public float ParallaxAmount = 0.02f; + + public override bool Contains(Vector2 screenSpacePos) => true; + + private Container content = new LargeContainer() + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre + }; + + protected override Container AddTarget => content; + + public override void Load() + { + base.Load(); + Add(content); + } + + protected override bool OnMouseMove(InputState state) + { + content.Position = (state.Mouse.Position - ActualSize / 2) * ParallaxAmount; + return base.OnMouseMove(state); + } + + protected override void Update() + { + base.Update(); + content.Scale = new Vector2(1 + ParallaxAmount); + } + } +} \ No newline at end of file diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 22c8e079a4..ce7d1d4623 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -5,7 +5,10 @@ using osu.Game.Configuration; using osu.Game.GameModes.Menu; using OpenTK; using osu.Framework.Graphics; +using osu.Framework.Graphics.Sprites; using osu.Framework.OS; +using osu.Game.Graphics.Background; +using osu.Game.Graphics.Containers; namespace osu.Game { @@ -22,7 +25,15 @@ namespace osu.Game { base.Load(); - Add(new MainMenu()); + Add(new Drawable[] { + new ParallaxContainer + { + Children = new [] { + new Background() + } + }, + new MainMenu() + }); } protected override void Dispose(bool isDisposing) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index a22554249f..0541c58e83 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -62,6 +62,8 @@ + +