mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
parent
6ef7ad09bb
commit
36d35f2fe3
@ -79,7 +79,7 @@ core.register_on_item_use(function(itemstack, pointed_thing)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
local pos = vector.add(core.localplayer:get_pos(), core.camera:get_offset())
|
local pos = core.camera:get_pos()
|
||||||
local pos2 = vector.add(pos, vector.multiply(core.camera:get_look_dir(), 100))
|
local pos2 = vector.add(pos, vector.multiply(core.camera:get_look_dir(), 100))
|
||||||
|
|
||||||
local rc = core.raycast(pos, pos2)
|
local rc = core.raycast(pos, pos2)
|
||||||
|
@ -967,7 +967,7 @@ Please do not try to access the reference until the camera is initialized, other
|
|||||||
* `get_camera_mode()`
|
* `get_camera_mode()`
|
||||||
* Returns 0, 1, or 2 as described above
|
* Returns 0, 1, or 2 as described above
|
||||||
* `get_fov()`
|
* `get_fov()`
|
||||||
* Returns:
|
* Returns a table with X, Y, maximum and actual FOV in degrees:
|
||||||
|
|
||||||
```lua
|
```lua
|
||||||
{
|
{
|
||||||
|
@ -540,7 +540,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
|
|||||||
m_aspect = (f32) window_size.X / (f32) window_size.Y;
|
m_aspect = (f32) window_size.X / (f32) window_size.Y;
|
||||||
m_fov_y = m_curr_fov_degrees * M_PI / 180.0;
|
m_fov_y = m_curr_fov_degrees * M_PI / 180.0;
|
||||||
// Increase vertical FOV on lower aspect ratios (<16:10)
|
// Increase vertical FOV on lower aspect ratios (<16:10)
|
||||||
m_fov_y *= MYMAX(1.0, MYMIN(1.4, sqrt(16./10. / m_aspect)));
|
m_fov_y *= core::clamp(sqrt(16./10. / m_aspect), 1.0, 1.4);
|
||||||
m_fov_x = 2 * atan(m_aspect * tan(0.5 * m_fov_y));
|
m_fov_x = 2 * atan(m_aspect * tan(0.5 * m_fov_y));
|
||||||
m_cameranode->setAspectRatio(m_aspect);
|
m_cameranode->setAspectRatio(m_aspect);
|
||||||
m_cameranode->setFOV(m_fov_y);
|
m_cameranode->setFOV(m_fov_y);
|
||||||
|
@ -51,6 +51,7 @@ void LuaCamera::create(lua_State *L, Camera *m)
|
|||||||
lua_setfield(L, objectstable, "camera");
|
lua_setfield(L, objectstable, "camera");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set_camera_mode(self, mode)
|
||||||
int LuaCamera::l_set_camera_mode(lua_State *L)
|
int LuaCamera::l_set_camera_mode(lua_State *L)
|
||||||
{
|
{
|
||||||
Camera *camera = getobject(L, 1);
|
Camera *camera = getobject(L, 1);
|
||||||
@ -67,17 +68,19 @@ int LuaCamera::l_set_camera_mode(lua_State *L)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_camera_mode(self)
|
||||||
int LuaCamera::l_get_camera_mode(lua_State *L)
|
int LuaCamera::l_get_camera_mode(lua_State *L)
|
||||||
{
|
{
|
||||||
Camera *camera = getobject(L, 1);
|
Camera *camera = getobject(L, 1);
|
||||||
if (!camera)
|
if (!camera)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
lua_pushnumber(L, (int)camera->getCameraMode());
|
lua_pushinteger(L, (int)camera->getCameraMode());
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_fov(self)
|
||||||
int LuaCamera::l_get_fov(lua_State *L)
|
int LuaCamera::l_get_fov(lua_State *L)
|
||||||
{
|
{
|
||||||
Camera *camera = getobject(L, 1);
|
Camera *camera = getobject(L, 1);
|
||||||
@ -85,9 +88,9 @@ int LuaCamera::l_get_fov(lua_State *L)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
lua_pushnumber(L, camera->getFovX() * core::DEGTORAD);
|
lua_pushnumber(L, camera->getFovX() * core::RADTODEG);
|
||||||
lua_setfield(L, -2, "x");
|
lua_setfield(L, -2, "x");
|
||||||
lua_pushnumber(L, camera->getFovY() * core::DEGTORAD);
|
lua_pushnumber(L, camera->getFovY() * core::RADTODEG);
|
||||||
lua_setfield(L, -2, "y");
|
lua_setfield(L, -2, "y");
|
||||||
lua_pushnumber(L, camera->getCameraNode()->getFOV() * core::RADTODEG);
|
lua_pushnumber(L, camera->getCameraNode()->getFOV() * core::RADTODEG);
|
||||||
lua_setfield(L, -2, "actual");
|
lua_setfield(L, -2, "actual");
|
||||||
@ -96,16 +99,18 @@ int LuaCamera::l_get_fov(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_pos(self)
|
||||||
int LuaCamera::l_get_pos(lua_State *L)
|
int LuaCamera::l_get_pos(lua_State *L)
|
||||||
{
|
{
|
||||||
Camera *camera = getobject(L, 1);
|
Camera *camera = getobject(L, 1);
|
||||||
if (!camera)
|
if (!camera)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
push_v3f(L, camera->getPosition());
|
push_v3f(L, camera->getPosition() / BS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_offset(self)
|
||||||
int LuaCamera::l_get_offset(lua_State *L)
|
int LuaCamera::l_get_offset(lua_State *L)
|
||||||
{
|
{
|
||||||
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
|
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
|
||||||
@ -115,38 +120,40 @@ int LuaCamera::l_get_offset(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_look_dir(self)
|
||||||
int LuaCamera::l_get_look_dir(lua_State *L)
|
int LuaCamera::l_get_look_dir(lua_State *L)
|
||||||
{
|
{
|
||||||
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
|
Camera *camera = getobject(L, 1);
|
||||||
sanity_check(player);
|
if (!camera)
|
||||||
|
return 0;
|
||||||
|
|
||||||
float pitch = -1.0 * player->getPitch() * core::DEGTORAD;
|
push_v3f(L, camera->getDirection());
|
||||||
float yaw = (player->getYaw() + 90.) * core::DEGTORAD;
|
|
||||||
v3f v(std::cos(pitch) * std::cos(yaw), std::sin(pitch),
|
|
||||||
std::cos(pitch) * std::sin(yaw));
|
|
||||||
|
|
||||||
push_v3f(L, v);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_look_horizontal(self)
|
||||||
|
// FIXME: wouldn't localplayer be a better place for this?
|
||||||
int LuaCamera::l_get_look_horizontal(lua_State *L)
|
int LuaCamera::l_get_look_horizontal(lua_State *L)
|
||||||
{
|
{
|
||||||
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
|
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
|
||||||
sanity_check(player);
|
sanity_check(player);
|
||||||
|
|
||||||
lua_pushnumber(L, (player->getYaw() + 90.) * core::DEGTORAD);
|
lua_pushnumber(L, (player->getYaw() + 90.f) * core::DEGTORAD);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_look_vertical(self)
|
||||||
|
// FIXME: wouldn't localplayer be a better place for this?
|
||||||
int LuaCamera::l_get_look_vertical(lua_State *L)
|
int LuaCamera::l_get_look_vertical(lua_State *L)
|
||||||
{
|
{
|
||||||
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
|
LocalPlayer *player = getClient(L)->getEnv().getLocalPlayer();
|
||||||
sanity_check(player);
|
sanity_check(player);
|
||||||
|
|
||||||
lua_pushnumber(L, -1.0 * player->getPitch() * core::DEGTORAD);
|
lua_pushnumber(L, -1.0f * player->getPitch() * core::DEGTORAD);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_aspect_ratio(self)
|
||||||
int LuaCamera::l_get_aspect_ratio(lua_State *L)
|
int LuaCamera::l_get_aspect_ratio(lua_State *L)
|
||||||
{
|
{
|
||||||
Camera *camera = getobject(L, 1);
|
Camera *camera = getobject(L, 1);
|
||||||
@ -215,13 +222,19 @@ void LuaCamera::Register(lua_State *L)
|
|||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
const char LuaCamera::className[] = "Camera";
|
const char LuaCamera::className[] = "Camera";
|
||||||
const luaL_Reg LuaCamera::methods[] = {luamethod(LuaCamera, set_camera_mode),
|
const luaL_Reg LuaCamera::methods[] = {
|
||||||
luamethod(LuaCamera, get_camera_mode), luamethod(LuaCamera, get_fov),
|
luamethod(LuaCamera, set_camera_mode),
|
||||||
luamethod(LuaCamera, get_pos), luamethod(LuaCamera, get_offset),
|
luamethod(LuaCamera, get_camera_mode),
|
||||||
|
luamethod(LuaCamera, get_fov),
|
||||||
|
luamethod(LuaCamera, get_pos),
|
||||||
|
luamethod(LuaCamera, get_offset),
|
||||||
luamethod(LuaCamera, get_look_dir),
|
luamethod(LuaCamera, get_look_dir),
|
||||||
luamethod(LuaCamera, get_look_vertical),
|
luamethod(LuaCamera, get_look_vertical),
|
||||||
luamethod(LuaCamera, get_look_horizontal),
|
luamethod(LuaCamera, get_look_horizontal),
|
||||||
luamethod(LuaCamera, get_aspect_ratio),
|
luamethod(LuaCamera, get_aspect_ratio),
|
||||||
|
|
||||||
{0, 0}};
|
{0, 0}
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
@ -780,8 +780,8 @@ int ModApiEnvMod::l_find_node_near(lua_State *L)
|
|||||||
|
|
||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
// Client API limitations
|
// Client API limitations
|
||||||
if (getClient(L))
|
if (Client *client = getClient(L))
|
||||||
radius = getClient(L)->CSMClampRadius(pos, radius);
|
radius = client->CSMClampRadius(pos, radius);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (int d = start_radius; d <= radius; d++) {
|
for (int d = start_radius; d <= radius; d++) {
|
||||||
@ -811,9 +811,9 @@ int ModApiEnvMod::l_find_nodes_in_area(lua_State *L)
|
|||||||
const NodeDefManager *ndef = env->getGameDef()->ndef();
|
const NodeDefManager *ndef = env->getGameDef()->ndef();
|
||||||
|
|
||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
if (getClient(L)) {
|
if (Client *client = getClient(L)) {
|
||||||
minp = getClient(L)->CSMClampPos(minp);
|
minp = client->CSMClampPos(minp);
|
||||||
maxp = getClient(L)->CSMClampPos(maxp);
|
maxp = client->CSMClampPos(maxp);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -887,9 +887,9 @@ int ModApiEnvMod::l_find_nodes_in_area_under_air(lua_State *L)
|
|||||||
const NodeDefManager *ndef = env->getGameDef()->ndef();
|
const NodeDefManager *ndef = env->getGameDef()->ndef();
|
||||||
|
|
||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
if (getClient(L)) {
|
if (Client *client = getClient(L)) {
|
||||||
minp = getClient(L)->CSMClampPos(minp);
|
minp = client->CSMClampPos(minp);
|
||||||
maxp = getClient(L)->CSMClampPos(maxp);
|
maxp = client->CSMClampPos(maxp);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user