mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
update collision renderer for jak 2 (#2508)
Doesn't actually do anything in Jak 2 because the collide mesh isn't extracted, but the functionality is all there. Also updated the renderer a bit to keep the colors more readable.
This commit is contained in:
parent
40c30cc0ab
commit
50d93a3f79
|
@ -718,7 +718,7 @@ void update_proto_info(std::vector<TieProtoInfo>* out,
|
|||
}
|
||||
}
|
||||
|
||||
if (version > GameVersion::Jak1) {
|
||||
if (proto.has_envmap_shader && version > GameVersion::Jak1) {
|
||||
frag_info.envmap_tint_color = jak2_tint_color;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,12 +2,96 @@
|
|||
|
||||
#include "game/graphics/opengl_renderer/background/background_common.h"
|
||||
|
||||
CollideMeshRenderer::CollideMeshRenderer() {
|
||||
float material_colors_jak1[23 * 3] = {
|
||||
1.0f, 0.7f, 1.0f, // 0, stone
|
||||
0.1f, 2.0f, 2.0f, // 1, ice
|
||||
0.75f, 0.25f, 0.1f, // 2, quicksand
|
||||
0.1f, 0.25f, 0.75f, // 3, waterbottom
|
||||
0.5f, 0.15f, 0.1f, // 4, tar
|
||||
2.0f, 1.5f, 0.5f, // 5, sand
|
||||
1.5f, 0.75f, 0.1f, // 6, wood
|
||||
0.1f, 1.35f, 0.1f, // 7, grass
|
||||
1.7f, 1.3f, 0.1f, // 8, pcmetal
|
||||
1.8f, 1.8f, 1.8f, // 9, snow
|
||||
1.5f, 0.2f, 1.0f, // 10, deepsnow
|
||||
1.2f, 0.5f, 0.3f, // 11, hotcoals
|
||||
1.4f, 0.1f, 0.1f, // 12, lava
|
||||
0.8f, 0.3f, 0.1f, // 13, crwood
|
||||
1.0f, 0.4f, 1.0f, // 14, gravel
|
||||
1.5f, 0.5f, 0.15f, // 15, dirt
|
||||
0.7f, 0.7f, 1.0f, // 16, metal
|
||||
0.1f, 0.1f, 1.2f, // 17, straw
|
||||
0.75f, 1.75f, 0.75f, // 18, tube
|
||||
0.4f, 0.1f, 0.8f, // 19, swamp
|
||||
0.1f, 0.4f, 0.8f, // 20, stopproj
|
||||
1.9f, 0.1f, 1.9f, // 21, rotate
|
||||
1.0f, 1.0f, 1.0f, // 22, neutral
|
||||
};
|
||||
|
||||
float event_colors_jak1[7 * 3] = {
|
||||
1.0f, 1.0f, 1.0f, // 0, none
|
||||
0.2f, 1.0f, 1.0f, // 1, deadly
|
||||
0.1f, 1.0f, 0.1f, // 2, endlessfall
|
||||
1.0f, 1.0f, 0.1f, // 3, burn
|
||||
0.1f, 0.1f, 1.0f, // 4, deadlyup
|
||||
1.0f, 0.1f, 0.5f, // 5, burnup
|
||||
1.0f, 0.1f, 0.1f, // 6, melt
|
||||
};
|
||||
|
||||
float mode_colors_jak1[3 * 3] = {
|
||||
1.25f, 0.1f, 0.1f, // 0, ground
|
||||
0.1f, 0.1f, 1.0f, // 1, wall
|
||||
1.0f, 0.1f, 1.0f, // 2, obstacle
|
||||
};
|
||||
|
||||
CollideMeshRenderer::CollideMeshRenderer(GameVersion version) {
|
||||
glGenVertexArrays(1, &m_vao);
|
||||
glGenBuffers(1, &m_ubo);
|
||||
|
||||
init_pat_colors(version);
|
||||
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, m_ubo);
|
||||
glBufferData(GL_UNIFORM_BUFFER, sizeof(m_colors), &m_colors, GL_DYNAMIC_DRAW);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, 0);
|
||||
}
|
||||
|
||||
CollideMeshRenderer::~CollideMeshRenderer() {
|
||||
glDeleteVertexArrays(1, &m_vao);
|
||||
glDeleteBuffers(1, &m_ubo);
|
||||
}
|
||||
|
||||
void CollideMeshRenderer::init_pat_colors(GameVersion version) {
|
||||
for (int i = 0; i < 0x8; ++i) {
|
||||
m_colors.pat_mode_colors[i].x() = -1.f;
|
||||
m_colors.pat_mode_colors[i].y() = -1.f;
|
||||
m_colors.pat_mode_colors[i].z() = -1.f;
|
||||
}
|
||||
for (int i = 0; i < 0x40; ++i) {
|
||||
m_colors.pat_material_colors[i].x() = -1.f;
|
||||
m_colors.pat_material_colors[i].y() = -1.f;
|
||||
m_colors.pat_material_colors[i].z() = -1.f;
|
||||
}
|
||||
for (int i = 0; i < 0x40; ++i) {
|
||||
m_colors.pat_event_colors[i].x() = -1.f;
|
||||
m_colors.pat_event_colors[i].y() = -1.f;
|
||||
m_colors.pat_event_colors[i].z() = -1.f;
|
||||
}
|
||||
|
||||
switch (version) {
|
||||
case GameVersion::Jak1:
|
||||
for (int i = 0; i < 23 * 3; ++i) {
|
||||
m_colors.pat_material_colors[i / 3].data()[i % 3] = material_colors_jak1[i];
|
||||
}
|
||||
for (int i = 0; i < 7 * 3; ++i) {
|
||||
m_colors.pat_event_colors[i / 3].data()[i % 3] = event_colors_jak1[i];
|
||||
}
|
||||
for (int i = 0; i < 3 * 3; ++i) {
|
||||
m_colors.pat_mode_colors[i / 3].data()[i % 3] = mode_colors_jak1[i];
|
||||
}
|
||||
break;
|
||||
case GameVersion::Jak2:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CollideMeshRenderer::render(SharedRenderState* render_state, ScopedProfilerNode& prof) {
|
||||
|
@ -31,6 +115,20 @@ void CollideMeshRenderer::render(SharedRenderState* render_state, ScopedProfiler
|
|||
settings.planes[i] = render_state->camera_planes[i];
|
||||
}
|
||||
auto shader = render_state->shaders[ShaderId::COLLISION].id();
|
||||
// Get a free binding point
|
||||
GLuint bind_loc = 0;
|
||||
GLint bind_max;
|
||||
glGetIntegerv(GL_MAX_UNIFORM_BUFFER_BINDINGS, &bind_max);
|
||||
for (int i = 0; i < bind_max; i++) {
|
||||
GLint params;
|
||||
glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, i, ¶ms);
|
||||
if (params == 0) {
|
||||
bind_loc = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
glUniformBlockBinding(shader, glGetUniformBlockIndex(shader, "PatColors"), bind_loc);
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, bind_loc, m_ubo);
|
||||
glUniformMatrix4fv(glGetUniformLocation(shader, "camera"), 1, GL_FALSE,
|
||||
settings.math_camera.data());
|
||||
glUniform4f(glGetUniformLocation(shader, "hvdf_offset"), settings.hvdf_offset[0],
|
||||
|
@ -41,6 +139,7 @@ void CollideMeshRenderer::render(SharedRenderState* render_state, ScopedProfiler
|
|||
glUniform1f(glGetUniformLocation(shader, "fog_constant"), settings.fog.x());
|
||||
glUniform1f(glGetUniformLocation(shader, "fog_min"), settings.fog.y());
|
||||
glUniform1f(glGetUniformLocation(shader, "fog_max"), settings.fog.z());
|
||||
glUniform1i(glGetUniformLocation(shader, "version"), (GLint)render_state->version);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_GEQUAL);
|
||||
glEnable(GL_BLEND);
|
||||
|
|
|
@ -1,12 +1,25 @@
|
|||
#pragma once
|
||||
#include "common/versions.h"
|
||||
|
||||
#include "game/graphics/opengl_renderer/BucketRenderer.h"
|
||||
|
||||
struct PatColors {
|
||||
math::Vector4f pat_mode_colors[0x8];
|
||||
math::Vector4f pat_material_colors[0x40];
|
||||
math::Vector4f pat_event_colors[0x40];
|
||||
};
|
||||
|
||||
class CollideMeshRenderer {
|
||||
public:
|
||||
CollideMeshRenderer();
|
||||
CollideMeshRenderer(GameVersion version);
|
||||
void render(SharedRenderState* render_state, ScopedProfilerNode& prof);
|
||||
~CollideMeshRenderer();
|
||||
|
||||
private:
|
||||
void init_pat_colors(GameVersion version);
|
||||
|
||||
GLuint m_vao;
|
||||
GLuint m_ubo;
|
||||
|
||||
PatColors m_colors;
|
||||
};
|
||||
|
|
|
@ -46,7 +46,8 @@ void GLAPIENTRY opengl_error_callback(GLenum source,
|
|||
const GLchar* message,
|
||||
const void* /*userParam*/) {
|
||||
if (severity == GL_DEBUG_SEVERITY_NOTIFICATION) {
|
||||
lg::debug("OpenGL notification 0x{:X} S{:X} T{:X}: {}", id, source, type, message);
|
||||
lg::debug("[{}] OpenGL notification 0x{:X} S{:X} T{:X}: {}", g_current_render, id, source, type,
|
||||
message);
|
||||
} else if (severity == GL_DEBUG_SEVERITY_LOW) {
|
||||
lg::info("[{}] OpenGL message 0x{:X} S{:X} T{:X}: {}", g_current_render, id, source, type,
|
||||
message);
|
||||
|
@ -63,7 +64,9 @@ void GLAPIENTRY opengl_error_callback(GLenum source,
|
|||
OpenGLRenderer::OpenGLRenderer(std::shared_ptr<TexturePool> texture_pool,
|
||||
std::shared_ptr<Loader> loader,
|
||||
GameVersion version)
|
||||
: m_render_state(texture_pool, loader, version), m_version(version) {
|
||||
: m_render_state(texture_pool, loader, version),
|
||||
m_collide_renderer(version),
|
||||
m_version(version) {
|
||||
// setup OpenGL errors
|
||||
glEnable(GL_DEBUG_OUTPUT);
|
||||
glDebugMessageCallback(opengl_error_callback, nullptr);
|
||||
|
@ -926,6 +929,13 @@ void OpenGLRenderer::dispatch_buckets_jak2(DmaFollower dma,
|
|||
m_render_state.next_bucket += 16;
|
||||
vif_interrupt_callback(bucket_id + 1);
|
||||
m_category_times[(int)m_bucket_categories[bucket_id]] += bucket_prof.get_elapsed_time();
|
||||
|
||||
// hack to draw the collision mesh in the middle the drawing
|
||||
if (bucket_id + 1 == (int)jak2::BucketId::TEX_L0_ALPHA &&
|
||||
Gfx::g_global_settings.collision_enable) {
|
||||
auto p = prof.make_scoped_child("collision-draw");
|
||||
m_collide_renderer.render(&m_render_state, p);
|
||||
}
|
||||
}
|
||||
vif_interrupt_callback(m_bucket_renderers.size());
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ uniform float fog_min;
|
|||
uniform float fog_max;
|
||||
uniform int wireframe;
|
||||
uniform int mode;
|
||||
uniform int version;
|
||||
|
||||
out vec4 fragment_color;
|
||||
|
||||
|
@ -29,13 +30,19 @@ const int MODE_MODE = 1;
|
|||
const int MODE_EVENT = 2;
|
||||
const int MODE_MATERIAL = 3;
|
||||
|
||||
uint pat_get_mode(uint p) { return (p >> 3) & 0x7; }
|
||||
uint pat_get_material(uint p) { return (p >> 6) & 0x3f; }
|
||||
uint pat_get_event(uint p) { return (p >> 14) & 0x3f; }
|
||||
uint pat_get_mode(uint p) { return version == 2 ? (p >> 7) & 0x7 : (p >> 3) & 0x7; }
|
||||
uint pat_get_material(uint p) { return version == 2 ? (p >> 10) & 0x3f : (p >> 6) & 0x3f; }
|
||||
uint pat_get_event(uint p) { return version == 2 ? (p >> 18) & 0x3f : (p >> 14) & 0x3f; }
|
||||
|
||||
bool logtest(uint a, uint b) { return (a & b) != 0; }
|
||||
bool logtesta(uint a, uint b) { return (a & b) == b; }
|
||||
|
||||
layout(std140) uniform PatColors {
|
||||
vec4 pat_mode_colors[0x8];
|
||||
vec4 pat_material_colors[0x40];
|
||||
vec4 pat_event_colors[0x40];
|
||||
};
|
||||
|
||||
void main() {
|
||||
// Step 3, the camera transform
|
||||
vec4 transformed = -camera[3].xyzw;
|
||||
|
@ -79,8 +86,8 @@ void main() {
|
|||
float cam_dot = abs(dot(to_cam_n, normal_in));
|
||||
|
||||
// base colors
|
||||
fragment_color = vec4(0.5, 0.6, 0.6, 1);
|
||||
fragment_color.xyz *= (pow(cam_dot, 3) + 0.3);
|
||||
fragment_color = vec4(0.5, 0.5, 0.5, 1);
|
||||
fragment_color.xyz *= (pow(cam_dot, 2) * 0.5 + 0.5);
|
||||
|
||||
// pat checks
|
||||
uint pMode = pat_get_mode(pat);
|
||||
|
@ -92,53 +99,17 @@ void main() {
|
|||
logtesta(collision_skip_mask, pat)) {
|
||||
// fancy colors
|
||||
if (mode == MODE_MODE) {
|
||||
switch ( pMode ) {
|
||||
case 0: fragment_color.rgb *= vec3(1.25, 0.1, 0.1); break; // ground
|
||||
case 1: fragment_color.rgb *= vec3(0.1, 0.1, 1.0); break; // wall
|
||||
case 2: fragment_color.rgb *= vec3(1.0, 0.1, 1.0); break; // obstacle
|
||||
default: fragment_color.rgb = vec3(1, 0, 1); break;
|
||||
}
|
||||
fragment_color.rgb *= pat_mode_colors[pMode].rgb;
|
||||
} else if (mode == MODE_EVENT) {
|
||||
switch ( pEvent ) {
|
||||
case 0: fragment_color.rgb *= vec3(1.0); break; // none
|
||||
case 1: fragment_color.rgb *= vec3(0.2, 1.0, 1.0); break; // deadly
|
||||
case 2: fragment_color.rgb *= vec3(0.1, 1.0, 0.1); break; // endlessfall
|
||||
case 3: fragment_color.rgb *= vec3(1.0, 1.0, 0.1); break; // burn
|
||||
case 4: fragment_color.rgb *= vec3(0.1, 0.1, 1.0); break; // deadlyup
|
||||
case 5: fragment_color.rgb *= vec3(1.0, 0.1, 0.5); break; // burnup
|
||||
case 6: fragment_color.rgb *= vec3(1.0, 0.1, 0.1); break; // melt
|
||||
default: fragment_color.rgb = vec3(1, 0, 1); break;
|
||||
}
|
||||
fragment_color.rgb *= pat_event_colors[pEvent].rgb;
|
||||
} else if (mode == MODE_MATERIAL) {
|
||||
switch ( pMat ) {
|
||||
case 0: fragment_color.rgb *= vec3(1.0, 0.7, 1.0); break; // stone
|
||||
case 1: fragment_color.rgb *= vec3(0.1, 2.0, 2.0); break; // ice
|
||||
case 2: fragment_color.rgb *= vec3(0.75, 0.25, 0.1); break; // quicksand
|
||||
case 3: fragment_color.rgb *= vec3(0.1, 0.25, 0.75); break; // waterbottom
|
||||
case 4: fragment_color.rgb *= vec3(0.5, 0.15, 0.1); break; // tar
|
||||
case 5: fragment_color.rgb *= vec3(2.0, 1.5, 0.5); break; // sand
|
||||
case 6: fragment_color.rgb *= vec3(1.5, 0.75, 0.1); break; // wood
|
||||
case 7: fragment_color.rgb *= vec3(0.1, 1.35, 0.1); break; // grass
|
||||
case 8: fragment_color.rgb *= vec3(1.7, 1.3, 0.1); break; // pcmetal
|
||||
case 9: fragment_color.rgb *= vec3(1.8); break; // snow
|
||||
case 10: fragment_color.rgb *= vec3(1.5, 0.2, 1.0); break; // deepsnow
|
||||
case 11: fragment_color.rgb *= vec3(1.2, 0.5, 0.3); break; // hotcoals
|
||||
case 12: fragment_color.rgb *= vec3(1.4, 0.1, 0.1); break; // lava
|
||||
case 13: fragment_color.rgb *= vec3(0.8, 0.3, 0.1); break; // crwood
|
||||
case 14: fragment_color.rgb *= vec3(1.0, 0.4, 1.0); break; // gravel
|
||||
case 15: fragment_color.rgb *= vec3(1.5, 0.5, 0.15); break; // dirt
|
||||
case 16: fragment_color.rgb *= vec3(0.7, 0.7, 1.0); break; // metal
|
||||
case 17: fragment_color.rgb *= vec3(0.1, 0.1, 1.2); break; // straw
|
||||
case 18: fragment_color.rgb *= vec3(0.75, 1.75, 0.75); break; // tube
|
||||
case 19: fragment_color.rgb *= vec3(0.4, 0.1, 0.8); break; // swamp
|
||||
case 20: fragment_color.rgb *= vec3(0.1, 0.4, 0.8); break; // stopproj
|
||||
case 21: fragment_color.rgb *= vec3(1.9, 0.1, 1.9); break; // rotate
|
||||
case 22: fragment_color.rgb *= vec3(1.0); break; // neutral
|
||||
default: fragment_color.rgb = vec3(1, 0, 1); break;
|
||||
}
|
||||
fragment_color.rgb *= pat_material_colors[pMat].rgb;
|
||||
} else {
|
||||
fragment_color = vec4((normal_in + 1)*.5, 1);
|
||||
fragment_color.xyz *= (pow(cam_dot, 3) + 0.3);
|
||||
fragment_color.rgb *= (pow(cam_dot, 2) * 0.5 + 0.5);
|
||||
}
|
||||
if (fragment_color.r < 0 || fragment_color.g < 0 || fragment_color.b < 0) {
|
||||
fragment_color.rgb = vec3(1, 0, 1);
|
||||
}
|
||||
} else {
|
||||
// filtered out. goodbye!
|
||||
|
|
|
@ -354,98 +354,96 @@
|
|||
))
|
||||
)
|
||||
|
||||
;; (defun dm-toggle-collision-pick-func ((arg symbol) (msg debug-menu-msg))
|
||||
;; (when (= msg (debug-menu-msg press))
|
||||
;; (cond
|
||||
;; ((-> arg value)
|
||||
;; (false! (-> arg value))
|
||||
;; (logior! *vu1-enable-user-menu* (vu1-renderer-mask tfrag trans-tfrag tie tie-near))
|
||||
;; (true! *generic-tie*)
|
||||
;; )
|
||||
;; (else
|
||||
;; (true! (-> arg value))
|
||||
;; (logclear! *vu1-enable-user-menu* (vu1-renderer-mask tfrag trans-tfrag tie tie-near))
|
||||
;; (false! *generic-tie*)
|
||||
;; )
|
||||
;; )
|
||||
;; )
|
||||
;; (-> arg value)
|
||||
;; )
|
||||
;;
|
||||
;; (defun dm-collision-mode-pick-func ((arg pc-collision-mode) (msg debug-menu-msg))
|
||||
;; (when (= msg (debug-menu-msg press))
|
||||
;; (set! *collision-mode* arg)
|
||||
;; )
|
||||
;; (= *collision-mode* arg)
|
||||
;; )
|
||||
;;
|
||||
;; (defun dm-collision-filter-mode-pick-func ((arg int) (msg debug-menu-msg))
|
||||
;; (when (= msg (debug-menu-msg press))
|
||||
;; (pc-set-collision-mask (pc-collision-mode mode) arg (not (pc-get-collision-mask (pc-collision-mode mode) arg)))
|
||||
;; )
|
||||
;; (pc-get-collision-mask (pc-collision-mode mode) arg)
|
||||
;; )
|
||||
;;
|
||||
;; (defun dm-collision-filter-event-pick-func ((arg int) (msg debug-menu-msg))
|
||||
;; (when (= msg (debug-menu-msg press))
|
||||
;; (pc-set-collision-mask (pc-collision-mode event) arg (not (pc-get-collision-mask (pc-collision-mode event) arg)))
|
||||
;; )
|
||||
;; (pc-get-collision-mask (pc-collision-mode event) arg)
|
||||
;; )
|
||||
;;
|
||||
;; (defun dm-collision-filter-material-pick-func ((arg int) (msg debug-menu-msg))
|
||||
;; (when (= msg (debug-menu-msg press))
|
||||
;; (pc-set-collision-mask (pc-collision-mode material) arg (not (pc-get-collision-mask (pc-collision-mode material) arg)))
|
||||
;; )
|
||||
;; (pc-get-collision-mask (pc-collision-mode material) arg)
|
||||
;; )
|
||||
;;
|
||||
;; (defun dm-collision-filter-skip-pick-func ((arg int) (msg debug-menu-msg))
|
||||
;; (when (= msg (debug-menu-msg press))
|
||||
;; (pc-set-collision-mask (pc-collision-mode skip) arg (not (pc-get-collision-mask (pc-collision-mode skip) arg)))
|
||||
;; )
|
||||
;; (pc-get-collision-mask (pc-collision-mode skip) arg)
|
||||
;; )
|
||||
;;
|
||||
;; (defun debug-menu-make-collision-renderer-menu ((ctx debug-menu-context))
|
||||
;; (let ((menu (new 'debug 'debug-menu ctx "Collision renderer menu")))
|
||||
;; ;; master toggle
|
||||
;; (debug-menu-append-item menu (new-dm-bool "Enable" *collision-renderer* dm-toggle-collision-pick-func))
|
||||
;; (debug-menu-append-item menu (new-dm-bool "Wireframe" *collision-wireframe* dm-boolean-toggle-pick-func))
|
||||
;; (debug-menu-append-item menu (new-dm-submenu "Mode"
|
||||
;; (let ((mode-menu (new 'debug 'debug-menu ctx "Collision renderer mode menu")))
|
||||
;; (doenum (name val pc-collision-mode)
|
||||
;; (debug-menu-append-item mode-menu (new-dm-flag name val dm-collision-mode-pick-func))
|
||||
;; )
|
||||
;; mode-menu)))
|
||||
;; (debug-menu-append-item menu (new-dm-submenu "Filter mode"
|
||||
;; (let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter mode menu")))
|
||||
;; (doenum (name val pat-mode)
|
||||
;; (debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-mode-pick-func))
|
||||
;; )
|
||||
;; filter-menu)))
|
||||
;; (debug-menu-append-item menu (new-dm-submenu "Filter event"
|
||||
;; (let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter event menu")))
|
||||
;; (doenum (name val pat-event)
|
||||
;; (debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-event-pick-func))
|
||||
;; )
|
||||
;; filter-menu)))
|
||||
;; (debug-menu-append-item menu (new-dm-submenu "Filter material"
|
||||
;; (let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter material menu")))
|
||||
;; (doenum (name val pat-material)
|
||||
;; (debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-material-pick-func))
|
||||
;; )
|
||||
;; filter-menu)))
|
||||
;; (debug-menu-append-item menu (new-dm-submenu "Filter skip"
|
||||
;; (let ((filter-menu (new 'debug 'debug-menu ctx "Collision renderer filter skip menu")))
|
||||
;; (doenum (name val pc-pat-skip-hack)
|
||||
;; (debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-skip-pick-func))
|
||||
;; )
|
||||
;; filter-menu)))
|
||||
;;
|
||||
;; (new-dm-submenu "Collision renderer" menu)
|
||||
;; )
|
||||
;; )
|
||||
(defun dm-toggle-collision-pick-func ((arg symbol) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(cond
|
||||
((-> arg value)
|
||||
(false! (-> arg value))
|
||||
(logior! (-> *display* vu1-enable-user-menu) (vu1-renderer-mask tfrag tfrag-trans tie tie-envmap))
|
||||
)
|
||||
(else
|
||||
(true! (-> arg value))
|
||||
(logclear! (-> *display* vu1-enable-user-menu) (vu1-renderer-mask tfrag tfrag-trans tie tie-envmap))
|
||||
)
|
||||
)
|
||||
)
|
||||
(-> arg value)
|
||||
)
|
||||
|
||||
(defun dm-collision-mode-pick-func ((arg pc-collision-mode) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(set! *collision-mode* arg)
|
||||
)
|
||||
(= *collision-mode* arg)
|
||||
)
|
||||
|
||||
(defun dm-collision-filter-mode-pick-func ((arg int) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(pc-set-collision-mask (pc-collision-mode mode) arg (not (pc-get-collision-mask (pc-collision-mode mode) arg)))
|
||||
)
|
||||
(pc-get-collision-mask (pc-collision-mode mode) arg)
|
||||
)
|
||||
|
||||
(defun dm-collision-filter-event-pick-func ((arg int) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(pc-set-collision-mask (pc-collision-mode event) arg (not (pc-get-collision-mask (pc-collision-mode event) arg)))
|
||||
)
|
||||
(pc-get-collision-mask (pc-collision-mode event) arg)
|
||||
)
|
||||
|
||||
(defun dm-collision-filter-material-pick-func ((arg int) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(pc-set-collision-mask (pc-collision-mode material) arg (not (pc-get-collision-mask (pc-collision-mode material) arg)))
|
||||
)
|
||||
(pc-get-collision-mask (pc-collision-mode material) arg)
|
||||
)
|
||||
|
||||
(defun dm-collision-filter-skip-pick-func ((arg int) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(pc-set-collision-mask (pc-collision-mode skip) arg (not (pc-get-collision-mask (pc-collision-mode skip) arg)))
|
||||
)
|
||||
(pc-get-collision-mask (pc-collision-mode skip) arg)
|
||||
)
|
||||
|
||||
(defun debug-menu-make-collision-renderer-menu ((ctx debug-menu-context))
|
||||
(let ((menu (new 'debug 'debug-menu ctx "OpenGOAL collision renderer menu")))
|
||||
;; master toggle
|
||||
(debug-menu-append-item menu (new-dm-bool "Enable" *collision-renderer* dm-toggle-collision-pick-func))
|
||||
(debug-menu-append-item menu (new-dm-bool "Wireframe" *collision-wireframe* dm-boolean-toggle-pick-func))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Mode"
|
||||
(let ((mode-menu (new 'debug 'debug-menu ctx "OpenGOAL collision renderer mode menu")))
|
||||
(doenum (name val pc-collision-mode)
|
||||
(debug-menu-append-item mode-menu (new-dm-flag name val dm-collision-mode-pick-func))
|
||||
)
|
||||
mode-menu)))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Filter mode"
|
||||
(let ((filter-menu (new 'debug 'debug-menu ctx "OpenGOAL collision renderer filter mode menu")))
|
||||
(doenum (name val pat-mode)
|
||||
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-mode-pick-func))
|
||||
)
|
||||
filter-menu)))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Filter event"
|
||||
(let ((filter-menu (new 'debug 'debug-menu ctx "OpenGOAL collision renderer filter event menu")))
|
||||
(doenum (name val pat-event)
|
||||
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-event-pick-func))
|
||||
)
|
||||
filter-menu)))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Filter material"
|
||||
(let ((filter-menu (new 'debug 'debug-menu ctx "OpenGOAL collision renderer filter material menu")))
|
||||
(doenum (name val pat-material)
|
||||
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-material-pick-func))
|
||||
)
|
||||
filter-menu)))
|
||||
(debug-menu-append-item menu (new-dm-submenu "Filter skip"
|
||||
(let ((filter-menu (new 'debug 'debug-menu ctx "OpenGOAL collision renderer filter skip menu")))
|
||||
(doenum (name val pc-pat-skip-hack)
|
||||
(debug-menu-append-item filter-menu (new-dm-flag name val dm-collision-filter-skip-pick-func))
|
||||
)
|
||||
filter-menu)))
|
||||
|
||||
(new-dm-submenu "OpenGOAL collision renderer" menu)
|
||||
)
|
||||
)
|
||||
|
||||
(defun dm-lod-int ((arg0 int) (arg1 debug-menu-msg) (arg2 int) (arg3 int))
|
||||
(when (= arg1 (debug-menu-msg press))
|
||||
|
@ -873,8 +871,8 @@
|
|||
)
|
||||
)
|
||||
|
||||
;; (debug-menu-append-item (debug-menu-find-from-template *debug-menu-context* '("Collision"))
|
||||
;; (debug-menu-make-collision-renderer-menu *debug-menu-context*))
|
||||
(debug-menu-append-item (debug-menu-find-from-template *debug-menu-context* '("Collision"))
|
||||
(debug-menu-make-collision-renderer-menu *debug-menu-context*))
|
||||
|
||||
(debug-menu-append-item (debug-menu-find-from-template *debug-menu-context* '("Artist"))
|
||||
(debug-menu-make-anim-tester-x-menu *debug-menu-context*))
|
||||
|
|
Loading…
Reference in a new issue