Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
2edd620
#31 - Adding WIP Hangar class
paulbrzeski Aug 1, 2025
78538db
#31 - Tweaking hangar appearance
paulbrzeski Aug 2, 2025
685b400
#31 - Working on player hangar
paulbrzeski Aug 3, 2025
5a53344
#31 - Refactoring hangar class and tidying up cruft
paulbrzeski Aug 3, 2025
1af40ee
#31 - Extracting hangar quarters mesh and materials setup to separate…
paulbrzeski Aug 7, 2025
e86f40e
#31 - Switching to using evaluateHierarchy()
paulbrzeski Aug 7, 2025
39cf2f8
#31 - Adding player quarters to hangar
paulbrzeski Aug 7, 2025
4280695
#31 - Tweaking hangar scale
paulbrzeski Aug 7, 2025
a478c19
#31 - Tweaking hangar layout
paulbrzeski Aug 8, 2025
6159238
#31 - Setting up routes class and moving single player init logic
paulbrzeski Aug 9, 2025
894855f
#31 - Adding wip hangar route and menu button, tidying up routes
paulbrzeski Aug 9, 2025
4bf9514
#31 - Implementing hangar mode switch and hiding union platform
paulbrzeski Aug 10, 2025
5cac20a
#31 - Update player and hangar position to platform
paulbrzeski Aug 11, 2025
c3ec8f4
#31 - Moving trail animate
paulbrzeski Aug 11, 2025
9695c62
#31 - Implementing first person controls within the game client
paulbrzeski Aug 11, 2025
498b45d
#31 - Fixing issues with new Person vehicle
paulbrzeski Aug 11, 2025
ecab2d5
#31 - Tweaking rotation
paulbrzeski Aug 11, 2025
94c5df7
#31 - Correcting FPS controls
paulbrzeski Aug 12, 2025
6fb370e
#31 - Aligning walking backward speed to forward
paulbrzeski Aug 12, 2025
72913b9
#31 - Tweaking hangar appearance
paulbrzeski Aug 12, 2025
c22d4a4
#31 - Moving overlay scanner update from game folder to client
paulbrzeski Sep 12, 2025
cbc4438
#31 - Disabling overlays in hangar mode
paulbrzeski Sep 12, 2025
4c16ca8
#31 - Beginning to implement a share game instance
paulbrzeski Oct 2, 2025
be94bc2
#31 - Begun refactoring overworld into a loadable config
paulbrzeski Oct 4, 2025
bdf1aa8
#31 - Recreating director scene manager class
paulbrzeski Oct 4, 2025
fa7cbee
#31 - Moving object factories to new global scenograph objects class
paulbrzeski Oct 5, 2025
849534f
#31 - Implementing extractors in dynamic scene loader
paulbrzeski Oct 6, 2025
ecfefd8
#31 - Adding Lamda city platform to dynamic loader
paulbrzeski Oct 6, 2025
b8457c4
#31 - Object rotation in loader
paulbrzeski Oct 6, 2025
23b987b
#31 - Correcting manual extractor locations
paulbrzeski Oct 6, 2025
df84449
#31 - Adding refineries from scene config
paulbrzeski Oct 9, 2025
86be0da
#31 - Implementing cargo ships in dynamic loader
paulbrzeski Oct 9, 2025
9657a7d
#31 - WIP addition of Raven
paulbrzeski Oct 11, 2025
6cae408
#31 - Fixing Raven activation
paulbrzeski Oct 11, 2025
a13d97b
#31 - Modifying scope of Raven so instances refer to instances, not t…
paulbrzeski Oct 11, 2025
8bc4fdd
#31 - Refactoring Player/Valiant aircraft to be killable
paulbrzeski Oct 11, 2025
0d3f83c
#31 - Continuing refactor
paulbrzeski Dec 9, 2025
b74f05a
#31 - Fixing player aircraft position and rotation updates
paulbrzeski Dec 9, 2025
b66c4a5
#31 - Fixing player aircraft airspeed and vertical speed tracking
paulbrzeski Dec 9, 2025
5aa41c9
#31 - Reenabled aircraft trail
paulbrzeski Dec 9, 2025
7b9286b
#31 - Temporarily adding hangar to scene by hand, doubling person tur…
paulbrzeski Dec 14, 2025
f0aea9c
#31 - Setting hangar to load from config
paulbrzeski Dec 14, 2025
0fdddb2
#31 - Created hangar game object and beginning to setup as source of …
paulbrzeski Dec 18, 2025
8bf8971
#31 - Finished refactoring hangars to load from config
paulbrzeski Dec 18, 2025
3bf5d5f
#31 - Added second player who starts in the hangar and begun refactor…
paulbrzeski Dec 19, 2025
b028633
#31 - Hardcoding initial player to be player one
paulbrzeski Dec 19, 2025
ce16c17
#31 - Adding secondary game classes to be part of new world loop and …
paulbrzeski Dec 26, 2025
40729cc
#31 - Updating game world loader to separate config from instance
paulbrzeski Dec 26, 2025
4274c58
#31 - Updating game world loader to separate config from instance
paulbrzeski Dec 26, 2025
5f988f1
#31 - Changed person actor and object to update via world instance
paulbrzeski Dec 26, 2025
12a4f65
#31 - Implementing structures for game world collision
paulbrzeski Dec 28, 2025
84a8dc3
#31 - Instantiating hangars on structures that possess them for colli…
paulbrzeski Dec 28, 2025
4d34e79
#31 - Adding basic hangar collision detect
paulbrzeski Dec 28, 2025
0a2d568
#31 - Adding multi component hangar collisions
paulbrzeski Dec 28, 2025
7edaa8c
#31 - Tweaking container offset tolerance
paulbrzeski Dec 28, 2025
b5d0a7a
#31- Adding accumulator to smooth physics and tweaking person dimensions
paulbrzeski Dec 28, 2025
00579d4
#31 - Presetting hangar aabb on load
paulbrzeski Dec 28, 2025
1187e95
#31 - Moved hangar position to side of platform
paulbrzeski Dec 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions client/build.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
import { fileURLToPath } from 'url';
import { dirname, resolve } from 'path';
import esbuild from 'esbuild';
import { YAMLPlugin } from 'esbuild-yaml';


const __filename = fileURLToPath( import.meta.url );
const __dirname = dirname( __filename );
Expand All @@ -12,6 +14,9 @@ esbuild
bundle: true,
minify: false,
outdir: '../docs',
plugins: [
YAMLPlugin()
],
target: 'es2018',
alias: {
'@': resolve( __dirname, 'src/app' ),
Expand Down
2 changes: 1 addition & 1 deletion client/dev.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ run('build:esbuild');
chokidar.watch(['src', '../game'], { }).on('all', (event, path) => {
if (event === 'change') {
console.log(event, path);
if (path.endsWith('.js') || path.endsWith('.ts')) {
if (path.endsWith('.js') || path.endsWith('.ts') || path.endsWith('.yml')) {
run('build:esbuild');
}
}
Expand Down
40 changes: 35 additions & 5 deletions client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@
"cross-env": "^7.0.3",
"detect-gpu": "^5.0.57",
"esbuild": "0.24.0",
"esbuild-yaml": "^3.0.4",
"npm-run-all": "^4.1.5",
"postprocessing": "^6.36.5",
"postprocessing": "^6.37.8",
"pug": "^3.0.3",
"pug-stylus": "^0.0.5",
"stylus": "^0.64.0",
Expand Down
10 changes: 8 additions & 2 deletions client/src/app/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/
import l from '@/helpers/l.js';
import Config from "@/config.js";
import Routes from "@/routes.js";
import Scenograph from "@/scenograph.js";
import UI from "@/ui.js";

Expand All @@ -12,7 +13,12 @@ import UI from "@/ui.js";
l.config = new Config();

/**
* Scenograph controls the current scene
* Routes activate game modes and screens.
*/
l.routes = new Routes();

/**
* Scenograph controls the current 3D scene
*/
l.scenograph = new Scenograph();

Expand All @@ -25,7 +31,7 @@ l.init = function () {
/**
* Load up the overworld by default.
*/
l.current_scene = l.scenograph.load( "Overworld" );
l.current_scene = l.scenograph.director.load( "Overworld" );

l.scenograph.init();
}
28 changes: 28 additions & 0 deletions client/src/app/routes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* @name Routes
* @description Provides an interface to load and unload game modes and screens.
* @namespace l.routes
* @memberof l
* @global
*/

/**
* Internal libs and helpers.
*/
import l from '@/helpers/l.js';

import hangarRoute from '@/routes/hangar.js';
import multiPlayerRoute from '@/routes/multiplayer.js';
import singlePlayerRoute from '@/routes/singleplayer.js';

export default class routes {

singlePlayer;

constructor() {
this.hangar = hangarRoute;
this.multiPlayer = multiPlayerRoute;
this.singlePlayer = singlePlayerRoute;
}

}
66 changes: 66 additions & 0 deletions client/src/app/routes/hangar.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/**
* @name Hangar scene
* @description Displays a player hangar
* @namespace l.routes.hangar
* @memberof l.routes
* @global
*/

/**
* Internal libs and helpers.
*/
import l from '@/helpers/l.js';

export default class hangarRoute {

// Scenograph instance of a structure that contains a hangar.
targetStructure = false;

constructor() {
console.log( 'Hangar launched' );

// Start controls.
l.scenograph.controls.activate();

// Set client mode.
l.mode = 'hangar';

this.targetStructure = l.scenograph.objects.structures.platform.instances[0];

l.scenograph.actors.player = l.scenograph.actors.get('Player Two');
l.scenograph.actors.player.setMode('person');

this.loadHangar();

}

loadHangar() {
l.current_scene.scene.add(l.scenograph.objects.structures.hangar.mesh);
//this.targetStructure.visible = false;
l.scenograph.objects.structures.hangar.mesh.visible = true;
console.log(this.targetStructure.userData.config.hangars[0].position);
l.scenograph.objects.structures.hangar.mesh.position.x = this.targetStructure.userData.config.hangars[0].position.x;
l.scenograph.objects.structures.hangar.mesh.position.y = this.targetStructure.userData.config.hangars[0].position.y;
l.scenograph.objects.structures.hangar.mesh.position.z = this.targetStructure.userData.config.hangars[0].position.z;

l.scenograph.actors.player.vehicle.mesh.userData.object.position.x = this.targetStructure.userData.config.hangars[0].position.x;
l.scenograph.actors.player.vehicle.mesh.userData.object.position.z = - 2.5 + this.targetStructure.userData.config.hangars[0].position.z;
l.scenograph.actors.player.vehicle.mesh.userData.object.position.y = l.scenograph.objects.structures.hangar.mesh.position.y - 7.5;

l.scenograph.actors.player.actorInstance.object.position.x = this.targetStructure.userData.config.hangars[0].position.x;
l.scenograph.actors.player.actorInstance.object.position.z = 10 + this.targetStructure.userData.config.hangars[0].position.z;
l.scenograph.actors.player.actorInstance.object.position.y = l.scenograph.objects.structures.hangar.mesh.position.y - 2.5
;

l.scenograph.cameras.active.position.copy(l.scenograph.actors.player.actorInstance.object.position);

if ( l.scenograph.controls.orbit ) {
l.scenograph.cameras.orbit.updateProjectionMatrix();
l.scenograph.controls.orbit.update();
l.scenograph.controls.orbitTarget.x = l.scenograph.objects.structures.hangar.mesh.position.x;
l.scenograph.controls.orbitTarget.y = l.scenograph.objects.structures.hangar.mesh.position.y;
l.scenograph.controls.orbitTarget.z = l.scenograph.objects.structures.hangar.mesh.position.z;
}
}

}
34 changes: 34 additions & 0 deletions client/src/app/routes/multiplayer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* @name Multi Player
* @description Managees the game client's multi player mode.
* @namespace l.routes.multiplayer
* @memberof l.routes
* @global
*/

/**
* Internal libs and helpers.
*/
import l from '@/helpers/l.js';

export default class multiPlayerRoute {

constructor() {
console.log( 'Multi player launched' );

// Start controls.
l.scenograph.controls.activate();

// Start overlays.
l.scenograph.overlays.activate();

let serverLocation = l.env == 'Dev' ? 'lcl.langenium.com:8090' : 'test.langenium.com:42069';

l.scenograph.modes.multiplayer.connect( '//' + serverLocation );

// Set client mode.
l.mode = 'multi_player';

}

}
32 changes: 32 additions & 0 deletions client/src/app/routes/singleplayer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* @name Single Player
* @description Managees the game client's single player mode.
* @namespace l.routes.singleplayer
* @memberof l.routes
* @global
*/

/**
* Internal libs and helpers.
*/
import l from '@/helpers/l.js';

export default class singlePlayerRoute {

constructor() {
console.log( 'Single player launched' );

// Start controls.
l.scenograph.controls.activate();

// Start overlays.
l.scenograph.overlays.activate();

// Set client mode.
l.mode = 'single_player';

l.scenograph.actors.map.get('Player One').setMode('vehicle');

}

}
Loading