framestep work
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2024-07-20 09:38:17 -04:00
parent 23f745c450
commit e00eb85bcb
9 changed files with 100 additions and 39 deletions

View File

@ -1,3 +1,4 @@
import { engine } from "/Scripts/engine/engine-init";
import { Scene } from "/Scripts/types/scene"; import { Scene } from "/Scripts/types/scene";
import { Vector } from "/Scripts/types/spatial"; import { Vector } from "/Scripts/types/spatial";
@ -27,6 +28,7 @@ class TestScene1 extends Scene {
signal: "equipItem", signal: "equipItem",
callback: (entityId: number) => { callback: (entityId: number) => {
console.log("Item equipped to entity " + entityId) console.log("Item equipped to entity " + entityId)
engine.classes.simulation.static.setFramestep(0)
} }
}, },
@ -47,6 +49,7 @@ class TestScene1 extends Scene {
signal: "itemPickup", signal: "itemPickup",
callback: (entityId: number, inWorldItemEntityId: number, inInventoryItemEntityId: number) => { callback: (entityId: number, inWorldItemEntityId: number, inInventoryItemEntityId: number) => {
console.log(entityId + ' picked up an item, destroying ' + inWorldItemEntityId + ' and creating ' + inInventoryItemEntityId) console.log(entityId + ' picked up an item, destroying ' + inWorldItemEntityId + ' and creating ' + inInventoryItemEntityId)
engine.classes.simulation.static.setFramestep(2)
} }
}, },

View File

@ -8,8 +8,8 @@ import { Engine } from '/Scripts/types/engine'
* The core engine values * The core engine values
*/ */
export const engine: Engine = { export const engine: Engine = {
classes: [], classes: {},
singletons: [], singletons: {},
hookManager: new HookManager(), hookManager: new HookManager(),
sceneLoader: new SceneLoader(), sceneLoader: new SceneLoader(),
} }

View File

@ -1,5 +1,7 @@
import { HookManager } from "/Scripts/engine/hooks/hook-manager"; import { HookManager } from "/Scripts/engine/hooks/hook-manager";
import { SceneLoader } from "/Scripts/engine/scene/scene-loader"; import { SceneLoader } from "/Scripts/engine/scene/scene-loader";
import { SingletonsMap } from "/Scripts/types/host/singletons";
import { StaticClasses } from "/Scripts/types/host/static-classes";
/** /**
@ -10,12 +12,12 @@ export interface Engine {
/** /**
* The host's view of the scripting engine * The host's view of the scripting engine
*/ */
readonly classes: any, readonly classes: StaticClasses,
/** /**
* The singletons available to the script engine * The singletons available to the script engine
*/ */
readonly singletons: any, readonly singletons: SingletonsMap,
/** /**
* Manages all script-defined hooks in the engine * Manages all script-defined hooks in the engine
@ -29,32 +31,3 @@ export interface Engine {
} }
/**
* The singletons from the host that are accessible in scripts
*/
export interface SingletonsMap {
/**
* Timekeeper that tracks engine time and frame count
*/
timekeeper: any,
/**
* The object for the current player (if in single player non-headless client)
*/
currentPlayer: any,
/**
* The scripts logger
*/
loggerScripts: any,
/**
* The scripts engine
*/
scriptEngine: any,
}

View File

@ -0,0 +1,28 @@
/**
* The singletons from the host that are accessible in scripts
*/
export interface SingletonsMap {
/**
* Timekeeper that tracks engine time and frame count
*/
readonly timekeeper?: any,
/**
* The object for the current player (if in single player non-headless client)
*/
readonly currentPlayer?: any,
/**
* The scripts logger
*/
readonly loggerScripts?: any,
/**
* The scripts engine
*/
readonly scriptEngine?: any,
}

View File

@ -0,0 +1,46 @@
/**
* Static classes provided to the script environment
*/
export interface StaticClasses {
/**
* Utility functions for doing math
*/
readonly mathUtils?: any,
/**
* Simulation processing related functions
*/
readonly simulation?: Class<SimulationClass>,
}
/**
* A class file
*/
export interface Class<T> {
/**
* The static values of the class
*/
static: T,
}
/**
* The simulation processing class
*/
export interface SimulationClass {
/**
* Sets the simulation frame count
* 0 - Do not simulate any frames
* 1 - Simulate a single frame
* 2+ - Simulate indefinitely
* Values lower than 0 are ignored
* @param value The frame count
*/
readonly setFramestep: (value: number) => void,
}

View File

@ -3,8 +3,7 @@
+ there is a sword lying on the ground + there is a sword lying on the ground
+ when you grab the sword, a tutorial popup appears to tell you how to use in + when you grab the sword, a tutorial popup appears to tell you how to use in
+ on clearing the tutorial, continue the game+ when the sword is equipped, create another popup to teach sword controls. it pauses the game + on clearing the tutorial, continue the game+ when the sword is equipped, create another popup to teach sword controls. it pauses the game
script ability to pause and unpause game + when popup is accepted, spawn an enemy with an effect
+ when popup is accepted, spawn an rnemy with an effect
enemy ai enemy ai
review effects review effects
review combat code (lifestate, damage calculation, etc) review combat code (lifestate, damage calculation, etc)

View File

@ -434,6 +434,10 @@ Hooks debugging
On add item to inventory hook On add item to inventory hook
Hook manager debugging Hook manager debugging
(07/20/2024)
Properly drill static classes to script context
Expose framestep control to script side
# TODO # TODO

View File

@ -6,6 +6,8 @@ import static org.lwjgl.glfw.GLFW.glfwWindowShouldClose;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.graalvm.polyglot.HostAccess.Export;
import org.ode4j.ode.OdeHelper; import org.ode4j.ode.OdeHelper;
import electrosphere.audio.AudioEngine; import electrosphere.audio.AudioEngine;
@ -475,6 +477,7 @@ public class Main {
* Sets the framestep state (2 to resume automatic, 1 to make single step) * Sets the framestep state (2 to resume automatic, 1 to make single step)
* @param framestep 2 - automatic framestep, 1 - single step, 0 - no step * @param framestep 2 - automatic framestep, 1 - single step, 0 - no step
*/ */
@Export
public static void setFramestep(int framestep){ public static void setFramestep(int framestep){
Main.framestep = framestep; Main.framestep = framestep;
} }

View File

@ -14,6 +14,7 @@ import org.graalvm.polyglot.Source.Builder;
import org.graalvm.polyglot.Value; import org.graalvm.polyglot.Value;
import electrosphere.engine.Globals; import electrosphere.engine.Globals;
import electrosphere.engine.Main;
import electrosphere.logger.LoggerInterface; import electrosphere.logger.LoggerInterface;
import electrosphere.util.FileUtils; import electrosphere.util.FileUtils;
import electrosphere.util.MathUtils; import electrosphere.util.MathUtils;
@ -81,6 +82,7 @@ public class ScriptEngine {
//https://stackoverflow.com/a/65942034 //https://stackoverflow.com/a/65942034
static final Object[][] staticClasses = new Object[][]{ static final Object[][] staticClasses = new Object[][]{
{"mathUtils",MathUtils.class}, {"mathUtils",MathUtils.class},
{"simulation",Main.class},
}; };
//singletons from the host that are provided to the javascript context //singletons from the host that are provided to the javascript context
@ -124,9 +126,6 @@ public class ScriptEngine {
loadDependency(fileToLoad); loadDependency(fileToLoad);
} }
//define host members
defineHostMembers();
//register engine files //register engine files
registerFile("/Scripts/engine/engine-init.ts"); registerFile("/Scripts/engine/engine-init.ts");
@ -135,9 +134,15 @@ public class ScriptEngine {
//run script for engine init //run script for engine init
requireModule("/Scripts/engine/engine-init.ts"); requireModule("/Scripts/engine/engine-init.ts");
//get the engine object //get the engine object
engineObject = topLevelValue.getMember("REQUIRE_CACHE").getMember("/Scripts/engine/engine-init.js").getMember("exports").getMember("engine"); engineObject = topLevelValue.getMember("REQUIRE_CACHE").getMember("/Scripts/engine/engine-init.js").getMember("exports").getMember("engine");
hookManager = engineObject.getMember("hookManager"); hookManager = engineObject.getMember("hookManager");
//define host members
defineHostMembers();
//init on script side
invokeModuleFunction("/Scripts/engine/engine-init.ts","ENGINE_onInit"); invokeModuleFunction("/Scripts/engine/engine-init.ts","ENGINE_onInit");
@ -382,7 +387,7 @@ public class ScriptEngine {
private void defineHostMembers(){ private void defineHostMembers(){
hostObject = topLevelValue.getMember("HOST_ACCESS"); hostObject = topLevelValue.getMember("HOST_ACCESS");
//give guest access to static classes //give guest access to static classes
Value classes = hostObject.getMember("classes"); Value classes = engineObject.getMember("classes");
for(Object[] currentClass : staticClasses){ for(Object[] currentClass : staticClasses){
classes.putMember((String)currentClass[0], currentClass[1]); classes.putMember((String)currentClass[0], currentClass[1]);
} }