// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Net;
using ClassicalSharp.Audio;
using ClassicalSharp.Commands;
using ClassicalSharp.Entities;
using ClassicalSharp.Events;
using ClassicalSharp.GraphicsAPI;
using ClassicalSharp.Gui;
using ClassicalSharp.Map;
using ClassicalSharp.Model;
using ClassicalSharp.Network;
using ClassicalSharp.Particles;
using ClassicalSharp.Renderers;
using ClassicalSharp.Selections;
using ClassicalSharp.TexturePack;
using OpenTK;
using OpenTK.Input;
namespace ClassicalSharp {
/// Represents a game component.
public interface IGameComponent : IDisposable {
/// Called when the game is being loaded.
void Init( Game game );
/// Called when the texture pack has been loaded and all components have been initalised.
void Ready( Game game );
/// Called to reset the component's state when the user is reconnecting to a server.
void Reset( Game game );
/// Called to update the component's state when the user begins loading a new map.
void OnNewMap( Game game );
/// Called to update the component's state when the user has finished loading a new map.
void OnNewMapLoaded( Game game );
}
public partial class Game {
/// Abstracts the underlying 3D graphics rendering API.
public IGraphicsApi Graphics;
/// Contains the block data and metadata/properties for the player's current world.
public World World;
/// Represents a connection to a multiplayer or a singleplayer server.
public INetworkProcessor Network;
/// List of all entities in the current map, including the player.
public EntityList Entities;
/// Entity representing the player.
public LocalPlayer LocalPlayer;
/// Contains information for each player in the current world
/// (or for whole server if supported).
public TabList TabList;
/// Current camera the player is using to view the world with.
/// e.g. first person, thid person, forward third person, etc.
public Camera Camera;
Camera firstPersonCam, thirdPersonCam, forwardThirdPersonCam;
/// Contains the metadata about each currently defined block.
/// e.g. blocks light, height, texture IDs, etc.
public BlockInfo BlockInfo;
/// Total rendering time(in seconds) elapsed since the client was started.
public double accumulator;
public TerrainAtlas2D TerrainAtlas;
public TerrainAtlas1D TerrainAtlas1D;
public SkinType DefaultPlayerSkinType;
/// Accumulator for the number of chunk updates performed. Reset every second.
public int ChunkUpdates;
/// Whether the third person camera should have their camera position clipped so as to not intersect blocks.
public bool CameraClipping = true;
public bool ShowClock = false;
public bool SkipClear = false;
public MapRenderer MapRenderer;
public MapBordersRenderer MapBordersRenderer;
public EnvRenderer EnvRenderer;
public WeatherRenderer WeatherRenderer;
public Inventory Inventory;
public IDrawer2D Drawer2D;
public CommandManager CommandManager;
public SelectionManager SelectionManager;
public ParticleManager ParticleManager;
public PickedPosRenderer Picking;
public PickedPos SelectedPos = new PickedPos(), CameraClipPos = new PickedPos();
public ModelCache ModelCache;
internal string skinServer, chatInInputBuffer = null;
internal int defaultIb;
FpsScreen fpsScreen;
internal HudScreen hudScreen;
public OtherEvents Events = new OtherEvents();
public EntityEvents EntityEvents = new EntityEvents();
public WorldEvents WorldEvents = new WorldEvents();
public UserEvents UserEvents = new UserEvents();
public InputHandler InputHandler;
public Chat Chat;
public HeldBlockRenderer HeldBlockRenderer;
public AudioPlayer AudioPlayer;
public AxisLinesRenderer AxisLinesRenderer;
public SkyboxRenderer SkyboxRenderer;
public List Components = new List();
public List WarningOverlays = new List();
/// Whether x to stone brick tiles should be used.
public bool UseCPEBlocks = false;
/// Account username of the player.
public string Username;
/// Verification key used for multiplayer, unique for the username and individual server.
public string Mppass;
/// IP address of multiplayer server connected to, null if singleplayer.
public IPAddress IPAddress;
/// Port of multiplayer server connected to, 0 if singleplayer.
public int Port;
/// Radius of the sphere the player can see around the position of the current camera.
public int ViewDistance = 512;
internal int MaxViewDistance = 32768, UserViewDistance = 512;
/// Field of view for the current camera in degrees.
public int Fov = 70;
internal int DefaultFov, ZoomFov = 0;
/// Strategy used to limit how many frames should be displayed at most each second.
public FpsLimitMethod FpsLimit;
/// Whether lines should be rendered for each axis.
public bool ShowAxisLines;
/// Whether players should animate using simple swinging parallel to their bodies.
public bool SimpleArmsAnim;
/// Whether mouse rotation on the y axis should be inverted.
public bool InvertMouse;
public long Vertices;
public FrustumCulling Culling;
int width, height;
public AsyncDownloader AsyncDownloader;
public Matrix4 View, Projection;
/// How sensitive the client is to changes in the player's mouse position.
public int MouseSensitivity = 30;
public bool TabAutocomplete;
public bool UseClassicGui, UseClassicTabList, UseClassicOptions, ClassicMode, ClassicHacks;
public bool PureClassic { get { return ClassicMode && !ClassicHacks; } }
public bool AllowCustomBlocks, UseCPE, AllowServerTextures;
public string FontName = "Arial";
public int ChatLines = 12;
public bool ClickableChat = false, HideGui = false, ShowFPS = true;
internal float HotbarScale = 1, ChatScale = 1, InventoryScale = 1;
public bool ViewBobbing, ShowBlockInHand;
public bool UseSound, UseMusic, ModifiableLiquids;
public Vector3 CurrentCameraPos;
public Animations Animations;
internal int CloudsTex, GuiTex, GuiClassicTex, IconsTex;
internal bool screenshotRequested;
internal EntryList AcceptedUrls = new EntryList( "acceptedurls.txt" );
internal EntryList DeniedUrls = new EntryList( "deniedurls.txt" );
internal EntryList ETags = new EntryList( "etags.txt" );
/// Calculates the amount that the hotbar widget should be scaled by when rendered.
/// Affected by both the current resolution of the window, as well as the
/// scaling specified by the user (field HotbarScale).
public float GuiHotbarScale { get { return Scale( MinWindowScale * HotbarScale ); } }
/// Calculates the amount that the block inventory menu should be scaled by when rendered.
/// Affected by both the current resolution of the window, as well as the
/// scaling specified by the user (field InventoryScale).
public float GuiInventoryScale { get { return Scale( MinWindowScale * InventoryScale ); } }
/// Calculates the amount that 2D chat widgets should be scaled by when rendered.
/// Affected by both the current resolution of the window, as well as the
/// scaling specified by the user (field ChatScale).
public float GuiChatScale { get { return Scale( (Height / 480f) * ChatScale ); } }
float MinWindowScale { get { return Math.Min( Width / 640f, Height / 480f ); } }
public float Scale( float value ) {
return (float)Math.Round( value * 10, MidpointRounding.AwayFromZero ) / 10;
}
string defTexturePack = "default.zip";
/// Gets or sets the path of the default texture pack that should be used by the client.
/// If the custom default texture pack specified by the user could not be found,
/// this method returns "default.zip".
public string DefaultTexturePack {
get {
string path = Path.Combine( Program.AppDirectory, TexturePackExtractor.Dir );
path = Path.Combine( path, defTexturePack );
return File.Exists( path ) && !ClassicMode ? defTexturePack : "default.zip";
}
set {
defTexturePack = value;
Options.Set( OptionsKey.DefaultTexturePack, value );
}
}
internal IPlatformWindow window;
public MouseDevice Mouse;
public KeyboardDevice Keyboard;
public int Width { get { return window.Width; } }
public int Height { get { return window.Height; } }
public Size ClientSize { get { return window.ClientSize; } }
public bool Focused { get { return window.Focused; } }
public bool Exists { get { return window.Exists; } }
public Point PointToScreen( Point coords ) {
return window.PointToScreen( coords );
}
public bool VSync {
get { return window.VSync; }
set { window.VSync = value; }
}
bool visible = true;
internal bool realVisible = true;
public bool CursorVisible {
get { return visible; }
set {
// Defer mouse visibility changes.
realVisible = value;
if( WarningOverlays.Count > 0 ) return;
// Only set the value when it has changes.
if( visible == value ) return;
window.CursorVisible = value;
visible = value;
}
}
public Point DesktopCursorPos {
get { return window.DesktopCursorPos; }
set { window.DesktopCursorPos = value; }
}
}
}