mirror of
https://github.com/ppy/osu.git
synced 2025-01-07 23:15:45 +08:00
Add basic intro sequence.
This commit is contained in:
parent
656aee41e2
commit
b2d899feb5
@ -19,7 +19,7 @@ using OpenTK.Input;
|
|||||||
|
|
||||||
namespace osu.Game.GameModes.Menu
|
namespace osu.Game.GameModes.Menu
|
||||||
{
|
{
|
||||||
public class ButtonSystem : Container
|
public partial class ButtonSystem : Container
|
||||||
{
|
{
|
||||||
public Action OnEdit;
|
public Action OnEdit;
|
||||||
public Action OnExit;
|
public Action OnExit;
|
||||||
@ -103,8 +103,9 @@ namespace osu.Game.GameModes.Menu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
osuLogo = new OsuLogo(onOsuLogo)
|
osuLogo = new OsuLogo
|
||||||
{
|
{
|
||||||
|
Action = onOsuLogo,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Anchor = Anchor.Centre
|
Anchor = Anchor.Centre
|
||||||
}
|
}
|
||||||
@ -273,95 +274,6 @@ namespace osu.Game.GameModes.Menu
|
|||||||
base.Update();
|
base.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// osu! logo and its attachments (pulsing, visualiser etc.)
|
|
||||||
/// </summary>
|
|
||||||
class OsuLogo : AutoSizeContainer
|
|
||||||
{
|
|
||||||
private Sprite logo;
|
|
||||||
private Container logoBounceContainer;
|
|
||||||
private MenuVisualisation vis;
|
|
||||||
private Action clickAction;
|
|
||||||
|
|
||||||
public float SizeForFlow => logo == null ? 0 : logo.Size.X * logo.Scale.X * logoBounceContainer.Scale.X * 0.8f;
|
|
||||||
|
|
||||||
public override void Load()
|
|
||||||
{
|
|
||||||
base.Load();
|
|
||||||
|
|
||||||
Sprite ripple;
|
|
||||||
|
|
||||||
Children = new Drawable[]
|
|
||||||
{
|
|
||||||
logoBounceContainer = new AutoSizeContainer
|
|
||||||
{
|
|
||||||
Children = new Drawable[]
|
|
||||||
{
|
|
||||||
logo = new Sprite()
|
|
||||||
{
|
|
||||||
Texture = Game.Textures.Get(@"Menu/logo"),
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre
|
|
||||||
},
|
|
||||||
ripple = new Sprite()
|
|
||||||
{
|
|
||||||
Texture = Game.Textures.Get(@"Menu/logo"),
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre,
|
|
||||||
Alpha = 0.4f
|
|
||||||
},
|
|
||||||
vis = new MenuVisualisation
|
|
||||||
{
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre,
|
|
||||||
Size = logo.Size,
|
|
||||||
Additive = true,
|
|
||||||
Alpha = 0.2f,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ripple.ScaleTo(1.1f, 500);
|
|
||||||
ripple.FadeOut(500);
|
|
||||||
ripple.Loop(300);
|
|
||||||
}
|
|
||||||
|
|
||||||
public OsuLogo(Action action)
|
|
||||||
{
|
|
||||||
clickAction = action;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool OnMouseDown(InputState state, MouseDownEventArgs args)
|
|
||||||
{
|
|
||||||
logoBounceContainer.ScaleTo(1.1f, 1000, EasingTypes.Out);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool OnMouseUp(InputState state, MouseUpEventArgs args)
|
|
||||||
{
|
|
||||||
logoBounceContainer.ScaleTo(1.2f, 500, EasingTypes.OutElastic);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool OnClick(InputState state)
|
|
||||||
{
|
|
||||||
clickAction?.Invoke();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool OnHover(InputState state)
|
|
||||||
{
|
|
||||||
logoBounceContainer.ScaleTo(1.2f, 500, EasingTypes.OutElastic);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnHoverLost(InputState state)
|
|
||||||
{
|
|
||||||
logoBounceContainer.ScaleTo(1, 500, EasingTypes.OutElastic);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A flow container with an origin based on one of its contained drawables.
|
/// A flow container with an origin based on one of its contained drawables.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -5,24 +5,46 @@ using System;
|
|||||||
using osu.Framework.Audio.Sample;
|
using osu.Framework.Audio.Sample;
|
||||||
using osu.Framework.Audio.Track;
|
using osu.Framework.Audio.Track;
|
||||||
using osu.Framework.GameModes;
|
using osu.Framework.GameModes;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Transformations;
|
||||||
using osu.Game.GameModes.Backgrounds;
|
using osu.Game.GameModes.Backgrounds;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.GameModes.Menu
|
namespace osu.Game.GameModes.Menu
|
||||||
{
|
{
|
||||||
class Intro : OsuGameMode
|
class Intro : OsuGameMode
|
||||||
{
|
{
|
||||||
|
private OsuLogo logo;
|
||||||
protected override BackgroundMode CreateBackground() => new BackgroundModeEmpty();
|
protected override BackgroundMode CreateBackground() => new BackgroundModeEmpty();
|
||||||
|
|
||||||
public override void Load()
|
public override void Load()
|
||||||
{
|
{
|
||||||
base.Load();
|
base.Load();
|
||||||
|
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
logo = new OsuLogo()
|
||||||
|
{
|
||||||
|
Alpha = 0,
|
||||||
|
Additive = true,
|
||||||
|
Interactive = false,
|
||||||
|
Colour = Color4.DarkGray,
|
||||||
|
Ripple = false
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
AudioSample welcome = Game.Audio.Sample.Get(@"welcome");
|
AudioSample welcome = Game.Audio.Sample.Get(@"welcome");
|
||||||
welcome.Play();
|
welcome.Play();
|
||||||
|
|
||||||
AudioTrack bgm = Game.Audio.Track.Get(@"circles");
|
AudioTrack bgm = Game.Audio.Track.Get(@"circles");
|
||||||
bgm.Looping = true;
|
bgm.Looping = true;
|
||||||
|
|
||||||
|
Game.Scheduler.Add(delegate
|
||||||
|
{
|
||||||
|
welcome.Play();
|
||||||
|
}, true);
|
||||||
|
|
||||||
|
|
||||||
Game.Scheduler.AddDelayed(delegate
|
Game.Scheduler.AddDelayed(delegate
|
||||||
{
|
{
|
||||||
bgm.Start();
|
bgm.Start();
|
||||||
@ -32,6 +54,17 @@ namespace osu.Game.GameModes.Menu
|
|||||||
{
|
{
|
||||||
Push(new MainMenu());
|
Push(new MainMenu());
|
||||||
}, 2900);
|
}, 2900);
|
||||||
|
|
||||||
|
logo.ScaleTo(0);
|
||||||
|
|
||||||
|
logo.ScaleTo(1,5900, EasingTypes.OutQuint);
|
||||||
|
logo.FadeIn(30000, EasingTypes.OutQuint);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnSuspending(GameMode next)
|
||||||
|
{
|
||||||
|
Content.FadeOut(300);
|
||||||
|
base.OnSuspending(next);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
132
osu.Game/GameModes/Menu/OsuLogo.cs
Normal file
132
osu.Game/GameModes/Menu/OsuLogo.cs
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Framework.Graphics.Transformations;
|
||||||
|
using osu.Framework.Input;
|
||||||
|
|
||||||
|
namespace osu.Game.GameModes.Menu
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// osu! logo and its attachments (pulsing, visualiser etc.)
|
||||||
|
/// </summary>
|
||||||
|
public partial class OsuLogo : AutoSizeContainer
|
||||||
|
{
|
||||||
|
private Sprite logo;
|
||||||
|
private Container logoBounceContainer;
|
||||||
|
private ButtonSystem.MenuVisualisation vis;
|
||||||
|
|
||||||
|
public Action Action;
|
||||||
|
|
||||||
|
public float SizeForFlow => logo == null ? 0 : logo.Size.X * logo.Scale.X * logoBounceContainer.Scale.X * 0.8f;
|
||||||
|
|
||||||
|
private Sprite ripple;
|
||||||
|
|
||||||
|
private Container rippleContainer;
|
||||||
|
|
||||||
|
public bool Ripple
|
||||||
|
{
|
||||||
|
get { return rippleContainer.Alpha > 0; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
rippleContainer.Alpha = value ? 1 : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Interactive = true;
|
||||||
|
|
||||||
|
public OsuLogo()
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre;
|
||||||
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
logoBounceContainer = new AutoSizeContainer
|
||||||
|
{
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
logo = new Sprite()
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre
|
||||||
|
},
|
||||||
|
rippleContainer = new Container
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
ripple = new Sprite()
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Additive = true,
|
||||||
|
Alpha = 0.05f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
vis = new ButtonSystem.MenuVisualisation
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Size = logo.Size,
|
||||||
|
Additive = true,
|
||||||
|
Alpha = 0.2f,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Load()
|
||||||
|
{
|
||||||
|
base.Load();
|
||||||
|
|
||||||
|
logo.Texture = Game.Textures.Get(@"Menu/logo");
|
||||||
|
ripple.Texture = Game.Textures.Get(@"Menu/logo");
|
||||||
|
|
||||||
|
ripple.ScaleTo(1.1f, 500);
|
||||||
|
ripple.FadeOut(500);
|
||||||
|
ripple.Loop(300);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool OnMouseDown(InputState state, MouseDownEventArgs args)
|
||||||
|
{
|
||||||
|
if (!Interactive) return false;
|
||||||
|
|
||||||
|
logoBounceContainer.ScaleTo(1.1f, 1000, EasingTypes.Out);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool OnMouseUp(InputState state, MouseUpEventArgs args)
|
||||||
|
{
|
||||||
|
|
||||||
|
logoBounceContainer.ScaleTo(1.2f, 500, EasingTypes.OutElastic);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool OnClick(InputState state)
|
||||||
|
{
|
||||||
|
if (!Interactive) return false;
|
||||||
|
|
||||||
|
Action?.Invoke();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool OnHover(InputState state)
|
||||||
|
{
|
||||||
|
if (!Interactive) return false;
|
||||||
|
logoBounceContainer.ScaleTo(1.2f, 500, EasingTypes.OutElastic);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnHoverLost(InputState state)
|
||||||
|
{
|
||||||
|
logoBounceContainer.ScaleTo(1, 500, EasingTypes.OutElastic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -79,6 +79,7 @@
|
|||||||
<Compile Include="GameModes\Menu\Intro.cs" />
|
<Compile Include="GameModes\Menu\Intro.cs" />
|
||||||
<Compile Include="GameModes\Menu\ButtonSystem.cs" />
|
<Compile Include="GameModes\Menu\ButtonSystem.cs" />
|
||||||
<Compile Include="GameModes\Menu\MainMenu.cs" />
|
<Compile Include="GameModes\Menu\MainMenu.cs" />
|
||||||
|
<Compile Include="GameModes\Menu\OsuLogo.cs" />
|
||||||
<Compile Include="GameModes\Multiplayer\Lobby.cs" />
|
<Compile Include="GameModes\Multiplayer\Lobby.cs" />
|
||||||
<Compile Include="GameModes\Multiplayer\Match.cs" />
|
<Compile Include="GameModes\Multiplayer\Match.cs" />
|
||||||
<Compile Include="GameModes\Multiplayer\MatchCreate.cs" />
|
<Compile Include="GameModes\Multiplayer\MatchCreate.cs" />
|
||||||
|
Loading…
Reference in New Issue
Block a user