framestep work
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
23f745c450
commit
e00eb85bcb
@ -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)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@ -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(),
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
28
assets/Scripts/types/host/singletons.ts
Normal file
28
assets/Scripts/types/host/singletons.ts
Normal 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,
|
||||||
|
|
||||||
|
}
|
||||||
46
assets/Scripts/types/host/static-classes.ts
Normal file
46
assets/Scripts/types/host/static-classes.ts
Normal 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,
|
||||||
|
|
||||||
|
}
|
||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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]);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user