mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-20 10:37:37 -04:00
Add ability to turn off portals on specific surfaces
This commit is contained in:
parent
cf3efa84aa
commit
1e45fbc6aa
|
@ -121,8 +121,6 @@ make -f Makefile.docker
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
## Current New Feature TODO List
|
## Current New Feature TODO List
|
||||||
- [ ] fizzle radio/camera
|
|
||||||
- [ ] add fizller sides
|
|
||||||
- [ ] Add auto save checkpoints
|
- [ ] Add auto save checkpoints
|
||||||
- [ ] disable portal surfaces manually on some surfaces #135
|
- [ ] disable portal surfaces manually on some surfaces #135
|
||||||
- [ ] Portal not rendering recursively sometimes #138
|
- [ ] Portal not rendering recursively sometimes #138
|
||||||
|
@ -135,6 +133,8 @@ make -f Makefile.docker
|
||||||
- [ ] don't repeat camera destruction speech every time
|
- [ ] don't repeat camera destruction speech every time
|
||||||
- [ ] don't count boxes on buttons until it is released and stable
|
- [ ] don't count boxes on buttons until it is released and stable
|
||||||
- [ ] dynamically load data
|
- [ ] dynamically load data
|
||||||
|
- [x] fizzle radio/camera
|
||||||
|
- [x] add fizller sides
|
||||||
- [x] flash portal opacity when other portal moves
|
- [x] flash portal opacity when other portal moves
|
||||||
- [x] rotate auto uv
|
- [x] rotate auto uv
|
||||||
- [x] Vertex lighting #39
|
- [x] Vertex lighting #39
|
||||||
|
|
|
@ -8,12 +8,6 @@ local dynamic_collision_export = require('tools.level_scripts.dynamic_collision_
|
||||||
|
|
||||||
local portal_surfaces = {}
|
local portal_surfaces = {}
|
||||||
|
|
||||||
local portalable_surfaces = {
|
|
||||||
concrete_modular_wall001d = true,
|
|
||||||
concrete_modular_ceiling001a = true,
|
|
||||||
concrete_modular_floor001a = true,
|
|
||||||
}
|
|
||||||
|
|
||||||
local static_to_portable_surface_mapping = {}
|
local static_to_portable_surface_mapping = {}
|
||||||
local portal_surfaces = {}
|
local portal_surfaces = {}
|
||||||
|
|
||||||
|
@ -189,7 +183,7 @@ local function calculate_portal_single_surface(mesh, mesh_display_list)
|
||||||
end
|
end
|
||||||
|
|
||||||
for _, surface in pairs(static_export.static_nodes) do
|
for _, surface in pairs(static_export.static_nodes) do
|
||||||
if (surface.mesh.material and portalable_surfaces[surface.mesh.material.name]) then
|
if surface.accept_portals then
|
||||||
table.insert(static_to_portable_surface_mapping, #portal_surfaces)
|
table.insert(static_to_portable_surface_mapping, #portal_surfaces)
|
||||||
table.insert(portal_surfaces, calculate_portal_single_surface(surface.mesh, surface.display_list))
|
table.insert(portal_surfaces, calculate_portal_single_surface(surface.mesh, surface.display_list))
|
||||||
else
|
else
|
||||||
|
@ -200,10 +194,6 @@ end
|
||||||
sk_definition_writer.add_definition("portal_surfaces", "struct PortalSurface[]", "_geo", portal_surfaces)
|
sk_definition_writer.add_definition("portal_surfaces", "struct PortalSurface[]", "_geo", portal_surfaces)
|
||||||
|
|
||||||
local function is_coplanar_portal_surface(quad, mesh, collision_bb)
|
local function is_coplanar_portal_surface(quad, mesh, collision_bb)
|
||||||
if not mesh.material or not portalable_surfaces[mesh.material.name] then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
if not collision_export.is_coplanar(quad, mesh) then
|
if not collision_export.is_coplanar(quad, mesh) then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
@ -229,7 +219,7 @@ for _, quad in pairs(collision_export.colliders) do
|
||||||
collision_with_padding.max = collision_with_padding.max + 0.1
|
collision_with_padding.max = collision_with_padding.max + 0.1
|
||||||
|
|
||||||
for static_index, surface in pairs(static_export.static_nodes) do
|
for static_index, surface in pairs(static_export.static_nodes) do
|
||||||
if not surface.transform_index and is_coplanar_portal_surface(quad, surface.mesh, collision_with_padding) then
|
if not surface.transform_index and surface.accept_portals and is_coplanar_portal_surface(quad, surface.mesh, collision_with_padding) then
|
||||||
local portal_surface_index = static_to_portable_surface_mapping[static_index]
|
local portal_surface_index = static_to_portable_surface_mapping[static_index]
|
||||||
|
|
||||||
if portal_surface_index ~= -1 then
|
if portal_surface_index ~= -1 then
|
||||||
|
|
|
@ -9,6 +9,12 @@ local animation = require('tools.level_scripts.animation')
|
||||||
sk_definition_writer.add_header('"../build/assets/materials/static.h"')
|
sk_definition_writer.add_header('"../build/assets/materials/static.h"')
|
||||||
sk_definition_writer.add_header('"levels/level_definition.h"')
|
sk_definition_writer.add_header('"levels/level_definition.h"')
|
||||||
|
|
||||||
|
local portalable_surfaces = {
|
||||||
|
concrete_modular_wall001d = true,
|
||||||
|
concrete_modular_ceiling001a = true,
|
||||||
|
concrete_modular_floor001a = true,
|
||||||
|
}
|
||||||
|
|
||||||
local function proccessStaticNodes(nodes)
|
local function proccessStaticNodes(nodes)
|
||||||
local result = {}
|
local result = {}
|
||||||
local bb_scale = sk_input.settings.fixed_point_scale
|
local bb_scale = sk_input.settings.fixed_point_scale
|
||||||
|
@ -49,7 +55,8 @@ local function proccessStaticNodes(nodes)
|
||||||
display_list = sk_definition_writer.raw(gfxName),
|
display_list = sk_definition_writer.raw(gfxName),
|
||||||
material_index = sk_definition_writer.raw(chunkV.material.macro_name),
|
material_index = sk_definition_writer.raw(chunkV.material.macro_name),
|
||||||
transform_index = transform_index,
|
transform_index = transform_index,
|
||||||
room_index = room_export.node_nearest_room_index(v.node) or 0
|
room_index = room_export.node_nearest_room_index(v.node) or 0,
|
||||||
|
accept_portals = chunkV.mesh.material and portalable_surfaces[chunkV.mesh.material.name] and not sk_scene.find_flag_argument(v.arguments, "no_portals"),
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue