mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-08-20 09:57:10 +00:00
Merge branch '4jcraft:dev' into fix-with-ubsan
This commit is contained in:
commit
11aa08aece
4
.github/workflows/build-linux.yml
vendored
4
.github/workflows/build-linux.yml
vendored
|
|
@ -32,7 +32,7 @@ jobs:
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential python3 ninja-build meson libsdl2-dev libgl-dev libglu1-mesa-dev libpthread-stubs0-dev
|
sudo apt-get install -y build-essential ccache python3 ninja-build meson libsdl2-dev libgl-dev libglu1-mesa-dev libpthread-stubs0-dev
|
||||||
# Set a reasonable ccache size
|
# Set a reasonable ccache size
|
||||||
ccache -M 5G || true
|
ccache -M 5G || true
|
||||||
|
|
||||||
|
|
@ -86,7 +86,7 @@ jobs:
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential python3 ninja-build meson libsdl2-dev libgl-dev libglu1-mesa-dev libpthread-stubs0-dev
|
sudo apt-get install -y build-essential ccache python3 ninja-build meson libsdl2-dev libgl-dev libglu1-mesa-dev libpthread-stubs0-dev
|
||||||
# Set a reasonable ccache size
|
# Set a reasonable ccache size
|
||||||
ccache -M 5G || true
|
ccache -M 5G || true
|
||||||
|
|
||||||
|
|
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -6,6 +6,9 @@ builddir/
|
||||||
build_meson/
|
build_meson/
|
||||||
cmake-build-debug/
|
cmake-build-debug/
|
||||||
|
|
||||||
|
# Nix flake output
|
||||||
|
result
|
||||||
|
|
||||||
# Final binaries and platform output
|
# Final binaries and platform output
|
||||||
/Linux/
|
/Linux/
|
||||||
/x64/
|
/x64/
|
||||||
|
|
|
||||||
|
|
@ -215,7 +215,8 @@ bool C_4JInput::ButtonDown(int iPad, unsigned char ucAction) {
|
||||||
switch (ucAction) {
|
switch (ucAction) {
|
||||||
case MINECRAFT_ACTION_ACTION: return MouseLDown() || KDown(SDL_SCANCODE_RETURN);
|
case MINECRAFT_ACTION_ACTION: return MouseLDown() || KDown(SDL_SCANCODE_RETURN);
|
||||||
case MINECRAFT_ACTION_USE: return MouseRDown() || KDown(SDL_SCANCODE_F);
|
case MINECRAFT_ACTION_USE: return MouseRDown() || KDown(SDL_SCANCODE_F);
|
||||||
case MINECRAFT_ACTION_SNEAK_TOGGLE: return KDown(SDL_SCANCODE_LSHIFT) || KDown(SDL_SCANCODE_RSHIFT) || KDown(SDL_SCANCODE_LCTRL) || KDown(SDL_SCANCODE_RCTRL);
|
case MINECRAFT_ACTION_SNEAK_TOGGLE: return KDown(SDL_SCANCODE_LSHIFT) || KDown(SDL_SCANCODE_RSHIFT);
|
||||||
|
case MINECRAFT_ACTION_SPRINT: return KDown(SDL_SCANCODE_LCTRL) || KDown(SDL_SCANCODE_RCTRL);
|
||||||
case MINECRAFT_ACTION_LEFT_SCROLL:
|
case MINECRAFT_ACTION_LEFT_SCROLL:
|
||||||
case ACTION_MENU_LEFT_SCROLL: return ScrollSnap() > 0;
|
case ACTION_MENU_LEFT_SCROLL: return ScrollSnap() > 0;
|
||||||
case MINECRAFT_ACTION_RIGHT_SCROLL:
|
case MINECRAFT_ACTION_RIGHT_SCROLL:
|
||||||
|
|
@ -229,7 +230,8 @@ bool C_4JInput::ButtonPressed(int iPad, unsigned char ucAction) {
|
||||||
switch (ucAction) {
|
switch (ucAction) {
|
||||||
case MINECRAFT_ACTION_ACTION: return MouseLPressed() || KPressed(SDL_SCANCODE_RETURN);
|
case MINECRAFT_ACTION_ACTION: return MouseLPressed() || KPressed(SDL_SCANCODE_RETURN);
|
||||||
case MINECRAFT_ACTION_USE: return MouseRPressed() || KPressed(SDL_SCANCODE_F);
|
case MINECRAFT_ACTION_USE: return MouseRPressed() || KPressed(SDL_SCANCODE_F);
|
||||||
case MINECRAFT_ACTION_SNEAK_TOGGLE: return KPressed(SDL_SCANCODE_LSHIFT) || KPressed(SDL_SCANCODE_RSHIFT) || KPressed(SDL_SCANCODE_LCTRL) || KPressed(SDL_SCANCODE_RCTRL);
|
case MINECRAFT_ACTION_SNEAK_TOGGLE: return KPressed(SDL_SCANCODE_LSHIFT) || KPressed(SDL_SCANCODE_RSHIFT);
|
||||||
|
case MINECRAFT_ACTION_SPRINT: return KPressed(SDL_SCANCODE_LCTRL) || KPressed(SDL_SCANCODE_RCTRL);
|
||||||
case MINECRAFT_ACTION_LEFT_SCROLL:
|
case MINECRAFT_ACTION_LEFT_SCROLL:
|
||||||
case ACTION_MENU_LEFT_SCROLL: return ScrollSnap() > 0;
|
case ACTION_MENU_LEFT_SCROLL: return ScrollSnap() > 0;
|
||||||
case MINECRAFT_ACTION_RIGHT_SCROLL:
|
case MINECRAFT_ACTION_RIGHT_SCROLL:
|
||||||
|
|
@ -243,7 +245,8 @@ bool C_4JInput::ButtonReleased(int iPad, unsigned char ucAction) {
|
||||||
switch (ucAction) {
|
switch (ucAction) {
|
||||||
case MINECRAFT_ACTION_ACTION: return MouseLReleased() || KReleased(SDL_SCANCODE_RETURN);
|
case MINECRAFT_ACTION_ACTION: return MouseLReleased() || KReleased(SDL_SCANCODE_RETURN);
|
||||||
case MINECRAFT_ACTION_USE: return MouseRReleased() || KReleased(SDL_SCANCODE_F);
|
case MINECRAFT_ACTION_USE: return MouseRReleased() || KReleased(SDL_SCANCODE_F);
|
||||||
case MINECRAFT_ACTION_SNEAK_TOGGLE: return KReleased(SDL_SCANCODE_LSHIFT) || KReleased(SDL_SCANCODE_RSHIFT) || KReleased(SDL_SCANCODE_LCTRL) || KReleased(SDL_SCANCODE_RCTRL);
|
case MINECRAFT_ACTION_SNEAK_TOGGLE: return KReleased(SDL_SCANCODE_LSHIFT) || KReleased(SDL_SCANCODE_RSHIFT);
|
||||||
|
case MINECRAFT_ACTION_SPRINT: KReleased(SDL_SCANCODE_LCTRL) || KReleased(SDL_SCANCODE_RCTRL);
|
||||||
case MINECRAFT_ACTION_LEFT_SCROLL:
|
case MINECRAFT_ACTION_LEFT_SCROLL:
|
||||||
case ACTION_MENU_LEFT_SCROLL:
|
case ACTION_MENU_LEFT_SCROLL:
|
||||||
case MINECRAFT_ACTION_RIGHT_SCROLL:
|
case MINECRAFT_ACTION_RIGHT_SCROLL:
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,9 @@ static void onFramebufferResize(int w, int h)
|
||||||
::glViewport(0, 0, w, h);
|
::glViewport(0, 0, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// V-Sync
|
||||||
|
|
||||||
|
|
||||||
// Initialize OpenGL & The SDL window.
|
// Initialize OpenGL & The SDL window.
|
||||||
void C4JRender::Initialise()
|
void C4JRender::Initialise()
|
||||||
{
|
{
|
||||||
|
|
@ -121,8 +124,14 @@ void C4JRender::Initialise()
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SDL_GL_SetSwapInterval(0); // V-Sync Off Please.
|
|
||||||
|
|
||||||
|
// 4JCraft VSync/V-Sync
|
||||||
|
#ifdef ENABLE_VSYNC
|
||||||
|
SDL_GL_SetSwapInterval(1); // V-Sync On Please.
|
||||||
|
#else
|
||||||
|
SDL_GL_SetSwapInterval(0); // V-Sync Off Please.
|
||||||
|
#endif
|
||||||
|
|
||||||
int fw, fh; SDL_GetWindowSize(s_window, &fw, &fh); onFramebufferResize(fw, fh);
|
int fw, fh; SDL_GetWindowSize(s_window, &fw, &fh); onFramebufferResize(fw, fh);
|
||||||
|
|
||||||
// We initialize the OpenGL states. Touching those values makes some funny artifacts appear.
|
// We initialize the OpenGL states. Touching those values makes some funny artifacts appear.
|
||||||
|
|
@ -560,7 +569,7 @@ void C4JRender::TextureBind(int idx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void C4JRender::TextureBindVertex(int idx)
|
void C4JRender::TextureBindVertex(int idx, bool scaleLight)
|
||||||
{
|
{
|
||||||
// Unit 1 used for lightmapping in fixed-function or standard shaders
|
// Unit 1 used for lightmapping in fixed-function or standard shaders
|
||||||
::glActiveTexture(GL_TEXTURE1);
|
::glActiveTexture(GL_TEXTURE1);
|
||||||
|
|
@ -574,7 +583,20 @@ void C4JRender::TextureBindVertex(int idx)
|
||||||
::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||||
::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||||
|
|
||||||
|
// 4jcraft: jank workaround for entities
|
||||||
|
// referenced from the disabled code in GameRenderer::turnOnLightLayer
|
||||||
|
if (scaleLight)
|
||||||
|
{
|
||||||
|
::glMatrixMode(GL_TEXTURE);
|
||||||
|
::glLoadIdentity();
|
||||||
|
float s = 1 / 16.0f / 15.0f * 15 / 16;
|
||||||
|
::glScalef(s, s, s);
|
||||||
|
::glTranslatef(8.0f, 8.0f, 8.0f);
|
||||||
|
::glMatrixMode(GL_MODELVIEW);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::glActiveTexture(GL_TEXTURE0);
|
::glActiveTexture(GL_TEXTURE0);
|
||||||
::glFlush();
|
::glFlush();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,7 @@ public:
|
||||||
int TextureCreate();
|
int TextureCreate();
|
||||||
void TextureFree(int idx);
|
void TextureFree(int idx);
|
||||||
void TextureBind(int idx);
|
void TextureBind(int idx);
|
||||||
void TextureBindVertex(int idx);
|
void TextureBindVertex(int idx, bool scaleLight = false);
|
||||||
void TextureSetTextureLevels(int levels);
|
void TextureSetTextureLevels(int levels);
|
||||||
int TextureGetTextureLevels();
|
int TextureGetTextureLevels();
|
||||||
void TextureData(int width, int height, void *data, int level, eTextureFormat format = TEXTURE_FORMAT_RxGyBzAw);
|
void TextureData(int width, int height, void *data, int level, eTextureFormat format = TEXTURE_FORMAT_RxGyBzAw);
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,13 @@ void Options::init()
|
||||||
bobView = true;
|
bobView = true;
|
||||||
anaglyph3d = false;
|
anaglyph3d = false;
|
||||||
advancedOpengl = false;
|
advancedOpengl = false;
|
||||||
|
|
||||||
|
//4JCRAFT V-Sync / VSync
|
||||||
|
#ifdef ENABLE_VSYNC
|
||||||
framerateLimit = 2;
|
framerateLimit = 2;
|
||||||
|
#else
|
||||||
|
framerateLimit = 3;
|
||||||
|
#endif
|
||||||
fancyGraphics = true;
|
fancyGraphics = true;
|
||||||
ambientOcclusion = true;
|
ambientOcclusion = true;
|
||||||
renderClouds = true;
|
renderClouds = true;
|
||||||
|
|
@ -522,4 +528,4 @@ void Options::save()
|
||||||
bool Options::isCloudsOn()
|
bool Options::isCloudsOn()
|
||||||
{
|
{
|
||||||
return viewDistance < 2 && renderClouds;
|
return viewDistance < 2 && renderClouds;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ Input::Input()
|
||||||
wasJumping = false;
|
wasJumping = false;
|
||||||
jumping = false;
|
jumping = false;
|
||||||
sneaking = false;
|
sneaking = false;
|
||||||
|
sprintKey = false;
|
||||||
|
|
||||||
lReset = false;
|
lReset = false;
|
||||||
rReset = false;
|
rReset = false;
|
||||||
|
|
@ -103,12 +104,8 @@ void Input::tick(LocalPlayer *player)
|
||||||
|
|
||||||
//jumping = controller.isButtonPressed(0);
|
//jumping = controller.isButtonPressed(0);
|
||||||
|
|
||||||
|
sprintKey = InputManager.GetValue(iPad, MINECRAFT_ACTION_SPRINT) && pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_SPRINT);
|
||||||
unsigned int jump = InputManager.GetValue(iPad, MINECRAFT_ACTION_JUMP);
|
jumping = InputManager.GetValue(iPad, MINECRAFT_ACTION_JUMP) && pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_JUMP);
|
||||||
if( jump > 0 && pMinecraft->localgameModes[iPad]->isInputAllowed(MINECRAFT_ACTION_JUMP) )
|
|
||||||
jumping = true;
|
|
||||||
else
|
|
||||||
jumping = false;
|
|
||||||
|
|
||||||
#ifndef _CONTENT_PACKAGE
|
#ifndef _CONTENT_PACKAGE
|
||||||
if (app.GetFreezePlayers()) jumping = false;
|
if (app.GetFreezePlayers()) jumping = false;
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ public:
|
||||||
bool wasJumping;
|
bool wasJumping;
|
||||||
bool jumping;
|
bool jumping;
|
||||||
bool sneaking;
|
bool sneaking;
|
||||||
|
bool sprintKey;
|
||||||
|
|
||||||
Input(); // 4J - added
|
Input(); // 4J - added
|
||||||
virtual ~Input(){}
|
virtual ~Input(){}
|
||||||
|
|
|
||||||
|
|
@ -828,6 +828,7 @@ enum EControllerActions
|
||||||
MINECRAFT_ACTION_PAUSEMENU,
|
MINECRAFT_ACTION_PAUSEMENU,
|
||||||
MINECRAFT_ACTION_DROP,
|
MINECRAFT_ACTION_DROP,
|
||||||
MINECRAFT_ACTION_SNEAK_TOGGLE,
|
MINECRAFT_ACTION_SNEAK_TOGGLE,
|
||||||
|
MINECRAFT_ACTION_SPRINT,
|
||||||
MINECRAFT_ACTION_CRAFTING,
|
MINECRAFT_ACTION_CRAFTING,
|
||||||
MINECRAFT_ACTION_RENDER_THIRD_PERSON,
|
MINECRAFT_ACTION_RENDER_THIRD_PERSON,
|
||||||
MINECRAFT_ACTION_GAME_INFO,
|
MINECRAFT_ACTION_GAME_INFO,
|
||||||
|
|
|
||||||
|
|
@ -305,7 +305,7 @@ void LocalPlayer::aiStep()
|
||||||
// 4J - altered this slightly to make sure that the joypad returns to below returnTreshold in between registering two movements up to runThreshold
|
// 4J - altered this slightly to make sure that the joypad returns to below returnTreshold in between registering two movements up to runThreshold
|
||||||
if (onGround && !isSprinting() && enoughFoodToSprint && !isUsingItem() && !hasEffect(MobEffect::blindness))
|
if (onGround && !isSprinting() && enoughFoodToSprint && !isUsingItem() && !hasEffect(MobEffect::blindness))
|
||||||
{
|
{
|
||||||
if( !wasRunning && input->ya >= runTreshold )
|
if( !wasRunning && (input->ya >= runTreshold) )
|
||||||
{
|
{
|
||||||
if (sprintTriggerTime == 0)
|
if (sprintTriggerTime == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -326,14 +326,18 @@ void LocalPlayer::aiStep()
|
||||||
{
|
{
|
||||||
sprintTriggerRegisteredReturn = true;
|
sprintTriggerRegisteredReturn = true;
|
||||||
}
|
}
|
||||||
|
else if (input->sprintKey)
|
||||||
|
{
|
||||||
|
setSprinting(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (isSneaking()) sprintTriggerTime = 0;
|
if (isSneaking()) sprintTriggerTime = 0;
|
||||||
// 4J-PB - try not stopping sprint on collision
|
// 4J-PB - try not stopping sprint on collision
|
||||||
//if (isSprinting() && (input->ya < runTreshold || horizontalCollision || !enoughFoodToSprint))
|
//if (isSprinting() && (input->ya < runTreshold || horizontalCollision || !enoughFoodToSprint))
|
||||||
if (isSprinting() && (input->ya < runTreshold || !enoughFoodToSprint))
|
if (isSprinting() && ((input->ya < runTreshold && !input->sprintKey) || !enoughFoodToSprint))
|
||||||
{
|
{
|
||||||
setSprinting(false);
|
setSprinting(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4J Stu - Fix for #52705 - Customer Encountered: Player can fly in bed while being in Creative mode.
|
// 4J Stu - Fix for #52705 - Customer Encountered: Player can fly in bed while being in Creative mode.
|
||||||
if (!isSleeping() && (abilities.mayfly || isAllowedToFly() ))
|
if (!isSleeping() && (abilities.mayfly || isAllowedToFly() ))
|
||||||
|
|
|
||||||
|
|
@ -777,14 +777,14 @@ void GameRenderer::renderItemInHand(float a, int eye)
|
||||||
{
|
{
|
||||||
if (!mc->options->hideGui && !mc->gameMode->isCutScene())
|
if (!mc->options->hideGui && !mc->gameMode->isCutScene())
|
||||||
{
|
{
|
||||||
//turnOnLightLayer(a); // 4jcraft: disable light layer on handrenderer similarly to how it was done on the chunk render (this makes the hand look proper)
|
turnOnLightLayer(a, true);
|
||||||
PIXBeginNamedEvent(0,"Item in hand render");
|
PIXBeginNamedEvent(0,"Item in hand render");
|
||||||
// 4jcraft: add null pointer check to itemInHandRenderer to prevent a occasional seg fault
|
// 4jcraft: add null pointer check to itemInHandRenderer to prevent a occasional seg fault
|
||||||
if (itemInHandRenderer != nullptr) {
|
if (itemInHandRenderer != nullptr) {
|
||||||
itemInHandRenderer->render(a);
|
itemInHandRenderer->render(a);
|
||||||
}
|
}
|
||||||
PIXEndNamedEvent();
|
PIXEndNamedEvent();
|
||||||
//turnOffLightLayer(a); // 4jcraft: disable light layer on handrenderer similarly to how it was done on the chunk render (this makes the hand look proper)
|
turnOffLightLayer(a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
@ -806,21 +806,26 @@ void GameRenderer::renderItemInHand(float a, int eye)
|
||||||
// 4J - change brought forward from 1.8.2
|
// 4J - change brought forward from 1.8.2
|
||||||
void GameRenderer::turnOffLightLayer(double alpha)
|
void GameRenderer::turnOffLightLayer(double alpha)
|
||||||
{ // 4J - TODO
|
{ // 4J - TODO
|
||||||
#if 0
|
// 4jcraft: manually handle this in order to ensure that the light layer is turned off correctly
|
||||||
|
#if 1
|
||||||
if (SharedConstants::TEXTURE_LIGHTING)
|
if (SharedConstants::TEXTURE_LIGHTING)
|
||||||
{
|
{
|
||||||
glClientActiveTexture(GL_TEXTURE1);
|
glClientActiveTexture(GL_TEXTURE1);
|
||||||
glActiveTexture(GL_TEXTURE1);
|
glActiveTexture(GL_TEXTURE1);
|
||||||
|
glMatrixMode(GL_TEXTURE);
|
||||||
|
glLoadIdentity();
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glClientActiveTexture(GL_TEXTURE0);
|
glClientActiveTexture(GL_TEXTURE0);
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
RenderManager.TextureBindVertex(-1);
|
//RenderManager.TextureBindVertex(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4J - change brought forward from 1.8.2
|
// 4J - change brought forward from 1.8.2
|
||||||
void GameRenderer::turnOnLightLayer(double alpha)
|
void GameRenderer::turnOnLightLayer(double alpha, bool scaleLight)
|
||||||
{ // 4J - TODO
|
{ // 4J - TODO
|
||||||
#if 0
|
#if 0
|
||||||
if (SharedConstants::TEXTURE_LIGHTING)
|
if (SharedConstants::TEXTURE_LIGHTING)
|
||||||
|
|
@ -851,7 +856,7 @@ void GameRenderer::turnOnLightLayer(double alpha)
|
||||||
#endif
|
#endif
|
||||||
// update light texture
|
// update light texture
|
||||||
// todo: check implementation of getLightTexture.
|
// todo: check implementation of getLightTexture.
|
||||||
RenderManager.TextureBindVertex(getLightTexture(mc->player->GetXboxPad(), mc->level));
|
RenderManager.TextureBindVertex(getLightTexture(mc->player->GetXboxPad(), mc->level), scaleLight);
|
||||||
#if 0
|
#if 0
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
@ -971,7 +976,7 @@ void GameRenderer::updateLightTexture(float a)
|
||||||
int g = (int) (_g * 255);
|
int g = (int) (_g * 255);
|
||||||
int b = (int) (_b * 255);
|
int b = (int) (_b * 255);
|
||||||
|
|
||||||
#if ( defined _DURANGO || defined _WIN64 || __PSVITA__ )
|
#if ( defined _DURANGO || defined _WIN64 || __PSVITA__ || __linux__ )
|
||||||
lightPixels[j][i] = a << 24 | b << 16 | g << 8 | r;
|
lightPixels[j][i] = a << 24 | b << 16 | g << 8 | r;
|
||||||
#elif ( defined _XBOX || defined __ORBIS__ )
|
#elif ( defined _XBOX || defined __ORBIS__ )
|
||||||
lightPixels[j][i] = a << 24 | r << 16 | g << 8 | b;
|
lightPixels[j][i] = a << 24 | r << 16 | g << 8 | b;
|
||||||
|
|
@ -2189,6 +2194,9 @@ int GameRenderer::getFpsCap(int option)
|
||||||
int maxFps = 200;
|
int maxFps = 200;
|
||||||
if (option == 1) maxFps = 120;
|
if (option == 1) maxFps = 120;
|
||||||
if (option == 2) maxFps = 35;
|
if (option == 2) maxFps = 35;
|
||||||
|
#ifndef ENABLE_VSYNC
|
||||||
|
if (option == 3) maxFps = 0;
|
||||||
|
#endif
|
||||||
return maxFps;
|
return maxFps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ public:
|
||||||
float blg;
|
float blg;
|
||||||
float blgt;
|
float blgt;
|
||||||
void turnOffLightLayer(double alpha);
|
void turnOffLightLayer(double alpha);
|
||||||
void turnOnLightLayer(double alpha);
|
void turnOnLightLayer(double alpha, bool scaleLight = false);
|
||||||
private:
|
private:
|
||||||
void tickLightTexture();
|
void tickLightTexture();
|
||||||
void updateLightTexture(float a);
|
void updateLightTexture(float a);
|
||||||
|
|
|
||||||
|
|
@ -518,7 +518,7 @@ void LevelRenderer::renderEntities(Vec3 *cam, Culler *culler, float a)
|
||||||
TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
|
TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
|
||||||
TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
|
TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
|
||||||
|
|
||||||
// mc->gameRenderer->turnOnLightLayer(a); // 4J - brought forward from 1.8.2
|
mc->gameRenderer->turnOnLightLayer(a, true); // 4J - brought forward from 1.8.2
|
||||||
|
|
||||||
std::vector<std::shared_ptr<Entity> > entities = level[playerIndex]->getAllEntities();
|
std::vector<std::shared_ptr<Entity> > entities = level[playerIndex]->getAllEntities();
|
||||||
totalEntities = (int)entities.size();
|
totalEntities = (int)entities.size();
|
||||||
|
|
@ -600,7 +600,7 @@ void LevelRenderer::renderEntities(Vec3 *cam, Culler *culler, float a)
|
||||||
|
|
||||||
LeaveCriticalSection(&m_csRenderableTileEntities);
|
LeaveCriticalSection(&m_csRenderableTileEntities);
|
||||||
|
|
||||||
// mc->gameRenderer->turnOffLightLayer(a); // 4J - brought forward from 1.8.2
|
mc->gameRenderer->turnOffLightLayer(a); // 4J - brought forward from 1.8.2
|
||||||
}
|
}
|
||||||
|
|
||||||
std::wstring LevelRenderer::gatherStats1()
|
std::wstring LevelRenderer::gatherStats1()
|
||||||
|
|
@ -742,8 +742,8 @@ int LevelRenderer::renderChunks(int from, int to, int layer, double alpha)
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
// 4J - cut down version, we're not using offsetted render lists, or a sorted chunk list, anymore
|
// 4J - cut down version, we're not using offsetted render lists, or a sorted chunk list, anymore
|
||||||
// mc->gameRenderer->turnOnLightLayer(alpha); // 4J - brought forward from 1.8.2
|
mc->gameRenderer->turnOnLightLayer(alpha); // 4J - brought forward from 1.8.2
|
||||||
shared_ptr<Mob> player = mc->cameraTargetPlayer;
|
std::shared_ptr<Mob> player = mc->cameraTargetPlayer;
|
||||||
double xOff = player->xOld + (player->x - player->xOld) * alpha;
|
double xOff = player->xOld + (player->x - player->xOld) * alpha;
|
||||||
double yOff = player->yOld + (player->y - player->yOld) * alpha;
|
double yOff = player->yOld + (player->y - player->yOld) * alpha;
|
||||||
double zOff = player->zOld + (player->z - player->zOld) * alpha;
|
double zOff = player->zOld + (player->z - player->zOld) * alpha;
|
||||||
|
|
@ -838,7 +838,7 @@ int LevelRenderer::renderChunks(int from, int to, int layer, double alpha)
|
||||||
#endif // __PS3__
|
#endif // __PS3__
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
// mc->gameRenderer->turnOffLightLayer(alpha); // 4J - brought forward from 1.8.2
|
mc->gameRenderer->turnOffLightLayer(alpha); // 4J - brought forward from 1.8.2
|
||||||
|
|
||||||
#else
|
#else
|
||||||
_renderChunks.clear();
|
_renderChunks.clear();
|
||||||
|
|
|
||||||
|
|
@ -942,9 +942,15 @@ void Tesselator::vertex(float x, float y, float z)
|
||||||
#ifdef _XBOX
|
#ifdef _XBOX
|
||||||
_array->data[p + 7] = ( ( _tex2 >> 16 ) & 0xffff ) | ( _tex2 << 16 );
|
_array->data[p + 7] = ( ( _tex2 >> 16 ) & 0xffff ) | ( _tex2 << 16 );
|
||||||
#else
|
#else
|
||||||
#ifdef __PS3__
|
// 4jcraft: we will be lighting the blocks right in here
|
||||||
|
#if defined(__PS3__) || defined (__linux__)
|
||||||
|
#ifdef __PS3__
|
||||||
int16_t tex2U = ((int16_t*)&_tex2)[1] + 8;
|
int16_t tex2U = ((int16_t*)&_tex2)[1] + 8;
|
||||||
int16_t tex2V = ((int16_t*)&_tex2)[0] + 8;
|
int16_t tex2V = ((int16_t*)&_tex2)[0] + 8;
|
||||||
|
#else
|
||||||
|
int16_t tex2U = ((int16_t*)&_tex2)[0] + 8;
|
||||||
|
int16_t tex2V = ((int16_t*)&_tex2)[1] + 8;
|
||||||
|
#endif
|
||||||
int16_t* pShortArray = (int16_t*)&_array->data[p + 7];
|
int16_t* pShortArray = (int16_t*)&_array->data[p + 7];
|
||||||
pShortArray[0] = tex2U;
|
pShortArray[0] = tex2U;
|
||||||
pShortArray[1] = tex2V;
|
pShortArray[1] = tex2V;
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
#include "PacketListener.h"
|
#include "PacketListener.h"
|
||||||
#include "MoveEntityPacket.h"
|
#include "MoveEntityPacket.h"
|
||||||
|
|
||||||
MoveEntityPacket::MoveEntityPacket()
|
MoveEntityPacket::MoveEntityPacket()
|
||||||
{
|
{
|
||||||
hasRot = false;
|
hasRot = false;
|
||||||
|
|
||||||
|
|
@ -28,7 +28,7 @@ MoveEntityPacket::MoveEntityPacket(int id)
|
||||||
xRot = 0;
|
xRot = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacket::read(DataInputStream *dis) //throws IOException
|
void MoveEntityPacket::read(DataInputStream *dis) //throws IOException
|
||||||
{
|
{
|
||||||
id = dis->readShort();
|
id = dis->readShort();
|
||||||
}
|
}
|
||||||
|
|
@ -48,7 +48,7 @@ void MoveEntityPacket::handle(PacketListener *listener)
|
||||||
listener->handleMoveEntity(shared_from_this());
|
listener->handleMoveEntity(shared_from_this());
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoveEntityPacket::getEstimatedSize()
|
int MoveEntityPacket::getEstimatedSize()
|
||||||
{
|
{
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
@ -69,66 +69,66 @@ MoveEntityPacket::PosRot::PosRot()
|
||||||
hasRot = true;
|
hasRot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacket::PosRot::PosRot(int id, char xa, char ya, char za, char yRot, char xRot) : MoveEntityPacket( id )
|
MoveEntityPacket::PosRot::PosRot(int id, int8_t xa, int8_t ya, int8_t za, int8_t yRot, int8_t xRot) : MoveEntityPacket( id )
|
||||||
{
|
{
|
||||||
this->xa = xa;
|
this->xa = xa;
|
||||||
this->ya = ya;
|
this->ya = ya;
|
||||||
this->za = za;
|
this->za = za;
|
||||||
this->yRot = yRot;
|
this->yRot = yRot;
|
||||||
this->xRot = xRot;
|
this->xRot = xRot;
|
||||||
hasRot = true;
|
hasRot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacket::PosRot::read(DataInputStream *dis) //throws IOException
|
void MoveEntityPacket::PosRot::read(DataInputStream *dis) //throws IOException
|
||||||
{
|
{
|
||||||
MoveEntityPacket::read(dis);
|
MoveEntityPacket::read(dis);
|
||||||
xa = (int)dis->readByte();
|
xa = (int8_t)dis->readByte();
|
||||||
ya = (int)dis->readByte();
|
ya = (int8_t)dis->readByte();
|
||||||
za = (int)dis->readByte();
|
za = (int8_t)dis->readByte();
|
||||||
yRot = (int)dis->readByte();
|
yRot = (int8_t)dis->readByte();
|
||||||
xRot = (int)dis->readByte();
|
xRot = (int8_t)dis->readByte();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacket::PosRot::write(DataOutputStream *dos) //throws IOException
|
void MoveEntityPacket::PosRot::write(DataOutputStream *dos) //throws IOException
|
||||||
{
|
{
|
||||||
MoveEntityPacket::write(dos);
|
MoveEntityPacket::write(dos);
|
||||||
dos->writeByte((uint8_t)xa);
|
dos->writeByte((uint8_t)(xa & 0xFF));
|
||||||
dos->writeByte((uint8_t)ya);
|
dos->writeByte((uint8_t)(ya & 0xFF));
|
||||||
dos->writeByte((uint8_t)za);
|
dos->writeByte((uint8_t)(za & 0xFF));
|
||||||
dos->writeByte((uint8_t)yRot);
|
dos->writeByte((uint8_t)(yRot & 0xFF));
|
||||||
dos->writeByte((uint8_t)xRot);
|
dos->writeByte((uint8_t)(xRot & 0xFF));
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoveEntityPacket::PosRot::getEstimatedSize()
|
int MoveEntityPacket::PosRot::getEstimatedSize()
|
||||||
{
|
{
|
||||||
return 2+5;
|
return 2+5;
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacket::Pos::Pos()
|
MoveEntityPacket::Pos::Pos()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacket::Pos::Pos(int id, char xa, char ya, char za) : MoveEntityPacket(id)
|
MoveEntityPacket::Pos::Pos(int id, int8_t xa, int8_t ya, int8_t za) : MoveEntityPacket(id)
|
||||||
{
|
{
|
||||||
this->xa = xa;
|
this->xa = xa;
|
||||||
this->ya = ya;
|
this->ya = ya;
|
||||||
this->za = za;
|
this->za = za;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacket::Pos::read(DataInputStream *dis) //throws IOException
|
void MoveEntityPacket::Pos::read(DataInputStream *dis) //throws IOException
|
||||||
{
|
{
|
||||||
MoveEntityPacket::read(dis);
|
MoveEntityPacket::read(dis);
|
||||||
xa = (int)dis->readByte();
|
xa = (int8_t)dis->readByte();
|
||||||
ya = (int)dis->readByte();
|
ya = (int8_t)dis->readByte();
|
||||||
za = (int)dis->readByte();
|
za = (int8_t)dis->readByte();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacket::Pos::write(DataOutputStream *dos) //throws IOException
|
void MoveEntityPacket::Pos::write(DataOutputStream *dos) //throws IOException
|
||||||
{
|
{
|
||||||
MoveEntityPacket::write(dos);
|
MoveEntityPacket::write(dos);
|
||||||
dos->writeByte((uint8_t)xa);
|
dos->writeByte((uint8_t)(xa & 0xFF));
|
||||||
dos->writeByte((uint8_t)ya);
|
dos->writeByte((uint8_t)(ya & 0xFF));
|
||||||
dos->writeByte((uint8_t)za);
|
dos->writeByte((uint8_t)(za & 0xFF));
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoveEntityPacket::Pos::getEstimatedSize()
|
int MoveEntityPacket::Pos::getEstimatedSize()
|
||||||
|
|
@ -136,30 +136,30 @@ int MoveEntityPacket::Pos::getEstimatedSize()
|
||||||
return 2+3;
|
return 2+3;
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacket::Rot::Rot()
|
MoveEntityPacket::Rot::Rot()
|
||||||
{
|
{
|
||||||
hasRot = true;
|
hasRot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacket::Rot::Rot(int id, char yRot, char xRot) : MoveEntityPacket(id)
|
MoveEntityPacket::Rot::Rot(int id, int8_t yRot, int8_t xRot) : MoveEntityPacket(id)
|
||||||
{
|
{
|
||||||
this->yRot = yRot;
|
this->yRot = yRot;
|
||||||
this->xRot = xRot;
|
this->xRot = xRot;
|
||||||
hasRot = true;
|
hasRot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacket::Rot::read(DataInputStream *dis) //throws IOException
|
void MoveEntityPacket::Rot::read(DataInputStream *dis) //throws IOException
|
||||||
{
|
{
|
||||||
MoveEntityPacket::read(dis);
|
MoveEntityPacket::read(dis);
|
||||||
yRot = (int)dis->readByte();
|
yRot = (int8_t)dis->readByte();
|
||||||
xRot = (int)dis->readByte();
|
xRot = (int8_t)dis->readByte();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacket::Rot::write(DataOutputStream *dos) //throws IOException
|
void MoveEntityPacket::Rot::write(DataOutputStream *dos) //throws IOException
|
||||||
{
|
{
|
||||||
MoveEntityPacket::write(dos);
|
MoveEntityPacket::write(dos);
|
||||||
dos->writeByte((uint8_t)yRot);
|
dos->writeByte((uint8_t)(yRot & 0xFF));
|
||||||
dos->writeByte((uint8_t)xRot);
|
dos->writeByte((uint8_t)(xRot & 0xFF));
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoveEntityPacket::Rot::getEstimatedSize()
|
int MoveEntityPacket::Rot::getEstimatedSize()
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ public:
|
||||||
class Rot;
|
class Rot;
|
||||||
|
|
||||||
int id;
|
int id;
|
||||||
char xa, ya, za, yRot, xRot;
|
int8_t xa, ya, za, yRot, xRot;
|
||||||
bool hasRot;
|
bool hasRot;
|
||||||
|
|
||||||
MoveEntityPacket();
|
MoveEntityPacket();
|
||||||
|
|
@ -35,7 +35,7 @@ class MoveEntityPacket::PosRot : public MoveEntityPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PosRot();
|
PosRot();
|
||||||
PosRot(int id, char xa, char ya, char za, char yRot, char xRot);
|
PosRot(int id, int8_t xa, int8_t ya, int8_t za, int8_t yRot, int8_t xRot);
|
||||||
|
|
||||||
virtual void read(DataInputStream *dis);
|
virtual void read(DataInputStream *dis);
|
||||||
virtual void write(DataOutputStream *dos);
|
virtual void write(DataOutputStream *dos);
|
||||||
|
|
@ -50,7 +50,7 @@ class MoveEntityPacket::Pos : public MoveEntityPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Pos();
|
Pos();
|
||||||
Pos(int id, char xa, char ya, char za);
|
Pos(int id, int8_t xa, int8_t ya, int8_t za);
|
||||||
|
|
||||||
virtual void read(DataInputStream *dis);
|
virtual void read(DataInputStream *dis);
|
||||||
virtual void write(DataOutputStream *dos);
|
virtual void write(DataOutputStream *dos);
|
||||||
|
|
@ -65,7 +65,7 @@ class MoveEntityPacket::Rot : public MoveEntityPacket
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Rot();
|
Rot();
|
||||||
Rot(int id, char yRot, char xRot);
|
Rot(int id, int8_t yRot, int8_t xRot);
|
||||||
|
|
||||||
virtual void read(DataInputStream *dis);
|
virtual void read(DataInputStream *dis);
|
||||||
virtual void write(DataOutputStream *dos);
|
virtual void write(DataOutputStream *dos);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include "../../Platform/stdafx.h"
|
#include "../../Platform/stdafx.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <limits>
|
||||||
#include "../../IO/Streams/InputOutputStream.h"
|
#include "../../IO/Streams/InputOutputStream.h"
|
||||||
#include "PacketListener.h"
|
#include "PacketListener.h"
|
||||||
#include "MoveEntityPacketSmall.h"
|
#include "MoveEntityPacketSmall.h"
|
||||||
|
|
@ -19,30 +20,19 @@ MoveEntityPacketSmall::MoveEntityPacketSmall()
|
||||||
|
|
||||||
MoveEntityPacketSmall::MoveEntityPacketSmall(int id)
|
MoveEntityPacketSmall::MoveEntityPacketSmall(int id)
|
||||||
{
|
{
|
||||||
if( (id < 0 ) || (id >= 2048 ) )
|
|
||||||
{
|
|
||||||
// We shouln't be tracking an entity that doesn't have a short type of id
|
|
||||||
__debugbreak();
|
|
||||||
}
|
|
||||||
|
|
||||||
this->id = id;
|
this->id = id;
|
||||||
hasRot = false;
|
hasRot = false;
|
||||||
|
xa = ya = za = yRot = xRot = 0;
|
||||||
xa = 0;
|
|
||||||
ya = 0;
|
|
||||||
za = 0;
|
|
||||||
yRot = 0;
|
|
||||||
xRot = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacketSmall::read(DataInputStream *dis) //throws IOException
|
void MoveEntityPacketSmall::read(DataInputStream *dis) //throws IOException
|
||||||
{
|
{
|
||||||
id = dis->readShort();
|
id = dis->readShort();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacketSmall::write(DataOutputStream *dos) //throws IOException
|
void MoveEntityPacketSmall::write(DataOutputStream *dos) //throws IOException
|
||||||
{
|
{
|
||||||
if( (id < 0 ) || (id >= 2048 ) )
|
if(id < 0 || id > std::numeric_limits<int16_t>::max() )
|
||||||
{
|
{
|
||||||
// We shouln't be tracking an entity that doesn't have a short type of id
|
// We shouln't be tracking an entity that doesn't have a short type of id
|
||||||
__debugbreak();
|
__debugbreak();
|
||||||
|
|
@ -55,7 +45,7 @@ void MoveEntityPacketSmall::handle(PacketListener *listener)
|
||||||
listener->handleMoveEntitySmall(shared_from_this());
|
listener->handleMoveEntitySmall(shared_from_this());
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoveEntityPacketSmall::getEstimatedSize()
|
int MoveEntityPacketSmall::getEstimatedSize()
|
||||||
{
|
{
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
@ -76,7 +66,7 @@ MoveEntityPacketSmall::PosRot::PosRot()
|
||||||
hasRot = true;
|
hasRot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacketSmall::PosRot::PosRot(int id, char xa, char ya, char za, char yRot, char xRot) : MoveEntityPacketSmall( id )
|
MoveEntityPacketSmall::PosRot::PosRot(int id, int8_t xa, int8_t ya, int8_t za, int8_t yRot, int8_t xRot) : MoveEntityPacketSmall( id )
|
||||||
{
|
{
|
||||||
this->xa = xa;
|
this->xa = xa;
|
||||||
this->ya = ya;
|
this->ya = ya;
|
||||||
|
|
@ -86,80 +76,69 @@ MoveEntityPacketSmall::PosRot::PosRot(int id, char xa, char ya, char za, char yR
|
||||||
hasRot = true;
|
hasRot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacketSmall::PosRot::read(DataInputStream *dis) //throws IOException
|
void MoveEntityPacketSmall::PosRot::read(DataInputStream *dis) //throws IOException
|
||||||
{
|
{
|
||||||
int idAndRot = dis->readShort();
|
MoveEntityPacketSmall::read(dis);
|
||||||
this->id = idAndRot & 0x07ff;
|
xa = (int8_t)dis->readByte();
|
||||||
this->yRot = idAndRot >> 11;
|
ya = (int8_t)dis->readByte();
|
||||||
int xAndYAndZ = (int)dis->readShort();
|
za = (int8_t)dis->readByte();
|
||||||
this->xa = xAndYAndZ >> 11;
|
yRot = (int8_t)dis->readByte();
|
||||||
this->ya = (xAndYAndZ << 21 ) >> 26;
|
xRot = (int8_t)dis->readByte();
|
||||||
this->za = (xAndYAndZ << 27 ) >> 27;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacketSmall::PosRot::write(DataOutputStream *dos) //throws IOException
|
void MoveEntityPacketSmall::PosRot::write(DataOutputStream *dos) //throws IOException
|
||||||
{
|
{
|
||||||
if( (id < 0 ) || (id >= 2048 ) )
|
MoveEntityPacketSmall::write(dos);
|
||||||
{
|
dos->writeByte((uint8_t)(xa & 0xFF));
|
||||||
// We shouln't be tracking an entity that doesn't have a short type of id
|
dos->writeByte((uint8_t)(ya & 0xFF));
|
||||||
__debugbreak();
|
dos->writeByte((uint8_t)(za & 0xFF));
|
||||||
}
|
dos->writeByte((uint8_t)(yRot & 0xFF));
|
||||||
short idAndRot = id | yRot << 11;
|
dos->writeByte((uint8_t)(xRot & 0xFF));
|
||||||
dos->writeShort(idAndRot);
|
|
||||||
short xAndYAndZ = ( xa << 11 ) | ( ( ya & 0x3f ) << 5 ) | ( za & 0x1f );
|
|
||||||
dos->writeShort(xAndYAndZ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoveEntityPacketSmall::PosRot::getEstimatedSize()
|
int MoveEntityPacketSmall::PosRot::getEstimatedSize()
|
||||||
{
|
{
|
||||||
return 4;
|
return 2+5;
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacketSmall::Pos::Pos()
|
MoveEntityPacketSmall::Pos::Pos()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacketSmall::Pos::Pos(int id, char xa, char ya, char za) : MoveEntityPacketSmall(id)
|
MoveEntityPacketSmall::Pos::Pos(int id, int8_t xa, int8_t ya, int8_t za) : MoveEntityPacketSmall(id)
|
||||||
{
|
{
|
||||||
this->xa = xa;
|
this->xa = xa;
|
||||||
this->ya = ya;
|
this->ya = ya;
|
||||||
this->za = za;
|
this->za = za;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacketSmall::Pos::read(DataInputStream *dis) //throws IOException
|
void MoveEntityPacketSmall::Pos::read(DataInputStream *dis) //throws IOException
|
||||||
{
|
{
|
||||||
int idAndY = dis->readShort();
|
MoveEntityPacketSmall::read(dis);
|
||||||
this->id = idAndY & 0x07ff;
|
xa = (int8_t)dis->readByte();
|
||||||
this->ya = idAndY >> 11;
|
ya = (int8_t)dis->readByte();
|
||||||
int XandZ = (int)((signed char)(dis->readByte()));
|
za = (int8_t)dis->readByte();
|
||||||
xa = XandZ >> 4;
|
|
||||||
za = ( XandZ << 28 ) >> 28;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacketSmall::Pos::write(DataOutputStream *dos) //throws IOException
|
void MoveEntityPacketSmall::Pos::write(DataOutputStream *dos) //throws IOException
|
||||||
{
|
{
|
||||||
if( (id < 0 ) || (id >= 2048 ) )
|
MoveEntityPacketSmall::write(dos);
|
||||||
{
|
dos->writeByte((uint8_t)(xa & 0xFF));
|
||||||
// We shouln't be tracking an entity that doesn't have a short type of id
|
dos->writeByte((uint8_t)(ya & 0xFF));
|
||||||
__debugbreak();
|
dos->writeByte((uint8_t)(za & 0xFF));
|
||||||
}
|
|
||||||
short idAndY = id | ya << 11;
|
|
||||||
dos->writeShort(idAndY);
|
|
||||||
char XandZ = ( xa << 4 ) | ( za & 0x0f );
|
|
||||||
dos->writeByte((uint8_t)XandZ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoveEntityPacketSmall::Pos::getEstimatedSize()
|
int MoveEntityPacketSmall::Pos::getEstimatedSize()
|
||||||
{
|
{
|
||||||
return 3;
|
return 2+3;
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacketSmall::Rot::Rot()
|
MoveEntityPacketSmall::Rot::Rot()
|
||||||
{
|
{
|
||||||
hasRot = true;
|
hasRot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveEntityPacketSmall::Rot::Rot(int id, char yRot, char xRot) : MoveEntityPacketSmall(id)
|
MoveEntityPacketSmall::Rot::Rot(int id, int8_t yRot, int8_t xRot) : MoveEntityPacketSmall(id)
|
||||||
{
|
{
|
||||||
|
|
||||||
this->yRot = yRot;
|
this->yRot = yRot;
|
||||||
|
|
@ -167,25 +146,19 @@ MoveEntityPacketSmall::Rot::Rot(int id, char yRot, char xRot) : MoveEntityPacket
|
||||||
hasRot = true;
|
hasRot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacketSmall::Rot::read(DataInputStream *dis) //throws IOException
|
void MoveEntityPacketSmall::Rot::read(DataInputStream *dis) //throws IOException
|
||||||
{
|
{
|
||||||
int idAndRot = (int)dis->readShort();
|
MoveEntityPacketSmall::read(dis);
|
||||||
this->id = idAndRot & 0x07ff;
|
yRot = (int8_t)dis->readByte();
|
||||||
this->yRot = idAndRot >> 11;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveEntityPacketSmall::Rot::write(DataOutputStream *dos) //throws IOException
|
void MoveEntityPacketSmall::Rot::write(DataOutputStream *dos) //throws IOException
|
||||||
{
|
{
|
||||||
if( (id < 0 ) || (id >= 2048 ) )
|
MoveEntityPacketSmall::write(dos);
|
||||||
{
|
dos->writeByte((uint8_t)(yRot & 0xFF));
|
||||||
// We shouln't be tracking an entity that doesn't have a short type of id
|
|
||||||
__debugbreak();
|
|
||||||
}
|
|
||||||
short idAndRot = id | yRot << 11;
|
|
||||||
dos->writeShort(idAndRot);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoveEntityPacketSmall::Rot::getEstimatedSize()
|
int MoveEntityPacketSmall::Rot::getEstimatedSize()
|
||||||
{
|
{
|
||||||
return 2;
|
return 2+1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@ public:
|
||||||
class Rot;
|
class Rot;
|
||||||
|
|
||||||
int id;
|
int id;
|
||||||
char xa, ya, za, yRot, xRot;
|
int8_t xa, ya, za, yRot, xRot;
|
||||||
bool hasRot;
|
bool hasRot;
|
||||||
|
|
||||||
MoveEntityPacketSmall();
|
MoveEntityPacketSmall();
|
||||||
MoveEntityPacketSmall(int id);
|
MoveEntityPacketSmall(int id);
|
||||||
|
|
@ -34,8 +34,8 @@ public:
|
||||||
class MoveEntityPacketSmall::PosRot : public MoveEntityPacketSmall
|
class MoveEntityPacketSmall::PosRot : public MoveEntityPacketSmall
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PosRot();
|
PosRot();
|
||||||
PosRot(int id, char xa, char ya, char za, char yRot, char xRot);
|
PosRot(int id, int8_t xa, int8_t ya, int8_t za, int8_t yRot, int8_t xRot);
|
||||||
|
|
||||||
virtual void read(DataInputStream *dis);
|
virtual void read(DataInputStream *dis);
|
||||||
virtual void write(DataOutputStream *dos);
|
virtual void write(DataOutputStream *dos);
|
||||||
|
|
@ -50,7 +50,7 @@ class MoveEntityPacketSmall::Pos : public MoveEntityPacketSmall
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Pos();
|
Pos();
|
||||||
Pos(int id, char xa, char ya, char za);
|
Pos(int id, int8_t xa, int8_t ya, int8_t za);
|
||||||
|
|
||||||
virtual void read(DataInputStream *dis);
|
virtual void read(DataInputStream *dis);
|
||||||
virtual void write(DataOutputStream *dos);
|
virtual void write(DataOutputStream *dos);
|
||||||
|
|
@ -66,7 +66,7 @@ class MoveEntityPacketSmall::Rot : public MoveEntityPacketSmall
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Rot();
|
Rot();
|
||||||
Rot(int id, char yRot, char xRot);
|
Rot(int id, int8_t yRot, int8_t xRot);
|
||||||
|
|
||||||
virtual void read(DataInputStream *dis);
|
virtual void read(DataInputStream *dis);
|
||||||
virtual void write(DataOutputStream *dos);
|
virtual void write(DataOutputStream *dos);
|
||||||
|
|
|
||||||
|
|
@ -17,22 +17,14 @@ void SetEntityMotionPacket::_init(int id, double xd, double yd, double zd)
|
||||||
if (xd > m) xd = m;
|
if (xd > m) xd = m;
|
||||||
if (yd > m) yd = m;
|
if (yd > m) yd = m;
|
||||||
if (zd > m) zd = m;
|
if (zd > m) zd = m;
|
||||||
xa = (int) (xd * 8000.0);
|
xa = (int16_t) (xd * 8000.0);
|
||||||
ya = (int) (yd * 8000.0);
|
ya = (int16_t) (yd * 8000.0);
|
||||||
za = (int) (zd * 8000.0);
|
za = (int16_t) (zd * 8000.0);
|
||||||
// 4J - if we could transmit this as bytes (in 1/16 accuracy) then flag to do so
|
|
||||||
if( ( xa >= (-128 * 16 ) ) && ( ya >= (-128 * 16 ) ) && ( za >= (-128 * 16 ) ) &&
|
useBytes = false;
|
||||||
( xa < (128 * 16 ) ) && ( ya < (128 * 16 ) ) && ( za < (128 * 16 ) ) )
|
|
||||||
{
|
|
||||||
useBytes = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
useBytes = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SetEntityMotionPacket::SetEntityMotionPacket()
|
SetEntityMotionPacket::SetEntityMotionPacket()
|
||||||
{
|
{
|
||||||
_init(0, 0.0f, 0.0f, 0.0f);
|
_init(0, 0.0f, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
@ -44,56 +36,27 @@ SetEntityMotionPacket::SetEntityMotionPacket(std::shared_ptr<Entity> e)
|
||||||
|
|
||||||
SetEntityMotionPacket::SetEntityMotionPacket(int id, double xd, double yd, double zd)
|
SetEntityMotionPacket::SetEntityMotionPacket(int id, double xd, double yd, double zd)
|
||||||
{
|
{
|
||||||
_init(id, xd, yd, zd);
|
_init(id, xd, yd, zd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetEntityMotionPacket::read(DataInputStream *dis) //throws IOException
|
void SetEntityMotionPacket::read(DataInputStream *dis) //throws IOException
|
||||||
{
|
{
|
||||||
short idAndFlag = dis->readShort();
|
id = dis->readShort();
|
||||||
id = idAndFlag & 0x07ff;
|
|
||||||
if( idAndFlag & 0x0800 )
|
xa = dis->readShort();
|
||||||
{
|
ya = dis->readShort();
|
||||||
xa = (int)dis->readByte();
|
za = dis->readShort();
|
||||||
ya = (int)dis->readByte();
|
|
||||||
za = (int)dis->readByte();
|
useBytes = false;
|
||||||
xa = ( xa << 24 ) >> 24;
|
|
||||||
ya = ( ya << 24 ) >> 24;
|
|
||||||
za = ( za << 24 ) >> 24;
|
|
||||||
xa *= 16;
|
|
||||||
ya *= 16;
|
|
||||||
za *= 16;
|
|
||||||
useBytes = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xa = dis->readShort();
|
|
||||||
ya = dis->readShort();
|
|
||||||
za = dis->readShort();
|
|
||||||
useBytes = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetEntityMotionPacket::write(DataOutputStream *dos) //throws IOException
|
void SetEntityMotionPacket::write(DataOutputStream *dos) //throws IOException
|
||||||
{
|
{
|
||||||
if( useBytes )
|
dos->writeShort(id);
|
||||||
{
|
|
||||||
// 4jcraft: masking the id to 11 bits before writing to account for entity ids > 4095.
|
dos->writeShort(xa);
|
||||||
// This fixes a connection drop when loading the tutorial world on linux.
|
dos->writeShort(ya);
|
||||||
//
|
dos->writeShort(za);
|
||||||
// FIXME: find the root cause of this, since there shouldn't be more than 4095 entities.
|
|
||||||
dos->writeShort((id & 0x07FF) | 0x800);
|
|
||||||
dos->writeByte(xa/16);
|
|
||||||
dos->writeByte(ya/16);
|
|
||||||
dos->writeByte(za/16);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 4jcraft: same thing as line 80 here
|
|
||||||
dos->writeShort((id & 0x07FF));
|
|
||||||
dos->writeShort(xa);
|
|
||||||
dos->writeShort(ya);
|
|
||||||
dos->writeShort(za);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetEntityMotionPacket::handle(PacketListener *listener)
|
void SetEntityMotionPacket::handle(PacketListener *listener)
|
||||||
|
|
@ -103,7 +66,7 @@ void SetEntityMotionPacket::handle(PacketListener *listener)
|
||||||
|
|
||||||
int SetEntityMotionPacket::getEstimatedSize()
|
int SetEntityMotionPacket::getEstimatedSize()
|
||||||
{
|
{
|
||||||
return useBytes ? 5 : 8;
|
return 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SetEntityMotionPacket::canBeInvalidated()
|
bool SetEntityMotionPacket::canBeInvalidated()
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ class SetEntityMotionPacket : public Packet, public std::enable_shared_from_this
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int id;
|
int id;
|
||||||
int xa, ya, za;
|
int16_t xa, ya, za;
|
||||||
bool useBytes; // 4J added
|
bool useBytes; // 4J added
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ TeleportEntityPacket::TeleportEntityPacket()
|
||||||
xRot = 0;
|
xRot = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TeleportEntityPacket::TeleportEntityPacket(std::shared_ptr<Entity> e)
|
TeleportEntityPacket::TeleportEntityPacket(std::shared_ptr<Entity> e)
|
||||||
{
|
{
|
||||||
id = e->entityId;
|
id = e->entityId;
|
||||||
x = Mth::floor(e->x * 32);
|
x = Mth::floor(e->x * 32);
|
||||||
|
|
@ -27,7 +27,7 @@ TeleportEntityPacket::TeleportEntityPacket(std::shared_ptr<Entity> e)
|
||||||
xRot = (uint8_t) (e->xRot * 256 / 360);
|
xRot = (uint8_t) (e->xRot * 256 / 360);
|
||||||
}
|
}
|
||||||
|
|
||||||
TeleportEntityPacket::TeleportEntityPacket(int id, int x, int y, int z, uint8_t yRot, uint8_t xRot)
|
TeleportEntityPacket::TeleportEntityPacket(int id, int32_t x, int32_t y, int32_t z, uint8_t yRot, uint8_t xRot)
|
||||||
{
|
{
|
||||||
this->id = id;
|
this->id = id;
|
||||||
this->x = x;
|
this->x = x;
|
||||||
|
|
@ -53,28 +53,22 @@ void TeleportEntityPacket::read(DataInputStream *dis) //throws IOException
|
||||||
xRot = (uint8_t) dis->read();
|
xRot = (uint8_t) dis->read();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeleportEntityPacket::write(DataOutputStream *dos) //throws IOException
|
void TeleportEntityPacket::write(DataOutputStream *dos) //throws IOException
|
||||||
{
|
{
|
||||||
dos->writeShort(id);
|
dos->writeShort((short)id);
|
||||||
#ifdef _LARGE_WORLDS
|
|
||||||
dos->writeInt(x);
|
dos->writeInt(x);
|
||||||
dos->writeInt(y);
|
dos->writeInt(y);
|
||||||
dos->writeInt(z);
|
dos->writeInt(z);
|
||||||
#else
|
|
||||||
dos->writeShort(x);
|
|
||||||
dos->writeShort(y);
|
|
||||||
dos->writeShort(z);
|
|
||||||
#endif
|
|
||||||
dos->write(yRot);
|
dos->write(yRot);
|
||||||
dos->write(xRot);
|
dos->write(xRot);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeleportEntityPacket::handle(PacketListener *listener)
|
void TeleportEntityPacket::handle(PacketListener *listener)
|
||||||
{
|
{
|
||||||
listener->handleTeleportEntity(shared_from_this());
|
listener->handleTeleportEntity(shared_from_this());
|
||||||
}
|
}
|
||||||
|
|
||||||
int TeleportEntityPacket::getEstimatedSize()
|
int TeleportEntityPacket::getEstimatedSize()
|
||||||
{
|
{
|
||||||
return 2 + 2 + 2 + 2 + 1 + 1;
|
return 2 + 2 + 2 + 2 + 1 + 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,19 +7,19 @@ class TeleportEntityPacket : public Packet, public std::enable_shared_from_this<
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int id;
|
int id;
|
||||||
int x, y, z;
|
int32_t x, y, z;
|
||||||
uint8_t yRot, xRot;
|
uint8_t yRot, xRot;
|
||||||
|
|
||||||
TeleportEntityPacket();
|
TeleportEntityPacket();
|
||||||
TeleportEntityPacket(std::shared_ptr<Entity> e);
|
TeleportEntityPacket(std::shared_ptr<Entity> e);
|
||||||
TeleportEntityPacket(int id, int x, int y, int z, uint8_t yRot, uint8_t xRot);
|
TeleportEntityPacket(int id, int32_t x, int32_t y, int32_t z, uint8_t yRot, uint8_t xRot);
|
||||||
|
|
||||||
virtual void read(DataInputStream *dis);
|
virtual void read(DataInputStream *dis);
|
||||||
virtual void write(DataOutputStream *dos);
|
virtual void write(DataOutputStream *dos);
|
||||||
virtual void handle(PacketListener *listener);
|
virtual void handle(PacketListener *listener);
|
||||||
virtual int getEstimatedSize();
|
virtual int getEstimatedSize();
|
||||||
virtual bool canBeInvalidated();
|
virtual bool canBeInvalidated();
|
||||||
virtual bool isInvalidatedBy(std::shared_ptr<Packet> packet);
|
virtual bool isInvalidatedBy(std::shared_ptr<Packet> packet);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static std::shared_ptr<Packet> create() { return std::shared_ptr<Packet>(new TeleportEntityPacket()); }
|
static std::shared_ptr<Packet> create() { return std::shared_ptr<Packet>(new TeleportEntityPacket()); }
|
||||||
|
|
|
||||||
65
flake.nix
65
flake.nix
|
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
description = "4jcraft-nix dev shell";
|
description = "4jcraft-nix package and dev shell";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { nixpkgs, ... }:
|
outputs = { self, nixpkgs, ... }:
|
||||||
let
|
let
|
||||||
allSystems = [
|
allSystems = [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
|
|
@ -19,30 +19,45 @@
|
||||||
});
|
});
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
devShells = forAllSystems ({ pkgs }:
|
packages = forAllSystems ({ pkgs }:
|
||||||
let
|
|
||||||
libs = with pkgs; [
|
|
||||||
openssl.dev
|
|
||||||
libGL
|
|
||||||
libGLU
|
|
||||||
sdl2
|
|
||||||
zlib
|
|
||||||
];
|
|
||||||
packages = with pkgs; [
|
|
||||||
clang
|
|
||||||
lld
|
|
||||||
cmake
|
|
||||||
gnumake
|
|
||||||
meson
|
|
||||||
ninja
|
|
||||||
pkg-config
|
|
||||||
];
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
default = pkgs.mkShell {
|
default = pkgs.clangStdenv.mkDerivation {
|
||||||
LD_LIBRARY_PATH = "/run/opengl-driver/lib";
|
pname = "4jcraft";
|
||||||
buildInputs = libs;
|
version = "0.1.0";
|
||||||
nativeBuildInputs = packages;
|
|
||||||
|
src = ./.;
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
openssl.dev
|
||||||
|
libGL
|
||||||
|
libGLU
|
||||||
|
SDL2
|
||||||
|
zlib
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeBuildInputs = with pkgs; [
|
||||||
|
lld
|
||||||
|
meson
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
python3
|
||||||
|
makeWrapper
|
||||||
|
];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/share/4jcraft
|
||||||
|
cp -r Minecraft.Client/. $out/share/4jcraft/
|
||||||
|
|
||||||
|
mkdir -p $out/bin
|
||||||
|
makeWrapper $out/share/4jcraft/Minecraft.Client \
|
||||||
|
$out/bin/4jcraft \
|
||||||
|
--run "cd $out/share/4jcraft"
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "4JCraft";
|
||||||
|
platforms = pkgs.lib.platforms.linux;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,12 @@ global_cpp_defs = [
|
||||||
'-DDEBUG',
|
'-DDEBUG',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if get_option('enable_vsync')
|
||||||
|
global_cpp_defs += '-DENABLE_VSYNC'
|
||||||
|
message('v-sync enabled')
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
if host_machine.system() == 'linux'
|
if host_machine.system() == 'linux'
|
||||||
global_cpp_defs += [
|
global_cpp_defs += [
|
||||||
'-Dlinux',
|
'-Dlinux',
|
||||||
|
|
|
||||||
4
meson.options
Normal file
4
meson.options
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
option('enable_vsync',
|
||||||
|
type : 'boolean',
|
||||||
|
value : true,
|
||||||
|
description : 'Toggles weather V-Sync will be toggle on or off.')
|
||||||
Loading…
Reference in a new issue