Remove 'Add new' from hotkeys, just clicking on empty hotkey line does the same thing. Make HUD show behind pause and block menu screen.

This commit is contained in:
UnknownShadow200 2015-11-08 17:03:44 +11:00
parent c8061b64fd
commit f1a7a0e513
18 changed files with 105 additions and 69 deletions

View File

@ -181,7 +181,7 @@ namespace ClassicalSharp {
public override bool HandlesMouseClick( int mouseX, int mouseY, MouseButton button ) {
if( button == MouseButton.Left && selectedIndex != -1 ) {
game.Inventory.HeldBlock = blocksTable[selectedIndex];
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
}
return true;
}
@ -189,7 +189,7 @@ namespace ClassicalSharp {
public override bool HandlesKeyDown( Key key ) {
if( key == game.Mapping( KeyBinding.PauseOrExit ) ||
key == game.Mapping( KeyBinding.OpenInventory ) ) {
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
}
return true;
}

View File

@ -48,5 +48,9 @@ namespace ClassicalSharp {
public override bool HandlesAllInput {
get { return true; }
}
public override bool HidesHud {
get { return true; }
}
}
}

View File

@ -76,7 +76,7 @@ namespace ClassicalSharp {
public override bool HandlesKeyDown( Key key ) {
if( key == Key.Escape ) {
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
} else if( key == Key.Left ) {
PageClick( false );
} else if( key == Key.Right ) {

View File

@ -21,7 +21,7 @@ namespace ClassicalSharp {
graphicsApi.Texturing = true;
fpsTextWidget.Render( delta );
if( game.activeScreen is NormalScreen ) {
if( game.activeScreen == null ) {
UpdateHackState( false );
DrawPosition();
hackStatesWidget.Render( delta );

View File

@ -35,6 +35,7 @@ namespace ClassicalSharp {
}
bool supressNextPress;
const int numButtons = 5;
public override bool HandlesKeyPress( char key ) {
if( supressNextPress ) {
supressNextPress = false;
@ -47,7 +48,7 @@ namespace ClassicalSharp {
public override bool HandlesKeyDown( Key key ) {
if( key == Key.Escape ) {
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
return true;
} else if( focusWidget != null ) {
FocusKeyDown( key );
@ -83,7 +84,7 @@ namespace ClassicalSharp {
MakeHotkey( 0, -120, 1 ),
MakeHotkey( 0, -80, 2 ),
MakeHotkey( 0, -40, 3 ),
MakeAddNew( 0, 0 ),
MakeHotkey( 0, 0, 4 ),
Make( -160, -80, "<", 40, 40, arrowFont, (g, w) => PageClick( false ) ),
Make( 160, -80, ">", 40, 40, arrowFont, (g, w) => PageClick( true ) ),
@ -128,20 +129,12 @@ namespace ClassicalSharp {
game, x, y, 240, 30, text, Anchor.Centre, Anchor.Centre,
textFont, TextButtonClick );
button.Metadata = default( Hotkey );
if( text != "-----" )
button.Metadata = hotkeys.Hotkeys[index];
return button;
}
ButtonWidget MakeAddNew( int x, int y ) {
ButtonWidget button = ButtonWidget.Create(
game, x, y, 240, 30, "Add new", Anchor.Centre, Anchor.Centre,
textFont, TextButtonClick );
button.Metadata = default( Hotkey );
return button;
}
string Get( int index ) {
if( index >= hotkeys.Hotkeys.Count ) return "-----";
@ -152,8 +145,8 @@ namespace ClassicalSharp {
void Set( int index ) {
string text = Get( index + currentIndex );
ButtonWidget button = buttons[index];
button.SetText( text);
button.Metadata = null;
button.SetText( text );
button.Metadata = default( Hotkey );
if( text != "-----" )
button.Metadata = hotkeys.Hotkeys[index];
}
@ -168,12 +161,13 @@ namespace ClassicalSharp {
int currentIndex;
void PageClick( bool forward ) {
currentIndex += forward ? 4 : -4;
if( currentIndex >= hotkeys.Hotkeys.Count ) currentIndex -= 4;
currentIndex += forward ? numButtons : -numButtons;
if( currentIndex >= hotkeys.Hotkeys.Count )
currentIndex -= numButtons;
if( currentIndex < 0 ) currentIndex = 0;
LostFocus();
for( int i = 0; i < 4; i++ )
for( int i = 0; i < numButtons; i++ )
Set( i );
}
@ -181,12 +175,9 @@ namespace ClassicalSharp {
LostFocus();
ButtonWidget button = (ButtonWidget)widget;
if( button.Metadata != null ) {
curHotkey = (Hotkey)button.Metadata;
origHotkey = curHotkey;
// do stuff here
CreateEditingWidgets();
}
curHotkey = (Hotkey)button.Metadata;
origHotkey = curHotkey;
CreateEditingWidgets();
}
#region Modifying hotkeys
@ -254,7 +245,7 @@ namespace ClassicalSharp {
curHotkey.MoreInput, currentAction.GetText() );
}
for( int i = 0; i < 4; i++ )
for( int i = 0; i < numButtons; i++ )
Set( i );
DisposeEditingWidgets();
}
@ -265,7 +256,7 @@ namespace ClassicalSharp {
hotkeys.UserRemovedHotkey( origHotkey.BaseKey, origHotkey.Flags );
}
for( int i = 0; i < 4; i++ )
for( int i = 0; i < numButtons; i++ )
Set( i );
DisposeEditingWidgets();
}

View File

@ -5,9 +5,9 @@ using OpenTK.Input;
namespace ClassicalSharp {
public class NormalScreen : Screen {
public class HudScreen : Screen {
public NormalScreen( Game game ) : base( game ) {
public HudScreen( Game game ) : base( game ) {
}
ChatScreen chat;
@ -18,11 +18,13 @@ namespace ClassicalSharp {
public override void Render( double delta ) {
if( game.HideGui ) return;
bool showMinimal = game.GetActiveScreen != this;
if( chat.HandlesAllInput )
chat.RenderBackground();
graphicsApi.Texturing = true;
chat.Render( delta );
hotbar.Render( delta );
if( !showMinimal )
hotbar.Render( delta );
//graphicsApi.BeginVbBatch( VertexFormat.Pos3fTex2fCol4b );
//graphicsApi.BindTexture( game.TerrainAtlas.TexId );
@ -35,11 +37,11 @@ namespace ClassicalSharp {
playerList.Dispose();
playerList = null;
}
graphicsApi.Texturing = false;
} else {
graphicsApi.Texturing = false;
DrawCrosshairs();
}
graphicsApi.Texturing = false;
if( playerList == null && !showMinimal )
DrawCrosshairs();
}
const int crosshairExtent = 15, crosshairWeight = 2;
@ -57,6 +59,17 @@ namespace ClassicalSharp {
playerFont.Dispose();
chat.Dispose();
hotbar.Dispose();
if( playerList != null )
playerList.Dispose();
}
public void GainFocus() {
if( game.CursorVisible )
game.CursorVisible = false;
game.Camera.RegrabMouse();
}
public void LoseFocus() {
if( playerList != null ) {
playerList.Dispose();
}
@ -79,9 +92,6 @@ namespace ClassicalSharp {
chat.Init();
hotbar = new BlockHotbarWidget( game );
hotbar.Init();
if( game.CursorVisible )
game.CursorVisible = false;
game.Camera.RegrabMouse();
}
public override bool HandlesAllInput {

View File

@ -73,5 +73,9 @@ namespace ClassicalSharp {
public override bool HandlesAllInput {
get { return true; }
}
public override bool HidesHud {
get { return true; }
}
}
}

View File

@ -66,7 +66,7 @@ namespace ClassicalSharp {
public override bool HandlesKeyDown( Key key ) {
if( key == Key.Escape ) {
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
} else if( curWidget != null ) {
int index = Array.IndexOf<ButtonWidget>( buttons, curWidget );
KeyBinding mapping = (KeyBinding)index;

View File

@ -40,7 +40,7 @@ namespace ClassicalSharp {
public override bool HandlesKeyDown( Key key ) {
if( key == Key.Escape ) {
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
return true;
} else if( (key == Key.Enter || key == Key.KeypadEnter)
&& inputWidget != null ) {

View File

@ -41,19 +41,25 @@ namespace ClassicalSharp {
Make( 140, -50, "Chat font size", Anchor.Centre, OnWidgetClick,
g => g.Chat.FontSize.ToString(),
(g, v) => { g.Chat.FontSize = Int32.Parse( v );
Options.Set( OptionsKey.FontSize, v ); } ),
Options.Set( OptionsKey.FontSize, v );
g.RefreshHud();
} ),
Make( 140, 0, "Chat lines", Anchor.Centre, OnWidgetClick,
g => g.ChatLines.ToString(),
(g, v) => { g.ChatLines = Int32.Parse( v );
Options.Set( OptionsKey.ChatLines, v ); } ),
Options.Set( OptionsKey.ChatLines, v );
g.RefreshHud();
} ),
Make( 140, 50, "Arial chat font", Anchor.Centre, OnWidgetClick,
g => g.Drawer2D.UseBitmappedChat ? "no" : "yes",
(g, v) => {
g.Drawer2D.UseBitmappedChat = v == "no";
Options.Set( OptionsKey.ArialChatFont, v == "yes" );
game.Events.RaiseChatFontChanged(); } ),
game.Events.RaiseChatFontChanged();
g.RefreshHud();
} ),
// Extra stuff
!network.IsSinglePlayer ? null :

View File

@ -40,7 +40,7 @@ namespace ClassicalSharp {
(g, w) => g.SetNewScreen( new TexturePackScreen( g ) ) ),
// Other
Make( 0, 55, "Back to game", Anchor.BottomOrRight,
(g, w) => g.SetNewScreen( new NormalScreen( g ) ) ),
(g, w) => g.SetNewScreen( null ) ),
Make( 0, 5, "Quit game", Anchor.BottomOrRight, (g, w) => g.Exit() ),
};
}
@ -51,7 +51,7 @@ namespace ClassicalSharp {
public override bool HandlesKeyDown( Key key ) {
if( key == Key.Escape )
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
return true;
}
}

View File

@ -35,7 +35,7 @@ namespace ClassicalSharp {
public override bool HandlesKeyDown( Key key ) {
if( key == Key.Escape ) {
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
return true;
}
return inputWidget.HandlesKeyDown( key );

View File

@ -17,5 +17,10 @@ namespace ClassicalSharp {
public virtual bool BlocksWorld {
get { return false; }
}
/// <summary> Whether this screen hides the normal in-game hud. </summary>
public virtual bool HidesHud {
get { return false; }
}
}
}

View File

@ -99,7 +99,7 @@
<Compile Include="2D\Screens\Menu\OptionsScreen.cs" />
<Compile Include="2D\Screens\Menu\SaveLevelScreen.cs" />
<Compile Include="2D\Screens\Menu\TexturePackScreen.cs" />
<Compile Include="2D\Screens\NormalScreen.cs" />
<Compile Include="2D\Screens\HudScreen.cs" />
<Compile Include="2D\Screens\Screen.cs" />
<Compile Include="2D\Texture.cs" />
<Compile Include="2D\Widgets\BlockHotbarWidget.cs" />

View File

@ -51,6 +51,7 @@ namespace ClassicalSharp {
internal int defaultIb;
public bool CanUseThirdPersonCamera = true;
FpsScreen fpsScreen;
internal HudScreen hudScreen;
public Events Events = new Events();
public InputHandler InputHandler;
public ChatLog Chat;
@ -166,6 +167,8 @@ namespace ClassicalSharp {
Graphics.AlphaTestFunc( CompareFunc.Greater, 0.5f );
fpsScreen = new FpsScreen( this );
fpsScreen.Init();
hudScreen = new HudScreen( this );
hudScreen.Init();
Culling = new FrustumCulling();
EnvRenderer.Init();
MapEnvRenderer.Init();
@ -185,9 +188,19 @@ namespace ClassicalSharp {
UpdateProjection();
}
public void RefreshHud() {
hudScreen.Dispose();
hudScreen.Init();
}
/// <summary> Gets whether the active screen handles all input. </summary>
public bool ScreenLockedInput {
get { return activeScreen != null && activeScreen.HandlesAllInput; }
get { return activeScreen == null ? hudScreen.HandlesAllInput :
activeScreen.HandlesAllInput; } // inlined here.
}
public Screen GetActiveScreen {
get { return activeScreen == null ? hudScreen : activeScreen; }
}
const int ticksFrequency = 20;
@ -201,9 +214,8 @@ namespace ClassicalSharp {
Graphics.BindIb( defaultIb );
accumulator += e.Time;
Vertices = 0;
if( !Focused && (activeScreen == null || !activeScreen.HandlesAllInput) ) {
if( !Focused && !ScreenLockedInput )
SetNewScreen( new PauseScreen( this ) );
}
base.OnRenderFrame( e );
CheckScheduledTasks( e.Time );
@ -238,14 +250,12 @@ namespace ClassicalSharp {
}
Graphics.Mode2D( Width, Height, EnvRenderer is StandardEnvRenderer );
//OpenTK.Graphics.OpenGL.GL.PolygonMode( 0x0408, 0x1B02 );
fpsScreen.Render( e.Time );
if( activeScreen != null ) {
if( activeScreen == null || !activeScreen.HidesHud )
hudScreen.Render( e.Time );
if( activeScreen != null )
activeScreen.Render( e.Time );
}
Graphics.Mode3D( EnvRenderer is StandardEnvRenderer );
//if( Keyboard[Key.F2] )
// OpenTK.Graphics.OpenGL.GL.PolygonMode( 0x0408, 0x1B01 );
if( screenshotRequested )
TakeScreenshot();
@ -320,13 +330,19 @@ namespace ClassicalSharp {
internal Screen activeScreen;
public void SetNewScreen( Screen screen ) {
InputHandler.ScreenChanged( activeScreen, screen );
InputHandler.ScreenChanged( activeScreen, screen );
if( activeScreen != null )
activeScreen.Dispose();
activeScreen = screen;
if( screen == null ) {
hudScreen.GainFocus();
} else if( activeScreen == null ) {
hudScreen.LoseFocus();
}
if( screen != null )
screen.Init();
activeScreen = screen;
}
public void SetCamera( bool thirdPerson ) {

View File

@ -212,7 +212,7 @@ namespace ClassicalSharp {
#region Event handlers
void MouseButtonUp( object sender, MouseButtonEventArgs e ) {
if( game.activeScreen == null || !game.activeScreen.HandlesMouseUp( e.X, e.Y, e.Button ) ) {
if( !game.GetActiveScreen.HandlesMouseUp( e.X, e.Y, e.Button ) ) {
if( game.Network.UsingPlayerClick && e.Button <= MouseButton.Middle ) {
byte targetId = game.Players.GetClosetPlayer( game.LocalPlayer );
ButtonStateChanged( e.Button, false, targetId );
@ -221,7 +221,7 @@ namespace ClassicalSharp {
}
void MouseButtonDown( object sender, MouseButtonEventArgs e ) {
if( game.activeScreen == null || !game.activeScreen.HandlesMouseClick( e.X, e.Y, e.Button ) ) {
if( !game.GetActiveScreen.HandlesMouseClick( e.X, e.Y, e.Button ) ) {
bool left = e.Button == MouseButton.Left;
bool middle = e.Button == MouseButton.Middle;
bool right = e.Button == MouseButton.Right;
@ -232,12 +232,12 @@ namespace ClassicalSharp {
}
void MouseMove( object sender, MouseMoveEventArgs e ) {
if( game.activeScreen == null || !game.activeScreen.HandlesMouseMove( e.X, e.Y ) ) {
if( !game.GetActiveScreen.HandlesMouseMove( e.X, e.Y ) ) {
}
}
void MouseWheelChanged( object sender, MouseWheelEventArgs e ) {
if( game.activeScreen == null || !game.activeScreen.HandlesMouseScroll( e.Delta ) ) {
if( !game.GetActiveScreen.HandlesMouseScroll( e.Delta ) ) {
Inventory inv = game.Inventory;
if( game.Camera.MouseZoom( e ) || !inv.CanChangeHeldBlock ) return;
@ -251,7 +251,7 @@ namespace ClassicalSharp {
void KeyPressHandler( object sender, KeyPressEventArgs e ) {
char key = e.KeyChar;
if( game.activeScreen == null || !game.activeScreen.HandlesKeyPress( key ) ) {
if( !game.GetActiveScreen.HandlesKeyPress( key ) ) {
}
}
@ -259,7 +259,7 @@ namespace ClassicalSharp {
Key key = e.Key;
if( SimulateMouse( key, false ) ) return;
if( game.activeScreen == null || !game.activeScreen.HandlesKeyUp( key ) ) {
if( !game.GetActiveScreen.HandlesKeyUp( key ) ) {
}
}
@ -272,7 +272,7 @@ namespace ClassicalSharp {
game.Exit();
} else if( key == Keys[KeyBinding.Screenshot] ) {
game.screenshotRequested = true;
} else if( game.activeScreen == null || !game.activeScreen.HandlesKeyDown( key ) ) {
} else if( !game.GetActiveScreen.HandlesKeyDown( key ) ) {
if( !HandleBuiltinKey( key ) && !game.LocalPlayer.HandleKeyDown( key ) ) {
HandleHotkey( key );
@ -287,8 +287,8 @@ namespace ClassicalSharp {
if( Hotkeys.IsHotkey( key, game.Keyboard, out text, out more ) ) {
if( !more )
game.Network.SendChat( text, false );
else if( game.activeScreen is NormalScreen )
((NormalScreen)game.activeScreen).OpenTextInputBar( text );
else if( game.activeScreen == null )
game.hudScreen.OpenTextInputBar( text );
}
}

View File

@ -132,7 +132,7 @@ namespace ClassicalSharp {
}
void HandleLevelFinalise() {
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
int mapWidth = reader.ReadInt16();
int mapHeight = reader.ReadInt16();
int mapLength = reader.ReadInt16();

View File

@ -76,7 +76,7 @@ namespace ClassicalSharp.Singleplayer {
}
game.Map.SetData( map, width, height, length );
game.Events.RaiseOnNewMapLoaded();
game.SetNewScreen( new NormalScreen( game ) );
game.SetNewScreen( null );
ResetPlayerPosition();
game.Chat.Add( "&ePlaying single player", CpeMessage.Status1 );
GC.Collect();