Files
mcpe/source/world/phys/Vec3.hpp
iProgramInCpp 60b21356a1 Integrate touch related development. (#90)
* * Add BuildActionIntention crap

* * Set Client and World projects to use MP compilation

* asd

* * Use the new BuildActionIntention to break and place blocks.

* * Reverse engineer the IArea system.

* * Copy break logic from survival into creative conditionally

* * Reverse IBuildInput and MouseHandler
* Replace the new relative paths in the client project with $(MC_ROOT) again

* * Reverse Multitouch, MouseDevice

* * Reverse a bunch of auxiliary classes for input.

* * Use CustomInputHolder instead of holding inputs manually.

* * Reverse a whole BUNCH of things!

* * Add feedback textures to the gitignore.

* * D-pad now renders! Also loads of other work.

* * More Stuff

* * Finish touch control bug fixing.

* * Finalize work.

* * One last thing..

* * Add a "cramped" mode to the options screen and start menu.

* * Oh, forgot to do something
2023-11-02 00:49:11 +02:00

99 lines
1.9 KiB
C++

/********************************************************************
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 "common/Mth.hpp"
// Needed for when we're missing nullptr in multiple files
#include "common/Utils.hpp"
// NOTE: I don't think that Vec3 was implemented like that - it was
// probably implemented just like in Java. However, I think it looks
// nicer this way :)
class Vec3
{
public:
float x, y, z;
public:
bool clipX(const Vec3& a2, float a3, Vec3& a4) const;
bool clipY(const Vec3& a2, float a3, Vec3& a4) const;
bool clipZ(const Vec3& a2, float a3, Vec3& a4) const;
Vec3 normalize();
// this constructor is nice to have, but it's probably inlined
Vec3();
Vec3(float x, float y, float z);
// these are likely inlined
float distanceTo(const Vec3& b) const;
float distanceToSqr(const Vec3& b) const;
// these are also likely inlined, but I'll declare them in the header
Vec3 operator+(const Vec3& b)
{
return Vec3(x + b.x, y + b.y, z + b.z);
}
Vec3 operator-(const Vec3& b)
{
return Vec3(x - b.x, y - b.y, z - b.z);
}
void operator+=(const Vec3& b)
{
x += b.x;
y += b.y;
z += b.z;
}
void operator-=(const Vec3& b)
{
(*this) += -b;
}
void operator*=(float f)
{
x *= f;
y *= f;
z *= f;
}
Vec3 operator-() const
{
return Vec3(-x, -y, -z);
}
Vec3 operator*(float f) const
{
return Vec3(f * x, f * y, f * z);
}
Vec3 translate(float tx, float ty, float tz) const
{
return Vec3(x + tx, y + ty, z + tz);
}
float lengthSqr() const
{
return x * x + y * y + z * z;
}
float length() const
{
return sqrt(lengthSqr());
}
Vec3 scale(float scale) const
{
return Vec3(x * scale, y * scale, z * scale);
}
};