Skip to content

Commit

Permalink
Visplanes?
Browse files Browse the repository at this point in the history
  • Loading branch information
flukejones committed May 2, 2024
1 parent 036baab commit 53a9bd2
Show file tree
Hide file tree
Showing 59 changed files with 119 additions and 400 deletions.
Empty file modified .drone.yml
100644 → 100755
Empty file.
Empty file modified .gitignore
100644 → 100755
Empty file.
Empty file modified .gitlab-ci.yml
100644 → 100755
Empty file.
Empty file modified .gitmodules
100644 → 100755
Empty file.
Empty file modified .rustfmt.toml
100644 → 100755
Empty file.
Empty file modified Cargo.toml
100644 → 100755
Empty file.
395 changes: 21 additions & 374 deletions LICENSE
100644 → 100755

Large diffs are not rendered by default.

Empty file modified README.md
100644 → 100755
Empty file.
Empty file modified build.rs
100644 → 100755
Empty file.
Empty file modified doom1.wad
100644 → 100755
Empty file.
Empty file modified game/Cargo.toml
100644 → 100755
Empty file.
Empty file modified game/src/main.rs
100644 → 100755
Empty file.
Empty file modified gamelib/Cargo.toml
100644 → 100755
Empty file.
Empty file modified gamelib/benches/parse_map.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/angle.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/d_main.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/d_thinker.rs
100644 → 100755
Empty file.
27 changes: 18 additions & 9 deletions gamelib/src/doom_def.rs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,29 @@ pub const ML_MAPPED: u32 = 256;
// to handle IWAD dependend animations etc.
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum GameMode {
Shareware, // DOOM 1 shareware, E1, M9
Registered, // DOOM 1 registered, E3, M27
Commercial, // DOOM 2 retail, E1 M34
Shareware,
// DOOM 1 shareware, E1, M9
Registered,
// DOOM 1 registered, E3, M27
Commercial,
// DOOM 2 retail, E1 M34
// DOOM 2 german edition not handled
Retail, // DOOM 1 retail, E4, M36
Retail,
// DOOM 1 retail, E4, M36
Indetermined, // Well, no IWAD found.
}

// Mission packs - might be useful for TC stuff?
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum GameMission {
Doom, // DOOM 1
Doom2, // DOOM 2
PackTnt, // TNT mission pack
PackPlut, // Plutonia pack
Doom,
// DOOM 1
Doom2,
// DOOM 2
PackTnt,
// TNT mission pack
PackPlut,
// Plutonia pack
None,
}

Expand Down Expand Up @@ -149,7 +157,8 @@ pub enum PowerType {
#[derive(Debug, Copy, Clone)]
pub enum PowerDuration {
INVULNTICS = (30 * TICRATE) as isize,
INVISTICS = (61 * TICRATE) as isize, // TODO: fix back to 60
INVISTICS = (61 * TICRATE) as isize,
// TODO: fix back to 60
INFRATICS = (120 * TICRATE) as isize,
IRONTICS = (60 * TICRATE) as isize,
}
Empty file modified gamelib/src/errors.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/flags.rs
100644 → 100755
Empty file.
3 changes: 2 additions & 1 deletion gamelib/src/game.rs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -508,8 +508,9 @@ impl Game {

let player = &mut self.players[self.consoleplayer];

level.visplanes.clear_planes();
level.bsp_renderer.clear_clip_segs();
level.r_data.portal_clip.clear();
level.r_data.clear_data();
// The state machine will handle which state renders to the surface
//self.states.render(dt, &mut self.canvas);

Expand Down
Empty file modified gamelib/src/info/map_object_info.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/info/mod.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/info/states.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/input.rs
100644 → 100755
Empty file.
3 changes: 3 additions & 0 deletions gamelib/src/level_data/level.rs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use wad::{lumps::WadThing, WadData};

use crate::level_data::map_data::MapData;
use crate::renderer::bsp::BspRenderer;
use crate::renderer::plane::VisPlaneCtrl;
use crate::renderer::RenderData;
use crate::{
d_main::Skill,
Expand All @@ -26,6 +27,7 @@ pub(crate) struct Level {
pub map_data: MapData,
pub bsp_renderer: BspRenderer,
pub r_data: RenderData,
pub visplanes: VisPlaneCtrl,
pub mobj_ctrl: SubSectorMinMax,
pub thinkers: Vec<Option<Thinker<MapObject>>>,
max_thinker_capacity: usize,
Expand Down Expand Up @@ -83,6 +85,7 @@ impl Level {
let mut level = Level {
map_data,
r_data: RenderData::default(),
visplanes: VisPlaneCtrl::default(),
bsp_renderer: BspRenderer::default(),
mobj_ctrl: SubSectorMinMax::default(),
thinkers: Vec::with_capacity(thinker_count + 50),
Expand Down
Empty file modified gamelib/src/level_data/map_data.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/level_data/map_defs.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/level_data/mod.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/level_data/node.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/lib.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/p_enemy.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/p_lights.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/p_local.rs
100644 → 100755
Empty file.
18 changes: 9 additions & 9 deletions gamelib/src/p_map.rs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -252,15 +252,15 @@ impl MapObject {
return;
}

if self.flags
& (MapObjectFlag::MF_DROPOFF as u32
| MapObjectFlag::MF_FLOAT as u32)
!= 0
&& portal.bottom_z - portal.lowest_z > 24.0
{
contacts.push(contact);
return;
}
// if self.flags
// & (MapObjectFlag::MF_DROPOFF as u32
// | MapObjectFlag::MF_FLOAT as u32)
// != 0
// && portal.bottom_z - portal.lowest_z > 24.0
// {
// contacts.push(contact);
// return;
// }
}
}
}
Expand Down
Empty file modified gamelib/src/p_map_object.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/p_map_util.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/p_player_sprite.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/p_spec.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/player.rs
100644 → 100755
Empty file.
1 change: 0 additions & 1 deletion gamelib/src/renderer/bsp.rs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,6 @@ impl BspRenderer {
});
}
self.new_end = 2;
// self.r_segs = SegRender::default();
}

/// R_ClipSolidWallSegment - r_bsp
Expand Down
Empty file modified gamelib/src/renderer/defs.rs
100644 → 100755
Empty file.
4 changes: 4 additions & 0 deletions gamelib/src/renderer/mod.rs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,7 @@ pub(crate) struct RenderData {
/// Used in r_segs and r_things
pub ds_p: usize, // Or, depending on place in code this can be skipped and a new
}

impl RenderData {
pub fn clear_data(&mut self) { self.portal_clip.clear(); }
}
55 changes: 51 additions & 4 deletions gamelib/src/renderer/plane.rs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,23 @@ use crate::renderer::defs::{

pub(crate) struct VisPlaneCtrl {
// Here comes the obnoxious "visplane".
pub visplanes: [Visplane; MAXVISPLANES],
pub visplanes: Vec<Visplane>,
pub lastvisplane: usize,
/// Index of current visplane in `self.visplanes` for floor
pub floorplane: usize,
/// Index of current visplane in `self.visplanes` for ceiling
pub ceilingplane: usize,

// ?
pub openings: [i16; MAXOPENINGS],
pub lastopening: usize,

pub floorclip: [i32; SCREENWIDTH],
pub ceilingclip: [i32; SCREENWIDTH],
/// spanstart holds the start of a plane span
/// initialized to 0 at start
pub spanstart: [i32; SCREENHEIGHT],
pub spanstop: [i32; SCREENHEIGHT],
pub spanstart: [i32; SCREENHEIGHT],
pub spanstop: [i32; SCREENHEIGHT],

//lighttable_t **planezlight;
pub planeheight: f32,
Expand All @@ -32,15 +36,21 @@ pub(crate) struct VisPlaneCtrl {
pub cachedystep: [f32; SCREENHEIGHT],
}

impl Default for VisPlaneCtrl {
fn default() -> Self { VisPlaneCtrl::new() }
}

impl VisPlaneCtrl {
pub(crate) fn new() -> Self {
VisPlaneCtrl {
visplanes: [Visplane::default(); MAXVISPLANES],
visplanes: vec![Visplane::default(); MAXVISPLANES],
lastvisplane: 0,
floorplane: 0,
ceilingplane: 0,
openings: [0; MAXOPENINGS],
lastopening: 0,
floorclip: [0; SCREENWIDTH],
ceilingclip: [0; SCREENWIDTH],
spanstart: [0; SCREENHEIGHT],
spanstop: [0; SCREENHEIGHT],
planeheight: 0.0,
Expand All @@ -54,4 +64,41 @@ impl VisPlaneCtrl {
cachedystep: [0.0; SCREENHEIGHT],
}
}

/// R_ClearPlanes
/// At begining of frame.
pub fn clear_planes(&mut self) {
// opening / clipping determination
for i in 0..SCREENWIDTH {
self.floorclip[i] = SCREENHEIGHT as i32;
self.ceilingclip[i] = -1;
}

self.lastvisplane = 0;
self.lastopening = 0;

// texture calculation
for i in self.cachedheight.iter_mut() {
*i = 0.0;
}

// left to right mapping
// TODO: angle = (viewangle - ANG90) >> ANGLETOFINESHIFT;

// TODO: Don't hardcode this; centerxfrac
// scale will be unit scale at SCREENWIDTH/2 distance
self.basexscale = (160.0f32).cos();
self.baseyscale = -(160.0f32).sin();
}

pub fn current_floor_plane(&self) -> &Visplane {
&self.visplanes[self.floorplane]
}

pub fn current_ceiling_plane(&self) -> &Visplane {
&self.visplanes[self.ceilingplane]
}

// R_CheckPlane
//pub fn check_set_floor_plane
}
2 changes: 1 addition & 1 deletion gamelib/src/renderer/portals.rs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ impl PortalClip {
}
}

pub(crate) fn clear(&mut self) {
pub(super) fn clear(&mut self) {
for i in 0..SCREENWIDTH {
self.floorclip[i] = SCREENHEIGHT as f32;
self.ceilingclip[i] = -1.0;
Expand Down
11 changes: 10 additions & 1 deletion gamelib/src/renderer/segs.rs
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ impl SegRender {
// above view plane
self.markfloor = false;
}
// TDOD: if frontsector.ceilingheight <= viewz && frontsector.ceilingpic != skyflatnum
// TODO: if frontsector.ceilingheight <= viewz && frontsector.ceilingpic != skyflatnum
if frontsector.ceilingheight <= viewz {
// below view plane
self.markceiling = false;
Expand All @@ -405,6 +405,15 @@ impl SegRender {
}
}

// render it
if self.markceiling {
// ceilingplane = R_CheckPlane(ceilingplane, self.rw_x, self.rw_stopx - 1);
}

if self.markfloor {
// floorplane = R_CheckPlane(floorplane, self.rw_x, self.rw_stopx - 1);
}

self.render_seg_loop(object, seg, rdata, canvas);
}

Expand Down
Empty file modified gamelib/src/shaders/basic.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/shaders/cgwg_crt.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/shaders/lottes_crt.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/shaders/mod.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/sounds.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/tic_cmd.rs
100644 → 100755
Empty file.
Empty file modified gamelib/src/timestep.rs
100644 → 100755
Empty file.
Empty file modified wad/Cargo.toml
100644 → 100755
Empty file.
Empty file modified wad/benches/wad_loading.rs
100644 → 100755
Empty file.
Empty file modified wad/src/iterators.rs
100644 → 100755
Empty file.
Empty file modified wad/src/lib.rs
100644 → 100755
Empty file.
Empty file modified wad/src/lumps.rs
100644 → 100755
Empty file.
Empty file modified wad/src/wad.rs
100644 → 100755
Empty file.

0 comments on commit 53a9bd2

Please sign in to comment.