mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 10:33:30 +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
|
||||
{
|
||||
public class ButtonSystem : Container
|
||||
public partial class ButtonSystem : Container
|
||||
{
|
||||
public Action OnEdit;
|
||||
public Action OnExit;
|
||||
@ -103,8 +103,9 @@ namespace osu.Game.GameModes.Menu
|
||||
}
|
||||
}
|
||||
},
|
||||
osuLogo = new OsuLogo(onOsuLogo)
|
||||
osuLogo = new OsuLogo
|
||||
{
|
||||
Action = onOsuLogo,
|
||||
Origin = Anchor.Centre,
|
||||
Anchor = Anchor.Centre
|
||||
}
|
||||
@ -273,95 +274,6 @@ namespace osu.Game.GameModes.Menu
|
||||
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>
|
||||
/// A flow container with an origin based on one of its contained drawables.
|
||||
/// </summary>
|
||||
|
@ -5,24 +5,46 @@ using System;
|
||||
using osu.Framework.Audio.Sample;
|
||||
using osu.Framework.Audio.Track;
|
||||
using osu.Framework.GameModes;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Transformations;
|
||||
using osu.Game.GameModes.Backgrounds;
|
||||
using OpenTK.Graphics;
|
||||
|
||||
namespace osu.Game.GameModes.Menu
|
||||
{
|
||||
class Intro : OsuGameMode
|
||||
{
|
||||
private OsuLogo logo;
|
||||
protected override BackgroundMode CreateBackground() => new BackgroundModeEmpty();
|
||||
|
||||
public override void 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");
|
||||
welcome.Play();
|
||||
|
||||
AudioTrack bgm = Game.Audio.Track.Get(@"circles");
|
||||
bgm.Looping = true;
|
||||
|
||||
Game.Scheduler.Add(delegate
|
||||
{
|
||||
welcome.Play();
|
||||
}, true);
|
||||
|
||||
|
||||
Game.Scheduler.AddDelayed(delegate
|
||||
{
|
||||
bgm.Start();
|
||||
@ -32,6 +54,17 @@ namespace osu.Game.GameModes.Menu
|
||||
{
|
||||
Push(new MainMenu());
|
||||
}, 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\ButtonSystem.cs" />
|
||||
<Compile Include="GameModes\Menu\MainMenu.cs" />
|
||||
<Compile Include="GameModes\Menu\OsuLogo.cs" />
|
||||
<Compile Include="GameModes\Multiplayer\Lobby.cs" />
|
||||
<Compile Include="GameModes\Multiplayer\Match.cs" />
|
||||
<Compile Include="GameModes\Multiplayer\MatchCreate.cs" />
|
||||
|
Loading…
Reference in New Issue
Block a user