Skip to content

Commit

Permalink
Some fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
ForserX committed Mar 6, 2025
1 parent beac68e commit 6076978
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 106 deletions.
48 changes: 20 additions & 28 deletions src/Editors/LevelEditor/Editor/Scene/SceneRender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,37 +24,10 @@ void object_StrictB2F_1(EScene::mapObject_Node *N){RENDER_OBJECT(1,true);}
void object_StrictB2F_2(EScene::mapObject_Node *N){RENDER_OBJECT(2,true);}
void object_StrictB2F_3(EScene::mapObject_Node *N){RENDER_OBJECT(3,true);}

#define RENDER_SCENE_TOOLS(P,B)\
{\
SceneMToolsIt s_it = scene_tools.begin();\
SceneMToolsIt s_end = scene_tools.end();\
for (; s_it!=s_end; s_it++){\
EDevice->SetShader (B?EDevice->m_SelectionShader:EDevice->m_WireShader);\
RCache.set_xform_world (Fidentity);\
try{\
(*s_it)->OnRenderRoot(P,B);\
}catch(...){\
ELog.DlgMsg(mtError, "Please notify AlexMX!!! Critical error has occured in render routine!!! [Type B] - Tools: '%s'",(*s_it)->ClassName());\
}\
}\
}

void EScene::RenderSky(const Fmatrix& camera)
{
if( !valid() ) return;

// draw sky
/*
//.
if (m_SkyDome&&fraBottomBar->miDrawSky->Checked){
st_Environment& E = m_LevelOp.m_Envs[m_LevelOp.m_CurEnv];
m_SkyDome->GetPosition() = camera.c;
m_SkyDome->UpdateTransform(true);
EDevice->SetRS(D3DRS_TEXTUREFACTOR, E.m_SkyColor.get());
m_SkyDome->RenderSingle();
EDevice->SetRS(D3DRS_TEXTUREFACTOR, 0xffffffff);
}
*/
}

struct tools_rp_pred
Expand Down Expand Up @@ -110,7 +83,26 @@ void EScene::Render( const Fmatrix& camera )
}
}
}


auto RENDER_SCENE_TOOLS = [scene_tools](int P, bool B)
{
SceneMToolsIt s_it = scene_tools.begin();
SceneMToolsIt s_end = scene_tools.end();
for (; s_it != s_end; s_it++)
{
EDevice->SetShader(B ? EDevice->m_SelectionShader : EDevice->m_WireShader);
RCache.set_xform_world(Fidentity);
try
{
(*s_it)->OnRenderRoot(P, B);
}
catch (...)
{
ELog.DlgMsg(mtError, "Please notify AlexMX!!! Critical error has occured in render routine!!! [Type B] - Tools: '%s'", (*s_it)->ClassName()); \
}
}
};

// priority #0
// normal
mapRenderObjects.traverseLR (object_Normal_0);
Expand Down
13 changes: 13 additions & 0 deletions src/Editors/LevelEditor/Editor/Tools/Light/ESceneLightTools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,19 @@ void ESceneLightTool::OnRender(int priority, bool strictB2F)
{
inherited::OnRender(priority, strictB2F);

if (bIsShowSun)
m_Flags.set(flShowSun, true);
else
m_Flags.set(flShowSun, false);
if (bIsUseSunDir)
m_Flags.set(flWthrSunDir, true);
else
m_Flags.set(flWthrSunDir, false);
if (bIsUseHemi)
m_Flags.set(flWthrHemi, true);
else
m_Flags.set(flWthrHemi, false);

if (m_Flags.is(flShowSun))
{
if ((true == strictB2F) && (1 == priority)) {
Expand Down
18 changes: 7 additions & 11 deletions src/Editors/LevelEditor/Editor/UI_LevelTools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -375,22 +375,18 @@ void CLevelTool::ZoomObject(BOOL bSelectedOnly)

void CLevelTool::GetCurrentFog(u32& fog_color, float& s_fog, float& e_fog)
{

if (psDeviceFlags.is(rsEnvironment)&&psDeviceFlags.is(rsFog)||UI->IsPlayInEditor())
if (psDeviceFlags.is(rsEnvironment) && psDeviceFlags.is(rsFog) || UI->IsPlayInEditor())
{
s_fog = g_pGamePersistent->Environment().CurrentEnv->fog_near;
e_fog = g_pGamePersistent->Environment().CurrentEnv->fog_far;
Fvector& f_clr = g_pGamePersistent->Environment().CurrentEnv->fog_color;
fog_color = color_rgba_f(f_clr.x,f_clr.y,f_clr.z,1.f);
s_fog = g_pGamePersistent->Environment().CurrentEnv->fog_near;
e_fog = g_pGamePersistent->Environment().CurrentEnv->fog_far;
Fvector& f_clr = g_pGamePersistent->Environment().CurrentEnv->fog_color;
fog_color = color_rgba_f(f_clr.x, f_clr.y, f_clr.z, 1.f);
}
else
{

s_fog = psDeviceFlags.is(rsFog)?(1.0f - fFogness)* 0.85f * UI->ZFar():0.99f*UI->ZFar();
e_fog = psDeviceFlags.is(rsFog)?0.91f * UI->ZFar():UI->ZFar();

s_fog = psDeviceFlags.is(rsFog) ? (1.0f - fFogness) * 0.85f * UI->ZFar() : 0.99f * UI->ZFar();
e_fog = psDeviceFlags.is(rsFog) ? 0.91f * UI->ZFar() : UI->ZFar();
}

}


Expand Down
13 changes: 8 additions & 5 deletions src/Editors/xrECore/Editor/EditorPreferences.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -333,12 +333,15 @@ void CCustomPreferences::Load()
scene_recent_list.push_back(fn.c_str());
}
}
// Weather
env_from_time = JSONData["editor_prefs"]["env_from_time"];
env_to_time = JSONData["editor_prefs"]["env_to_time"];
env_speed = JSONData["editor_prefs"]["env_speed"];
sWeather = ((std::string)(JSONData["editor_prefs"]["weather"])).c_str();
// Weather
if (JSONData["editor_prefs"].contains("env_from_time"))
{
env_from_time = JSONData["editor_prefs"]["env_from_time"];
env_to_time = JSONData["editor_prefs"]["env_to_time"];
env_speed = JSONData["editor_prefs"]["env_speed"];
}

sWeather = ((std::string)(JSONData["editor_prefs"]["weather"])).c_str();
if (JSONData["ContentBrowser"].contains("file_custom_icon"))
{
custom_icons = JSONData["ContentBrowser"]["file_custom_icon"].get<std::map<std::string, std::string>>();
Expand Down
43 changes: 38 additions & 5 deletions src/Editors/xrECore/Editor/UIWeatherPropForm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,45 @@ void UIWeatherPropForm::Draw()
float time_factor = g_pGameLevel ? g_pGameLevel->GetEnvironmentTimeFactor() : env.fTimeFactor;
ImVec2 sizeImage = ImVec2(454.0f, 250.0f); // Размер изображения, которое мы хотим сделать видимым
ImVec2 sizeButton = ImVec2(100.0f, 22.0f); // Размер кнопки, которое мы хотим сделать видимым

// --------------------------------------------------------------------------------------------
// Картинка
{
{
ImVec2 image_pos = ImGui::GetCursorScreenPos();
m_weather_properties->Load();
ImGui::SameLine(0, 0);
ImGui::Image(m_weather_properties->surface_get(), ImVec2(sizeImage));
ImGui::Image(m_weather_properties->pSurface, ImVec2(sizeImage));

// Переводим секунды в часы (0-24)
float hours = std::fmod(time / 3600.0f, 24.0f);

// Диапазон ночи
float alpha = 0.0f;
if (hours >= 18.0f)
{
alpha = (hours - 18.0f) / 4.0f;
}
else if (hours <= 6.0f)
{
alpha = 1.0f - (hours / 6.0f);
}

// Корректируем диапазон (0 - 1)
alpha = std::clamp(alpha, 0.0f, 0.85f);

// Конвертируем в диапазон 0 - 255
int alpha_int = static_cast<int>(alpha * 255.0f);

// Накладываем затемнение (если есть)
if (alpha_int > 0)
{
ImDrawList* draw_list = ImGui::GetWindowDrawList();
draw_list->AddRectFilled(
image_pos,
ImVec2(image_pos.x + sizeImage.x, image_pos.y + sizeImage.y),
ImColor(0, 0, 0, alpha_int)
);
}
}
// --------------------------------------------------------------------------------------------
ImGui::BeginChild("Center", ImVec2(455, 575), true);
Expand All @@ -54,9 +87,9 @@ void UIWeatherPropForm::Draw()
ImGui::TextColored(ImVec4(0, 1, 1, 0.7), titleTime);
// --------------------------------------------------------------------------------------------
if (ImGui::CollapsingHeader("Environment time", ImGuiTreeNodeFlags_DefaultOpen))
{
u32 hours, minutes, seconds;
env.SplitTime(time, hours, minutes, seconds);
{
u32 hours, minutes, seconds;
env.SplitTime(time, hours, minutes, seconds);

string128 temp;
xr_sprintf(temp, "Current time: %02d:%02d:%02d###environment_time", hours, minutes, seconds);
Expand Down
8 changes: 7 additions & 1 deletion src/utils/ETools/xrXRC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,10 @@

#include "xrXRC.h"

ENGINE_API xrXRC XRC;
thread_local CDB::COLLIDER CL;
ENGINE_API xrXRC XRC;

IC CDB::COLLIDER* xrXRC::collider()
{
return &CL;
}
97 changes: 42 additions & 55 deletions src/utils/ETools/xrXRC.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,85 +2,72 @@
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_XRXRC_H__9AA25268_621F_4FCA_BD75_AF2E9822B8E3__INCLUDED_)
#define AFX_XRXRC_H__9AA25268_621F_4FCA_BD75_AF2E9822B8E3__INCLUDED_
#pragma once

#include "../../xrCDB/xrCDB.h"

class ENGINE_API xrXRC
#ifndef ETOOLS_API
# ifdef ETOOLS_EXPORTS
# define ETOOLS_API __declspec( dllexport )
# else
# define ETOOLS_API __declspec( dllimport )
# endif
#endif

class ETOOLS_API xrXRC
{
CDB::COLLIDER CL;
public:
IC CDB::COLLIDER* collider (){return &CL;}
IC void ray_options (DWORD f)
IC CDB::COLLIDER* collider();
IC void ray_options(DWORD f)
{
CL.ray_options(f);
collider()->ray_options(f);
}
IC void ray_query (const CDB::MODEL *m_def, const Fvector& r_start, const Fvector& r_dir, float r_range)

IC void ray_query(const CDB::MODEL* m_def, const Fvector& r_start, const Fvector& r_dir, float r_range)
{
#ifndef NO_XRC_STATS
Device.Statistic->clRAY.Begin();
#endif
CL.ray_query(m_def,r_start,r_dir,r_range);
#ifndef NO_XRC_STATS
Device.Statistic->clRAY.End ();
#endif
collider()->ray_query(m_def, r_start, r_dir, r_range);
}
IC void ray_query (const Fmatrix& inv_parent, const CDB::MODEL *m_def, const Fvector& r_start, const Fvector& r_dir, float r_range)
IC void ray_query(const Fmatrix& inv_parent, const CDB::MODEL* m_def, const Fvector& r_start, const Fvector& r_dir, float r_range)
{
// transform
Fvector S,D;
inv_parent.transform_tiny (S,r_start);
inv_parent.transform_dir (D,r_dir);
ray_query (m_def,S,D,r_range);
// transform
Fvector S, D;
inv_parent.transform_tiny(S, r_start);
inv_parent.transform_dir(D, r_dir);
ray_query(m_def, S, D, r_range);
}

IC void box_options (DWORD f)
IC void box_options(DWORD f)
{
CL.box_options(f);
collider()->box_options(f);
}
IC void box_query (const CDB::MODEL *m_def, const Fvector& b_center, const Fvector& b_dim)
IC void box_query(const CDB::MODEL* m_def, const Fvector& b_center, const Fvector& b_dim)
{
#ifndef NO_XRC_STATS
Device.Statistic->clBOX.Begin();
#endif
CL.box_query(m_def,b_center,b_dim);
#ifndef NO_XRC_STATS
Device.Statistic->clBOX.End ();
#endif
collider()->box_query(m_def, b_center, b_dim);
}
IC void box_query (const Fmatrix& inv_parent, const CDB::MODEL *m_def, const Fbox& src)
IC void box_query(const Fmatrix& inv_parent, const CDB::MODEL* m_def, const Fbox& src)
{
Fbox dest;
dest.xform(src,inv_parent);
Fvector c,d;
dest.getcenter(c);
dest.getradius(d);
box_query(m_def,c,d);
Fbox dest;
dest.xform(src, inv_parent);
Fvector c, d;
dest.getcenter(c);
dest.getradius(d);
box_query(m_def, c, d);
}

IC void frustum_options (DWORD f)
IC void frustum_options(DWORD f)
{
CL.frustum_options(f);
collider()->frustum_options(f);
}
IC void frustum_query (const CDB::MODEL *m_def, const CFrustum& F)
IC void frustum_query(const CDB::MODEL* m_def, const CFrustum& F)
{
#ifndef NO_XRC_STATS
Device.Statistic->clFRUSTUM.Begin();
#endif
CL.frustum_query(m_def,F);
#ifndef NO_XRC_STATS
Device.Statistic->clFRUSTUM.End ();
#endif
collider()->frustum_query(m_def, F);
}

IC CDB::RESULT* r_begin () { return CL.r_begin(); };
IC CDB::RESULT* r_end () { return CL.r_end(); };
IC void r_free () { CL.r_free(); }
IC int r_count () { return CL.r_count(); };
IC void r_clear () { CL.r_clear(); };
IC CDB::RESULT* r_begin() { return collider()->r_begin(); };
IC CDB::RESULT* r_end() { return collider()->r_end(); };
IC void r_free() { collider()->r_free(); }
IC int r_count() { return collider()->r_count(); };
IC void r_clear() { collider()->r_clear(); };
};
ENGINE_API extern xrXRC XRC;

#endif // !defined(AFX_XRXRC_H__9AA25268_621F_4FCA_BD75_AF2E9822B8E3__INCLUDED_)
ENGINE_API extern xrXRC XRC;
2 changes: 1 addition & 1 deletion src/xrEngine/Environment_render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ void CEnvironment::RenderClouds ()

void CEnvironment::RenderFlares()
{
if (0 == g_pGameLevel)
if (0 == g_pGameLevel && !Device.IsEditorMode())
return;

// 1
Expand Down

0 comments on commit 6076978

Please sign in to comment.