diff --git a/ClassicalSharp/Blocks/BlockInfo.cs b/ClassicalSharp/Blocks/BlockInfo.cs
index 1992f516e..65aeeace9 100644
--- a/ClassicalSharp/Blocks/BlockInfo.cs
+++ b/ClassicalSharp/Blocks/BlockInfo.cs
@@ -2,6 +2,7 @@
namespace ClassicalSharp {
+ /// Stores various properties about the blocks in Minecraft Classic.
public partial class BlockInfo {
internal bool[] isTransparent = new bool[BlocksCount];
diff --git a/ClassicalSharp/Commands/CommandReader.cs b/ClassicalSharp/Commands/CommandReader.cs
index 5d2201312..ed5efc86b 100644
--- a/ClassicalSharp/Commands/CommandReader.cs
+++ b/ClassicalSharp/Commands/CommandReader.cs
@@ -2,6 +2,8 @@
namespace ClassicalSharp.Commands {
+ /// Reads and parses arguments for a client command.
+ /// Spaces are designated as the argument separators.
public class CommandReader {
string rawInput;
@@ -16,7 +18,7 @@ namespace ClassicalSharp.Commands {
}
string arg = rawInput.Substring( curOffset, next - curOffset );
- curOffset = next + 1; // skip space
+ curOffset = next + 1; // skip following space
return arg;
}
diff --git a/ClassicalSharp/Commands/DefaultCommands.cs b/ClassicalSharp/Commands/DefaultCommands.cs
index c0f535099..30c404f09 100644
--- a/ClassicalSharp/Commands/DefaultCommands.cs
+++ b/ClassicalSharp/Commands/DefaultCommands.cs
@@ -1,13 +1,11 @@
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Threading;
-using System.IO;
-using System.Text;
-using ClassicalSharp.Renderers;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ClassicalSharp.Renderers;
namespace ClassicalSharp.Commands {
+ /// Command that displays the list of all currently registered client commands.
public sealed class CommandsCommand : Command {
public CommandsCommand() {
@@ -38,6 +36,7 @@ namespace ClassicalSharp.Commands {
}
}
+ /// Command that modifies various aspects of the environment of the current map.
public sealed class EnvCommand : Command {
public EnvCommand() {
@@ -100,6 +99,7 @@ namespace ClassicalSharp.Commands {
}
}
+ /// Command that displays information about an input client command.
public sealed class HelpCommand : Command {
public HelpCommand() {
@@ -209,6 +209,7 @@ namespace ClassicalSharp.Commands {
}
}
+ /// Command that modifies the font size of chat in the normal gui screen.
public sealed class ChatFontSizeCommand : Command {
public ChatFontSizeCommand() {
@@ -239,6 +240,7 @@ namespace ClassicalSharp.Commands {
}
}
+ /// Command that modifies how sensitive the client is to changes in the mouse position.
public sealed class MouseSensitivityCommand : Command {
public MouseSensitivityCommand() {
@@ -261,6 +263,7 @@ namespace ClassicalSharp.Commands {
}
}
+ /// Command that modifies how far the client can see.
public sealed class ViewDistanceCommand : Command {
public ViewDistanceCommand() {
diff --git a/ClassicalSharp/Entities/LocationUpdate.cs b/ClassicalSharp/Entities/LocationUpdate.cs
index 4da886e67..7fa674e1c 100644
--- a/ClassicalSharp/Entities/LocationUpdate.cs
+++ b/ClassicalSharp/Entities/LocationUpdate.cs
@@ -1,9 +1,10 @@
using System;
-using ClassicalSharp.Model;
using OpenTK;
namespace ClassicalSharp {
+ /// Stores data that describes either a relative position,
+ /// full position, or an orientation update for an entity.
public struct LocationUpdate {
public Vector3 Pos;
diff --git a/ClassicalSharp/Entities/NetPlayer.cs b/ClassicalSharp/Entities/NetPlayer.cs
index 2e67eca72..e695e79cc 100644
--- a/ClassicalSharp/Entities/NetPlayer.cs
+++ b/ClassicalSharp/Entities/NetPlayer.cs
@@ -1,6 +1,6 @@
-using System;
-using ClassicalSharp.Renderers;
-using OpenTK;
+using System;
+using ClassicalSharp.Renderers;
+using OpenTK;
namespace ClassicalSharp {
diff --git a/ClassicalSharp/Game/Game.Chat.cs b/ClassicalSharp/Game/Game.Chat.cs
index 7cee707ab..9e0ae756c 100644
--- a/ClassicalSharp/Game/Game.Chat.cs
+++ b/ClassicalSharp/Game/Game.Chat.cs
@@ -38,7 +38,7 @@ namespace ClassicalSharp {
LogChatToFile( text );
chatArgs.Text = text;
chatArgs.Type = CpeMessage.Normal;
- RaiseEvent( ChatReceived, chatArgs );
+ Raise( ChatReceived, chatArgs );
}
ChatEventArgs chatArgs = new ChatEventArgs();
@@ -63,7 +63,7 @@ namespace ClassicalSharp {
}
chatArgs.Text = text;
chatArgs.Type = type;
- RaiseEvent( ChatReceived, chatArgs );
+ Raise( ChatReceived, chatArgs );
}
DateTime last = new DateTime( 1, 1, 1 );
diff --git a/ClassicalSharp/Game/Game.Events.cs b/ClassicalSharp/Game/Game.Events.cs
index 716646c04..f7e537429 100644
--- a/ClassicalSharp/Game/Game.Events.cs
+++ b/ClassicalSharp/Game/Game.Events.cs
@@ -1,104 +1,78 @@
-using System;
-using ClassicalSharp;
-using OpenTK;
+using System;
namespace ClassicalSharp {
public partial class Game {
- /// Raised when a player is spawned in the current world.
+ /// Raised when an entity is spawned in the current world.
public event EventHandler EntityAdded;
+ internal void RaiseEntityAdded( byte id ) { idArgs.Id = id; Raise( EntityAdded, idArgs ); }
- /// Raised when a player is despawned from the current world.
+ /// Raised when an entity is despawned from the current world.
public event EventHandler EntityRemoved;
+ internal void RaiseEntityRemoved( byte id ) { idArgs.Id = id; Raise( EntityRemoved, idArgs ); }
+ /// Raised when a new CPE player list entry is created.
public event EventHandler CpeListInfoAdded;
+ internal void RaiseCpeListInfoAdded( byte id ) { idArgs.Id = id; Raise( CpeListInfoAdded, idArgs ); }
+ /// Raised when a CPE player list entry is modified.
public event EventHandler CpeListInfoChanged;
+ internal void RaiseCpeListInfoChanged( byte id ) { idArgs.Id = id; Raise( CpeListInfoChanged, idArgs ); }
+ /// Raised when a CPE player list entry is removed.
public event EventHandler CpeListInfoRemoved;
+ internal void RaiseCpeListInfoRemoved( byte id ) { idArgs.Id = id; Raise( CpeListInfoRemoved, idArgs ); }
+
+ /// Raised when the client joins and begins loading a new map.
+ public event EventHandler OnNewMap;
+ internal void RaiseOnNewMap() { Raise( OnNewMap ); }
+
+ /// Raised when a portion of the map is read and decompressed by the client.
public event EventHandler MapLoading;
+ internal void RaiseMapLoading( byte progress ) { loadingArgs.Progress = progress; Raise( MapLoading, loadingArgs ); }
+ /// Raised when the client has finished loading a new map and can now interact with it.
+ public event EventHandler OnNewMapLoaded;
+ internal void RaiseOnNewMapLoaded() { Raise( OnNewMapLoaded ); }
+
+
+ /// Raised when the terrain atlas ("terrain.png") is changed.
+ public event EventHandler TerrainAtlasChanged;
+
+ /// Raised when an environment variable is changed by the user, CPE, or WoM config.
public event EventHandler EnvVariableChanged;
+ internal void RaiseEnvVariableChanged( EnvVariable envVar ) { envArgs.Var = envVar; Raise( EnvVariableChanged, envArgs ); }
+ /// Raised when the user changed their view/fog distance.
public event EventHandler ViewDistanceChanged;
- public event EventHandler OnNewMap;
-
- public event EventHandler OnNewMapLoaded;
+ /// Raised when the held block is changed by the user or by CPE.
public event EventHandler HeldBlockChanged;
+ internal void RaiseHeldBlockChanged() { Raise( HeldBlockChanged ); }
/// Raised when the client's block permissions(can place or delete a block) change.
public event EventHandler BlockPermissionsChanged;
+ internal void RaiseBlockPermissionsChanged() { Raise( BlockPermissionsChanged ); }
- /// Raised when the terrain atlas("terrain.png") is changed.
- public event EventHandler TerrainAtlasChanged;
-
- public event EventHandler ChatReceived;
-
- internal void RaiseOnNewMap() {
- RaiseEvent( OnNewMap );
- }
-
- internal void RaiseHeldBlockChanged() {
- RaiseEvent( HeldBlockChanged );
- }
+ /// Raised when the server or a client-side command sends a message.
+ public event EventHandler ChatReceived;
+
+ // Cache event instances so we don't create needless new objects.
IdEventArgs idArgs = new IdEventArgs( 0 );
- internal void RaiseEntityAdded( byte id ) {
- idArgs.Id = id;
- RaiseEvent( EntityAdded, idArgs );
- }
-
- internal void RaiseEntityRemoved( byte id ) {
- idArgs.Id = id;
- RaiseEvent( EntityRemoved, idArgs );
- }
-
- internal void RaiseCpeListInfoAdded( byte id ) {
- idArgs.Id = id;
- RaiseEvent( CpeListInfoAdded, idArgs );
- }
-
- internal void RaiseCpeListInfoChanged( byte id ) {
- idArgs.Id = id;
- RaiseEvent( CpeListInfoChanged, idArgs );
- }
-
- internal void RaiseCpeListInfoRemoved( byte id ) {
- idArgs.Id = id;
- RaiseEvent( CpeListInfoRemoved, idArgs );
- }
-
- internal void RaiseBlockPermissionsChanged() {
- RaiseEvent( BlockPermissionsChanged );
- }
-
- internal void RaiseOnNewMapLoaded() {
- RaiseEvent( OnNewMapLoaded );
- }
-
- MapLoadingEventArgs loadingArgs = new MapLoadingEventArgs( 0 );
- internal void RaiseMapLoading( byte progress ) {
- loadingArgs.Progress = progress;
- RaiseEvent( MapLoading, loadingArgs );
- }
-
+ MapLoadingEventArgs loadingArgs = new MapLoadingEventArgs( 0 );
EnvVariableEventArgs envArgs = new EnvVariableEventArgs( 0 );
- internal void RaiseEnvVariableChanged( EnvVariable variable ) {
- envArgs.Variable = variable;
- RaiseEvent( EnvVariableChanged, envArgs );
- }
-
- void RaiseEvent( EventHandler handler ) {
+
+ void Raise( EventHandler handler ) {
if( handler != null ) {
handler( this, EventArgs.Empty );
}
}
- void RaiseEvent( EventHandler handler, T args ) where T : EventArgs {
+ void Raise( EventHandler handler, T args ) where T : EventArgs {
if( handler != null ) {
handler( this, args );
}
@@ -132,10 +106,10 @@ namespace ClassicalSharp {
public sealed class EnvVariableEventArgs : EventArgs {
- public EnvVariable Variable;
+ public EnvVariable Var;
public EnvVariableEventArgs( EnvVariable variable ) {
- Variable = variable;
+ Var = variable;
}
}
diff --git a/ClassicalSharp/Game/Game.cs b/ClassicalSharp/Game/Game.cs
index 379221239..94e351453 100644
--- a/ClassicalSharp/Game/Game.cs
+++ b/ClassicalSharp/Game/Game.cs
@@ -103,7 +103,7 @@ namespace ClassicalSharp {
public void ChangeTerrainAtlas( Bitmap newAtlas ) {
LoadAtlas( newAtlas );
- RaiseEvent( TerrainAtlasChanged );
+ Raise( TerrainAtlasChanged );
}
void PrintGraphicsInfo() {
@@ -172,7 +172,7 @@ namespace ClassicalSharp {
public void SetViewDistance( int distance ) {
ViewDistance = distance;
Utils.LogDebug( "setting view distance to: " + distance );
- RaiseEvent( ViewDistanceChanged );
+ Raise( ViewDistanceChanged );
UpdateProjection();
}
diff --git a/ClassicalSharp/GraphicsAPI/IGraphicsApi.cs b/ClassicalSharp/GraphicsAPI/IGraphicsApi.cs
index b5a1b86cc..7b8c8a4e2 100644
--- a/ClassicalSharp/GraphicsAPI/IGraphicsApi.cs
+++ b/ClassicalSharp/GraphicsAPI/IGraphicsApi.cs
@@ -8,10 +8,11 @@ using OpenTK.Graphics.OpenGL;
namespace ClassicalSharp.GraphicsAPI {
+ /// Abstracts a 3D graphics rendering API.
+ /// Only Direct3D9 and OpenGL support are implemented.
public abstract class IGraphicsApi {
- /// Maximum supported length of a dimension
- /// (i.e. max width and max height) in a 2D texture.
+ /// Maximum supported length of a dimension (width and height) of a 2D texture.
public abstract int MaxTextureDimensions { get; }
public abstract bool Texturing { set; }
@@ -227,7 +228,7 @@ namespace ClassicalSharp.GraphicsAPI {
AlphaBlending = false;
}
- public unsafe int MakeDefaultIb() {
+ internal unsafe int MakeDefaultIb() {
const int maxIndices = 65536 / 4 * 6;
int element = 0;
ushort* indices = stackalloc ushort[maxIndices];
diff --git a/ClassicalSharp/GraphicsAPI/OpenGLApi.cs b/ClassicalSharp/GraphicsAPI/OpenGLApi.cs
index 3f26f59cd..a52d95fd0 100644
--- a/ClassicalSharp/GraphicsAPI/OpenGLApi.cs
+++ b/ClassicalSharp/GraphicsAPI/OpenGLApi.cs
@@ -18,6 +18,7 @@ namespace ClassicalSharp.GraphicsAPI {
textureDimensions = texDims;
string extensions = new String( (sbyte*)GL.GetString( StringName.Extensions ) );
+ // NOTE: Not sure if there are any >= 1.5 drivers that support vbos but don't expose the ARB extension.
if( !extensions.Contains( "GL_ARB_vertex_buffer_object" ) ) {
Utils.LogError( "ClassicalSharp post 0.6 version requires OpenGL VBOs." );
Utils.LogWarning( "You may need to install and/or update your video card drivers." );
diff --git a/ClassicalSharp/Rendering/EnvRenderer.cs b/ClassicalSharp/Rendering/EnvRenderer.cs
index dc770b5c1..0b3c8dbfe 100644
--- a/ClassicalSharp/Rendering/EnvRenderer.cs
+++ b/ClassicalSharp/Rendering/EnvRenderer.cs
@@ -31,11 +31,11 @@ namespace ClassicalSharp.Renderers {
public abstract void Render( double deltaTime );
void EnvVariableChanged( object sender, EnvVariableEventArgs e ) {
- if( e.Variable == EnvVariable.SkyColour ) {
+ if( e.Var == EnvVariable.SkyColour ) {
SkyColourChanged();
- } else if( e.Variable == EnvVariable.FogColour ) {
+ } else if( e.Var == EnvVariable.FogColour ) {
FogColourChanged();
- } else if( e.Variable == EnvVariable.CloudsColour ) {
+ } else if( e.Var == EnvVariable.CloudsColour ) {
CloudsColourChanged();
}
}
diff --git a/ClassicalSharp/Rendering/MapEnvRenderer.cs b/ClassicalSharp/Rendering/MapEnvRenderer.cs
index 9acc3e592..d1de231f9 100644
--- a/ClassicalSharp/Rendering/MapEnvRenderer.cs
+++ b/ClassicalSharp/Rendering/MapEnvRenderer.cs
@@ -89,11 +89,11 @@ namespace ClassicalSharp {
}
void EnvVariableChanged( object sender, EnvVariableEventArgs e ) {
- if( e.Variable == EnvVariable.EdgeBlock ) {
+ if( e.Var == EnvVariable.EdgeBlock ) {
MakeTexture( ref edgeTexId, ref lastEdgeTexLoc, Map.EdgeBlock );
- } else if( e.Variable == EnvVariable.SidesBlock ) {
+ } else if( e.Var == EnvVariable.SidesBlock ) {
MakeTexture( ref sideTexId, ref lastSideTexLoc, Map.SidesBlock );
- } else if( e.Variable == EnvVariable.WaterLevel ) {
+ } else if( e.Var == EnvVariable.WaterLevel ) {
ResetSidesAndEdges( null, null );
}
}
diff --git a/ClassicalSharp/Rendering/MapRenderer.cs b/ClassicalSharp/Rendering/MapRenderer.cs
index 2a81fc435..326a910f8 100644
--- a/ClassicalSharp/Rendering/MapRenderer.cs
+++ b/ClassicalSharp/Rendering/MapRenderer.cs
@@ -66,7 +66,7 @@ namespace ClassicalSharp {
}
void EnvVariableChanged( object sender, EnvVariableEventArgs e ) {
- if( e.Variable == EnvVariable.SunlightColour || e.Variable == EnvVariable.ShadowlightColour ) {
+ if( e.Var == EnvVariable.SunlightColour || e.Var == EnvVariable.ShadowlightColour ) {
Refresh();
}
}
diff --git a/ClassicalSharp/Utils/FastBitmap.cs b/ClassicalSharp/Utils/FastBitmap.cs
index d43de1aeb..4b4f6201c 100644
--- a/ClassicalSharp/Utils/FastBitmap.cs
+++ b/ClassicalSharp/Utils/FastBitmap.cs
@@ -4,6 +4,7 @@ using System.Drawing.Imaging;
namespace ClassicalSharp {
+ /// Wrapper around a bitmap that allows extremely fast manipulation of 32bpp images.
public unsafe class FastBitmap : IDisposable {
public FastBitmap( Bitmap bmp, bool lockBits ) {
@@ -57,19 +58,19 @@ namespace ClassicalSharp {
}
}
- public int GetPixel( int x, int y ) {
- // TODO: Does this work with big-endian systems?
- int* row = (int*)( scan0Byte + ( y * Stride ) );
- return row[x]; // b g r a
- }
-
+ /// Returns a pointer to the start of the y'th scanline.
public int* GetRowPtr( int y ) {
return (int*)( scan0Byte + ( y * Stride ) );
}
- public void SetPixel( int x, int y, int col ) {
- int* row = (int*)( scan0Byte + ( y * Stride ) );
- row[x] = col;
+ internal static void MovePortion( int srcX, int srcY, int dstX, int dstY, FastBitmap src, FastBitmap dst, int size ) {
+ for( int y = 0; y < size; y++ ) {
+ int* srcRow = src.GetRowPtr( srcY + y );
+ int* dstRow = dst.GetRowPtr( dstY + y );
+ for( int x = 0; x < size; x++ ) {
+ dstRow[dstX + x] = srcRow[srcX + x];
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/ClassicalSharp/Utils/FastColour.cs b/ClassicalSharp/Utils/FastColour.cs
index 33f8a7854..b27519095 100644
--- a/ClassicalSharp/Utils/FastColour.cs
+++ b/ClassicalSharp/Utils/FastColour.cs
@@ -1,9 +1,10 @@
-using System;
-using System.Drawing;
-using OpenTK.Graphics;
+using System;
+using System.Drawing;
namespace ClassicalSharp {
+ /// Structure that can be used for quick manipulations of A/R/G/B colours.
+ /// This structure is **not** suitable for interop with OpenGL or Direct3D.
public struct FastColour {
public byte A, R, G, B;
diff --git a/ClassicalSharp/Utils/TerrainAtlas1D.cs b/ClassicalSharp/Utils/TerrainAtlas1D.cs
index 31b03bdc5..2762568c2 100644
--- a/ClassicalSharp/Utils/TerrainAtlas1D.cs
+++ b/ClassicalSharp/Utils/TerrainAtlas1D.cs
@@ -4,7 +4,8 @@ using ClassicalSharp.GraphicsAPI;
namespace ClassicalSharp {
- public class TerrainAtlas1D : IDisposable {
+ /// Represents a 2D packed texture atlas that has been converted into an array of 1D atlases.
+ public sealed class TerrainAtlas1D : IDisposable {
int usedElementsPerAtlas1D;
internal int elementsPerBitmap;
@@ -52,7 +53,7 @@ namespace ClassicalSharp {
for( int y_1D = 0; y_1D < usedElementsPerAtlas1D; y_1D++ ) {
int x = index & 0x0F;
int y = index >> 4;
- Utils.MovePortion( x * elemSize, y * elemSize, 0, y_1D * elemSize, atlas, dst, elemSize );
+ FastBitmap.MovePortion( x * elemSize, y * elemSize, 0, y_1D * elemSize, atlas, dst, elemSize );
index++;
}
TexIds[i] = graphics.CreateTexture( dst );
diff --git a/ClassicalSharp/Utils/TerrainAtlas2D.cs b/ClassicalSharp/Utils/TerrainAtlas2D.cs
index f7fa925bf..74d30e962 100644
--- a/ClassicalSharp/Utils/TerrainAtlas2D.cs
+++ b/ClassicalSharp/Utils/TerrainAtlas2D.cs
@@ -14,6 +14,7 @@ namespace ClassicalSharp {
public const int Sides = 6;
}
+ /// Represents a 2D packed texture atlas, specifically for terrain.png.
public class TerrainAtlas2D : IDisposable {
public const int ElementsPerRow = 16, RowsCount = 16;
@@ -40,10 +41,12 @@ namespace ClassicalSharp {
public int LoadTextureElement( int index ) {
int x = index & 0x0F;
int y = index >> 4;
+ int size = elementSize;
+
using( FastBitmap atlas = new FastBitmap( AtlasBitmap, true ) ) {
- using( Bitmap bmp = new Bitmap( elementSize, elementSize ) ) {
+ using( Bitmap bmp = new Bitmap( size, size ) ) {
using( FastBitmap dst = new FastBitmap( bmp, true ) ) {
- Utils.MovePortion( x * elementSize, y * elementSize, 0, 0, atlas, dst, elementSize );
+ FastBitmap.MovePortion( x * size, y * size, 0, 0, atlas, dst, size );
return graphics.CreateTexture( dst );
}
}
@@ -67,15 +70,16 @@ namespace ClassicalSharp {
static ushort[] rowFlags = { 0xFFFF, 0xFFEE, 0xFFE0, 0xFFE0, 0xFFFF, 0xFA00 };
void MakeOptimisedTexture( FastBitmap atlas ) {
int srcIndex = 0, destIndex = 0;
+ int size = elementSize;
for( int y = 0; y < 6; y++ ) {
int flags = rowFlags[y];
for( int x = 0; x < ElementsPerRow; x++ ) {
bool isUsed = ( flags & 1 << ( 15 - x ) ) != 0;
if( isUsed && srcIndex != destIndex ) {
- int dstX = ( destIndex & 0x0F ) * elementSize;
- int dstY = ( destIndex >> 4 ) * elementSize;
- Utils.MovePortion( x * elementSize, y * elementSize, dstX, dstY, atlas, atlas, elementSize );
+ int dstX = ( destIndex & 0x0F ) * size;
+ int dstY = ( destIndex >> 4 ) * size;
+ FastBitmap.MovePortion( x * size, y * size, dstX, dstY, atlas, atlas, size );
}
srcIndex++;
diff --git a/ClassicalSharp/Utils/TextureRectangle.cs b/ClassicalSharp/Utils/TextureRectangle.cs
index 7320799fb..e29b410a0 100644
--- a/ClassicalSharp/Utils/TextureRectangle.cs
+++ b/ClassicalSharp/Utils/TextureRectangle.cs
@@ -2,6 +2,7 @@
namespace ClassicalSharp {
+ /// Stores the four texture coordinates that bound a textured quad.
public struct TextureRectangle {
public float U1, V1, U2, V2;
diff --git a/ClassicalSharp/Utils/Utils.cs b/ClassicalSharp/Utils/Utils.cs
index a0e25bc00..f818b8b59 100644
--- a/ClassicalSharp/Utils/Utils.cs
+++ b/ClassicalSharp/Utils/Utils.cs
@@ -239,15 +239,5 @@ namespace ClassicalSharp {
throw new NotSupportedException( "unsupported skin dimensions: " + bmp.Width + ", " + bmp.Height );
}
}
-
- internal unsafe static void MovePortion( int srcX, int srcY, int dstX, int dstY, FastBitmap src, FastBitmap dst, int size ) {
- for( int y = 0; y < size; y++ ) {
- int* srcRow = src.GetRowPtr( srcY + y );
- int* dstRow = dst.GetRowPtr( dstY + y );
- for( int x = 0; x < size; x++ ) {
- dstRow[dstX + x] = srcRow[srcX + x];
- }
- }
- }
}
}
\ No newline at end of file
diff --git a/ClassicalSharp/Utils/Vector3I.cs b/ClassicalSharp/Utils/Vector3I.cs
index 88fd0c103..3b0300134 100644
--- a/ClassicalSharp/Utils/Vector3I.cs
+++ b/ClassicalSharp/Utils/Vector3I.cs
@@ -3,6 +3,7 @@ using OpenTK;
namespace ClassicalSharp {
+ /// Represents a 3D integer vector.
public struct Vector3I {
public static Vector3I Zero = new Vector3I( 0, 0, 0 );