CMake: Refactor build system

This commit is contained in:
Er2
2023-12-04 20:48:45 +03:00
parent d6bf825c11
commit 470291c7e5
36 changed files with 467 additions and 336 deletions

View File

@@ -0,0 +1,243 @@
/********************************************************************
Minecraft: Pocket Edition - Decompilation Project
Copyright (C) 2023 iProgramInCpp
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#include "LocalPlayer.hpp"
#include "client/app/Minecraft.hpp"
int dword_250ADC, dword_250AE0;
LocalPlayer::LocalPlayer(Minecraft* pMinecraft, Level* pLevel, User* pUser, int i) : Player(pLevel)
{
field_BEC = 0;
field_BF0 = 0.0f;
field_BF8 = 0.0f;
field_BFC = 0.0f;
field_C00 = 0.0f;
field_C04 = 0.0f;
field_C08 = 0.0f;
field_C0C = 0.0f;
field_C10 = 0.0f;
field_C14 = 0.0f;
field_C18 = 0.0f;
field_C1C = 0.0f;
m_nAutoJumpFrames = 0;
// multiplayer related
field_C24 = 0.0f;
field_C28 = 0.0f;
field_C2C = 0.0f;
field_C30 = 0.0f;
field_C34 = 0.0f;
// multiplayer related -- end
field_C38 = 0;
m_pMoveInput = nullptr;
m_pMinecraft = pMinecraft;
m_name = pUser->field_0;
field_BC4 = i;
field_C38 = m_pInventory->getSelectedItemId();
}
LocalPlayer::~LocalPlayer()
{
}
void LocalPlayer::aiStep()
{
m_pMoveInput->tick(this);
if (m_pMoveInput->m_bSneakButton && field_A4 < 0.2f)
field_A4 = 0.2f;
Mob::aiStep();
Player::aiStep();
}
void LocalPlayer::animateRespawn()
{
}
void LocalPlayer::calculateFlight(float x, float y, float z)
{
float f1 = m_pMinecraft->getOptions()->field_244;
float x1 = f1 * x;
float z1 = f1 * z;
float y1 = 0.0f;
if (Keyboard::isKeyDown(m_pMinecraft->getOptions()->getKey(KM_FLY_UP)))
y1 = f1 * 0.2f;
if (Keyboard::isKeyDown(m_pMinecraft->getOptions()->getKey(KM_FLY_DOWN)))
y1 = f1 * -0.2f;
field_BFC += x1;
float f2 = m_pMinecraft->getOptions()->field_8 * 0.35f;
float f3 = f2 * (field_BFC - field_C00);
float f4 = field_C04 + 0.5f * (f3 - field_C04);
field_C04 = f4;
if ((f3 <= 0.0f || f3 <= f4) && (f3 >= 0.0f || f3 >= f4))
f4 = f3;
field_C00 += f4;
field_BF0 = f4 * 10.0f;
field_C08 += y1;
float f5 = f2 * (field_C08 - field_C0C);
float f6 = field_C10 + 0.5f * (f5 - field_C10);
field_C10 = f6;
if ((f5 <= 0.0f || f5 <= f6) && (f5 >= 0.0f || f5 >= f6))
f6 = f5;
field_C0C += f6;
field_BF4 = f6 * 10.0f;
field_C14 += z1;
float f7 = f2 * (field_C14 - field_C18);
float f8 = field_C1C + 0.5f * (f7 - field_C1C);
field_C1C = f8;
if ((f7 <= 0.0f || f7 <= f8) && (f7 >= 0.0f || f7 >= f8))
f8 = f7;
field_C18 += f8;
field_BF8 = f8 * 10.0f;
}
void LocalPlayer::closeContainer()
{
Player::closeContainer();
m_pMinecraft->setScreen(nullptr);
}
void LocalPlayer::respawn()
{
m_pMinecraft->respawnPlayer(this);
}
bool LocalPlayer::isSneaking()
{
return m_pMoveInput->m_bSneakButton;
}
int LocalPlayer::move(float x, float y, float z)
{
int result = 0;
LocalPlayer* pLP = m_pMinecraft->m_pLocalPlayer;
if (Minecraft::DEADMAU5_CAMERA_CHEATS && pLP == this && m_pMinecraft->getOptions()->m_bFlyCheat)
{
//@HUH: Using m_pMinecraft->m_pLocalPlayer instead of this, even though they're the same
pLP->m_bNoCollision = true;
float field_94_old = field_94;
pLP->calculateFlight(x, y, z);
pLP->m_distanceFallen = 0.0f;
pLP->m_vel.y = 0.0f;
// This looks very funny.
result = pLP->Entity::move(field_BF0, field_BF4, field_BF8);
pLP->field_7C = true;
field_94 = field_94_old;
}
else
{
#ifndef ORIGINAL_CODE
// @BUG: In the original Minecraft, you can't stop flying! If you do, you'll just fall through to the bottom of the world. :(
pLP->m_bNoCollision = false;
#endif
// autojump stuff
if (m_nAutoJumpFrames > 0)
{
m_nAutoJumpFrames--;
m_pMoveInput->m_bJumpButton = true;
}
float posX = m_pos.x;
float posY = m_pos.y;
result = Entity::move(x, y, z);
//@BUG: backing up posZ too late
float posZ = m_pos.z;
if (m_nAutoJumpFrames <= 0)
{
if (Mth::floor(posX * 2) == Mth::floor(m_pos.x * 2) &&
Mth::floor(posY * 2) == Mth::floor(m_pos.y * 2) &&
Mth::floor(posZ * 2) == Mth::floor(m_pos.z * 2))
return result;
float dist = Mth::sqrt(x * x + z * z);
int x1 = Mth::floor(x / dist + m_pos.x);
int z1 = Mth::floor(z / dist + m_pos.z);
TileID tileOnTop = m_pLevel->getTile(x1, int(m_pos.y - 1.0f), z1);
// not standing on top of a tile?
if (!m_pLevel->isSolidTile(x1, int(m_pos.y - 1.0f), z1))
return 0;
// aren't inside of a tile right now
if (m_pLevel->isSolidTile(x1, int(m_pos.y), z1))
return 0;
// don't have anything on top of us
if (m_pLevel->isSolidTile(x1, int(m_pos.y + 1.0f), z1))
return 1;
// are we trying to walk into stairs or a slab?
if (tileOnTop != Tile::stairs_stone->m_ID && tileOnTop != Tile::stairs_wood->m_ID && tileOnTop != Tile::stoneSlabHalf->m_ID && m_pMinecraft->getOptions()->m_bAutoJump)
// Nope, we're walking towards a full block. Trigger an auto jump.
m_nAutoJumpFrames = 1;
}
}
return result;
}
void LocalPlayer::tick()
{
Player::tick();
if (m_pMinecraft->isOnline())
{
if (fabsf(m_pos.x - field_C24) > 0.1f ||
fabsf(m_pos.y - field_C28) > 0.01f ||
fabsf(m_pos.z - field_C2C) > 0.1f ||
fabsf(field_C30 - m_pitch) > 1.0f ||
fabsf(field_C34 - m_yaw) > 1.0f)
{
m_pMinecraft->m_pRakNetInstance->send(new MovePlayerPacket(m_EntityID, m_pos.x, m_pos.y - field_84, m_pos.z, m_pitch, m_yaw));
field_C24 = m_pos.x;
field_C28 = m_pos.y;
field_C2C = m_pos.z;
field_C30 = m_pitch;
field_C34 = m_yaw;
}
if (field_C38 != m_pInventory->getSelectedItemId())
{
field_C38 = m_pInventory->getSelectedItemId();
m_pMinecraft->m_pRakNetInstance->send(new PlayerEquipmentPacket(m_EntityID, field_C38));
}
}
}
void LocalPlayer::updateAi()
{
Player::updateAi();
field_B00 = m_pMoveInput->m_horzInput;
field_B04 = m_pMoveInput->m_vertInput;
field_B0C = m_pMoveInput->m_bJumpButton || m_nAutoJumpFrames > 0;
}
bool LocalPlayer::isLocalPlayer()
{
return true;
}

View File

@@ -0,0 +1,61 @@
/********************************************************************
Minecraft: Pocket Edition - Decompilation Project
Copyright (C) 2023 iProgramInCpp
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#pragma once
#include "world/entity/Player.hpp"
#include "client/player/input/IMoveInput.hpp"
#include "client/player/input/User.hpp"
class Minecraft;
class LocalPlayer : public Player
{
public:
LocalPlayer(Minecraft*, Level*, User*, int);
virtual ~LocalPlayer();
// TODO: void addAdditonalSaveData();
virtual void animateRespawn() override;
virtual void aiStep() override;
virtual bool isSneaking() override;
virtual int move(float x, float y, float z) override;
virtual void tick() override;
virtual void updateAi() override;
virtual bool isLocalPlayer() override;
void calculateFlight(float, float, float);
void closeContainer(); //@HUH: oddly enough not a virtual/override
void respawn();
public:
int field_BEC;
float field_BF0;
float field_BF4;
float field_BF8;
float field_BFC;
float field_C00;
float field_C04;
float field_C08;
float field_C0C;
float field_C10;
float field_C14;
float field_C18;
float field_C1C;
int m_nAutoJumpFrames;
// multiplayer related
float field_C24;
float field_C28;
float field_C2C;
float field_C30;
float field_C34;
// multiplayer related -- end
int field_C38;
Minecraft* m_pMinecraft;
IMoveInput* m_pMoveInput;
};

View File

@@ -0,0 +1,25 @@
add_library(reminecraftpe-input STATIC
Controller.cpp Controller.hpp
ControllerTurnInput.cpp ControllerTurnInput.hpp
CustomInputHolder.cpp CustomInputHolder.hpp
IBuildInput.cpp IBuildInput.hpp
IInputHolder.cpp IInputHolder.hpp
IMoveInput.cpp IMoveInput.hpp
ITouchScreenModel.cpp ITouchScreenModel.hpp
ITurnInput.cpp ITurnInput.hpp
IncludeExcludeArea.cpp IncludeExcludeArea.hpp
Keyboard.cpp Keyboard.hpp
KeyboardInput.cpp KeyboardInput.hpp
Mouse.cpp Mouse.hpp
MouseDevice.cpp MouseDevice.hpp
MouseHandler.cpp MouseHandler.hpp
MouseTurnInput.cpp MouseTurnInput.hpp
Multitouch.cpp Multitouch.hpp
PolygonArea.cpp PolygonArea.hpp
RectangleArea.cpp RectangleArea.hpp
TouchAreaModel.cpp TouchAreaModel.hpp
TouchInputHolder.cpp TouchInputHolder.hpp
TouchscreenInput_TestFps.cpp TouchscreenInput_TestFps.hpp
UnifiedTurnBuild.cpp UnifiedTurnBuild.hpp
)
target_link_libraries(reminecraftpe-input PRIVATE reminecraftpe-client)