mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-01-24 01:52:24 -05:00
Use generic BlockChanged event instead of hardcoding behaviour in PickingHandler.
This commit is contained in:
parent
f4b2403639
commit
fba550f3c2
12 changed files with 46 additions and 24 deletions
|
@ -1,6 +1,7 @@
|
|||
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
|
||||
using System;
|
||||
using System.Threading;
|
||||
using ClassicalSharp.Events;
|
||||
using SharpWave;
|
||||
using SharpWave.Codecs;
|
||||
|
||||
|
@ -31,7 +32,11 @@ namespace ClassicalSharp.Audio {
|
|||
stepBoard.Init( "step_", files );
|
||||
}
|
||||
|
||||
public void Tick( double delta ) {
|
||||
void PlayBlockSound( object sender, BlockChangedEventArgs e ) {
|
||||
if( e.Block == 0 )
|
||||
PlayDigSound( game.BlockInfo.DigSounds[e.OldBlock] );
|
||||
else
|
||||
PlayDigSound( game.BlockInfo.StepSounds[e.Block] );
|
||||
}
|
||||
|
||||
public void PlayDigSound( SoundType type ) { PlaySound( type, digBoard ); }
|
||||
|
|
|
@ -24,6 +24,7 @@ namespace ClassicalSharp.Audio {
|
|||
SetMusic( game.UseMusic );
|
||||
game.UseSound = Options.GetBool( OptionsKey.UseSound, false );
|
||||
SetSound( game.UseSound );
|
||||
game.UserEvents.BlockChanged += PlayBlockSound;
|
||||
}
|
||||
|
||||
public void Ready( Game game ) { }
|
||||
|
@ -96,6 +97,7 @@ namespace ClassicalSharp.Audio {
|
|||
DisposeMusic();
|
||||
DisposeSound();
|
||||
musicHandle.Close();
|
||||
game.UserEvents.BlockChanged -= PlayBlockSound;
|
||||
}
|
||||
|
||||
void DisposeMusic() {
|
||||
|
|
|
@ -377,7 +377,6 @@ namespace ClassicalSharp {
|
|||
Players.Tick( ticksPeriod );
|
||||
ParticleManager.Tick( ticksPeriod );
|
||||
Animations.Tick( ticksPeriod );
|
||||
AudioPlayer.Tick( ticksPeriod );
|
||||
BlockHandRenderer.Tick( ticksPeriod );
|
||||
ticksThisFrame++;
|
||||
ticksAccumulator -= ticksPeriod;
|
||||
|
|
|
@ -59,10 +59,7 @@ namespace ClassicalSharp {
|
|||
byte old = game.World.GetBlock( pos );
|
||||
|
||||
if( !info.IsAir[old] && inv.CanDelete[old] ) {
|
||||
game.ParticleManager.BreakBlockEffect( pos, old );
|
||||
game.AudioPlayer.PlayDigSound( game.BlockInfo.DigSounds[old] );
|
||||
game.UpdateBlock( pos.X, pos.Y, pos.Z, 0 );
|
||||
game.Network.SendSetBlock( pos.X, pos.Y, pos.Z, false, (byte)inv.HeldBlock );
|
||||
game.UserEvents.RaiseBlockChanged( pos, old, 0 );
|
||||
}
|
||||
} else if( right ) {
|
||||
|
@ -73,9 +70,6 @@ namespace ClassicalSharp {
|
|||
|
||||
if( !game.CanPick( old ) && inv.CanPlace[block] && CheckIsFree( game.SelectedPos, block ) ) {
|
||||
game.UpdateBlock( pos.X, pos.Y, pos.Z, block );
|
||||
game.AudioPlayer.PlayDigSound( game.BlockInfo.StepSounds[block] );
|
||||
game.Network.SendSetBlock( pos.X, pos.Y, pos.Z, true, block );
|
||||
game.BlockHandRenderer.SetAnimationClick( false );
|
||||
game.UserEvents.RaiseBlockChanged( pos, old, block );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,9 +23,6 @@ namespace ClassicalSharp {
|
|||
/// <summary> Informs the server of the client's current position and orientation. </summary>
|
||||
public abstract void SendPosition( Vector3 pos, float yaw, float pitch );
|
||||
|
||||
/// <summary> Informs the server that the client placed or deleted a block at the given coordinates. </summary>
|
||||
public abstract void SendSetBlock( int x, int y, int z, bool place, byte block );
|
||||
|
||||
/// <summary> Informs the server that using the given mouse button,
|
||||
/// the client clicked on a particular block or entity. </summary>
|
||||
public abstract void SendPlayerClick( MouseButton button, bool buttonDown, byte targetId, PickedPos pos );
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace ClassicalSharp.Network {
|
|||
SendPacket();
|
||||
}
|
||||
|
||||
public override void SendSetBlock( int x, int y, int z, bool place, byte block ) {
|
||||
void SendSetBlock( int x, int y, int z, bool place, byte block ) {
|
||||
writer.WriteUInt8( (byte)Opcode.SetBlockClient );
|
||||
writer.WriteInt16( (short)x );
|
||||
writer.WriteInt16( (short)y );
|
||||
|
|
|
@ -5,6 +5,7 @@ using System.IO;
|
|||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using ClassicalSharp.Entities;
|
||||
using ClassicalSharp.Events;
|
||||
using ClassicalSharp.Gui;
|
||||
using ClassicalSharp.Network;
|
||||
using ClassicalSharp.TexturePack;
|
||||
|
@ -50,6 +51,7 @@ namespace ClassicalSharp.Network {
|
|||
receivedFirstPosition = false;
|
||||
lastPacket = DateTime.UtcNow;
|
||||
game.WorldEvents.OnNewMap += OnNewMap;
|
||||
game.UserEvents.BlockChanged += BlockChanged;
|
||||
|
||||
MakeLoginPacket( game.Username, game.Mppass );
|
||||
SendPacket();
|
||||
|
@ -58,6 +60,7 @@ namespace ClassicalSharp.Network {
|
|||
|
||||
public override void Dispose() {
|
||||
game.WorldEvents.OnNewMap -= OnNewMap;
|
||||
game.UserEvents.BlockChanged -= BlockChanged;
|
||||
socket.Close();
|
||||
Disconnected = true;
|
||||
}
|
||||
|
@ -206,6 +209,15 @@ namespace ClassicalSharp.Network {
|
|||
Set( Opcode.CpeSetMapEnvProperty, HandleSetMapEnvProperty, 6 );
|
||||
}
|
||||
|
||||
void BlockChanged( object sender, BlockChangedEventArgs e ) {
|
||||
Vector3I p = e.Coords;
|
||||
byte block = (byte)game.Inventory.HeldBlock;
|
||||
if( e.Block == 0 )
|
||||
SendSetBlock( p.X, p.Y, p.Z, false, block );
|
||||
else
|
||||
SendSetBlock( p.X, p.Y, p.Z, true, e.Block );
|
||||
}
|
||||
|
||||
void OnNewMap( object sender, EventArgs e ) {
|
||||
// wipe all existing entity states
|
||||
for( int i = 0; i < 256; i++ ) {
|
||||
|
|
|
@ -21,6 +21,7 @@ namespace ClassicalSharp.Particles {
|
|||
this.game = game;
|
||||
vb = game.Graphics.CreateDynamicVb( VertexFormat.P3fT2fC4b, maxParticles * 4 );
|
||||
game.Events.TerrainAtlasChanged += TerrainAtlasChanged;
|
||||
game.UserEvents.BlockChanged += BreakBlockEffect;
|
||||
}
|
||||
|
||||
public void Ready( Game game ) { }
|
||||
|
@ -120,6 +121,7 @@ namespace ClassicalSharp.Particles {
|
|||
game.Graphics.DeleteDynamicVb( vb );
|
||||
game.Graphics.DeleteTexture( ref ParticlesTexId );
|
||||
game.Events.TerrainAtlasChanged -= TerrainAtlasChanged;
|
||||
game.UserEvents.BlockChanged -= BreakBlockEffect;
|
||||
}
|
||||
|
||||
void RemoveAt<T>( int index, T[] particles, ref int count ) where T : Particle {
|
||||
|
|
|
@ -1,12 +1,17 @@
|
|||
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
|
||||
using System;
|
||||
using ClassicalSharp.Events;
|
||||
using OpenTK;
|
||||
|
||||
namespace ClassicalSharp.Particles {
|
||||
|
||||
public partial class ParticleManager : IDisposable {
|
||||
|
||||
public void BreakBlockEffect( Vector3I position, byte block ) {
|
||||
void BreakBlockEffect( object sender, BlockChangedEventArgs e ) {
|
||||
if( e.Block != 0 ) return;
|
||||
Vector3I position = e.Coords;
|
||||
byte block = e.OldBlock;
|
||||
|
||||
Vector3 startPos = new Vector3( position.X, position.Y, position.Z );
|
||||
int texLoc = game.BlockInfo.GetTextureLoc( block, Side.Left ), texIndex = 0;
|
||||
TextureRec baseRec = game.TerrainAtlas1D.GetTexRec( texLoc, 1, out texIndex );
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
|
||||
using System;
|
||||
using ClassicalSharp.Entities;
|
||||
using ClassicalSharp.Events;
|
||||
using ClassicalSharp.GraphicsAPI;
|
||||
using ClassicalSharp.Model;
|
||||
using OpenTK;
|
||||
|
@ -28,6 +29,7 @@ namespace ClassicalSharp.Renderers {
|
|||
fakeP = new FakePlayer( game );
|
||||
lastType = (byte)game.Inventory.HeldBlock;
|
||||
game.Events.HeldBlockChanged += HeldBlockChanged;
|
||||
game.UserEvents.BlockChanged += BlockChanged;
|
||||
}
|
||||
|
||||
public void Ready( Game game ) { }
|
||||
|
@ -186,6 +188,12 @@ namespace ClassicalSharp.Renderers {
|
|||
|
||||
public void Dispose() {
|
||||
game.Events.HeldBlockChanged -= HeldBlockChanged;
|
||||
game.UserEvents.BlockChanged -= BlockChanged;
|
||||
}
|
||||
|
||||
void BlockChanged( object sender, BlockChangedEventArgs e ) {
|
||||
if( e.Block == 0 ) return;
|
||||
SetAnimationClick( false );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using ClassicalSharp.Map;
|
||||
using OpenTK;
|
||||
using ClassicalSharp.Events;
|
||||
|
||||
namespace ClassicalSharp.Singleplayer {
|
||||
|
||||
|
@ -35,6 +35,7 @@ namespace ClassicalSharp.Singleplayer {
|
|||
map = game.World;
|
||||
info = game.BlockInfo;
|
||||
game.WorldEvents.OnNewMapLoaded += ResetMap;
|
||||
game.UserEvents.BlockChanged += BlockChanged;
|
||||
enabled = Options.GetBool( OptionsKey.SingleplayerPhysics, true );
|
||||
|
||||
falling = new FallingPhysics( game, this );
|
||||
|
@ -85,11 +86,12 @@ namespace ClassicalSharp.Singleplayer {
|
|||
TickRandomBlocks();
|
||||
}
|
||||
|
||||
public void OnBlockPlaced( int x, int y, int z, byte block ) {
|
||||
if( !Enabled ) return;
|
||||
int index = (y * length + z) * width + x;
|
||||
Action<int, byte> place = OnPlace[block];
|
||||
if( place != null ) place( index, block );
|
||||
void BlockChanged( object sender, BlockChangedEventArgs e ) {
|
||||
if( !Enabled || e.Block == 0 ) return;
|
||||
Vector3I p = e.Coords;
|
||||
int index = (p.Y * length + p.Z) * width + p.X;
|
||||
Action<int, byte> place = OnPlace[e.Block];
|
||||
if( place != null ) place( index, e.Block );
|
||||
}
|
||||
|
||||
void ResetMap( object sender, EventArgs e ) {
|
||||
|
@ -108,6 +110,7 @@ namespace ClassicalSharp.Singleplayer {
|
|||
|
||||
public void Dispose() {
|
||||
game.WorldEvents.OnNewMapLoaded -= ResetMap;
|
||||
game.UserEvents.BlockChanged -= BlockChanged;
|
||||
}
|
||||
|
||||
void TickRandomBlocks() {
|
||||
|
|
|
@ -61,11 +61,6 @@ namespace ClassicalSharp.Singleplayer {
|
|||
public override void SendPosition( Vector3 pos, float yaw, float pitch ) {
|
||||
}
|
||||
|
||||
public override void SendSetBlock( int x, int y, int z, bool place, byte block ) {
|
||||
if( place )
|
||||
physics.OnBlockPlaced( x, y, z, block );
|
||||
}
|
||||
|
||||
public override void SendPlayerClick( MouseButton button, bool buttonDown, byte targetId, PickedPos pos ) {
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue