Compare commits
	
		
			2 Commits
		
	
	
		
			2182cc80fa
			...
			42c1f7c55a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 42c1f7c55a | ||
|  | a26ea92aae | 
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -11,6 +11,7 @@ | ||||
| - @subpage savesindex | ||||
| - @subpage hitboxesindex | ||||
| - @subpage drawcell | ||||
| - @subpage scriptengine | ||||
| 
 | ||||
| 
 | ||||
| # What is this section | ||||
|  | ||||
							
								
								
									
										31
									
								
								docs/src/architecture/scripting/scriptengine.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								docs/src/architecture/scripting/scriptengine.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| @page scriptengine Script Engine | ||||
| 
 | ||||
| 
 | ||||
| # Potential problems with integrating with the overall game engine | ||||
| A chief problem we want to avoid is allowing people to 'escape' the scripting engine and get access to all objects in the overall engine | ||||
| 
 | ||||
| # Roadmap for integrating with the overall game engine | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # On adding different instances of the scripting engine | ||||
| There should be a single monolithic instance of the scripting engine | ||||
| All context-dependent scripts running should have their context provided | ||||
| 
 | ||||
| IE, lets say I'm the client and I want to fire an event when a client-side effect completes, | ||||
| I'd provide a copy of the client's scene as a part of the function call on javascript side | ||||
| That way for any unforseen reason the client could still get access to the server's objects | ||||
| 
 | ||||
| IE, lets say I'm a script running on a specific scene on the server, | ||||
| I'd provide the specific scene to the function call | ||||
| 
 | ||||
| IE, lets say I'm some script firing every time a user logs in, | ||||
| I'd provide the new user object and the global server user tracking service | ||||
| That way you could still drill down to individual scenes on the server if you needed to | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										35
									
								
								docs/src/progress/currenttarget.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								docs/src/progress/currenttarget.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| 
 | ||||
| 
 | ||||
| Demo experience: | ||||
|  - Load into world | ||||
|  - pick up a katana | ||||
|  - popup appears telling you controls to swing it | ||||
|  - Upon dismissing popup, spawn enemy with sword | ||||
|  - Fight enemy to the death | ||||
| 
 | ||||
| Demo requirements: | ||||
|  = Assets =  | ||||
| Fix attack animation bone rotations for hand | ||||
| Clean up equip state data | ||||
| Audio FX for everything | ||||
| 
 | ||||
| 
 | ||||
|  = Coding =  | ||||
| Sub menu on title screen that allows changing control mappings | ||||
|  - Automatically generate based on the controls arrays in controls handler | ||||
| Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around) | ||||
|  - Introduce block hitbox (blockbox) type | ||||
|  - Sour spot, sweet spot for damage hitboxes and hurtboxes | ||||
| Enemy AI | ||||
| better scaffolding for scriptig engine with hooks for equipping items, spawning entities, pausing/resuming play, etc | ||||
| Ability for private realms to have time start/stop based on the player's feedback <-- sync this up to tutorial ui via script | ||||
| Scene Message Service | ||||
|  - Can send arbitrary events and messages | ||||
|   - Synchronized and unsynchronized | ||||
|    - Use synchronized to have client-driver ui interactions | ||||
|  - Variables | ||||
|   - Synchronized and unsynchronized | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|    | ||||
| @ -387,35 +387,23 @@ Fix items falling below the ground | ||||
| Fix server always rotating entity to face client camera -- should only be changing movement vector | ||||
| Probably some kind of tutorial text | ||||
| 
 | ||||
| (06/??/2024) | ||||
| Start working on script engine documentation/design | ||||
| 
 | ||||
| (06/27/2024) | ||||
| Animations | ||||
|  - 2H Sword Hold (3rd person) | ||||
|  - 2H Sword Attack (3rd person) | ||||
|  - 2H Sword Block (3rd person) | ||||
|  - 2H Sword Hold (1st person) | ||||
|  - 2H Sword Attach (1st person) | ||||
|  - 2H Sword Block (1st person) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # TODO | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| Demo requirements: | ||||
|  = Assets =  | ||||
| Block animation in first person | ||||
| Block animation in third person | ||||
| Fix attack animation bone rotations for hand | ||||
| Clean up equip state data | ||||
| Audio FX for everything | ||||
| 
 | ||||
| 
 | ||||
|  = Coding =  | ||||
| Sour spot, sweet spot for damage hitboxes and hurtboxes | ||||
| Sub menu on title screen that allows changing control mappings | ||||
| Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around) | ||||
|  - Introduce block hitbox (blockbox) type | ||||
| Enemy AI | ||||
| Network-able ui messages | ||||
| Ability to display video both on title screen as well as in game windows for tutorials | ||||
| better scaffolding for scriptig engine with hooks for equipping items, spawning entities, pausing/resuming play, etc | ||||
| Ability for private realms to have time start/stop based on the player's feedback <-- sync this up to tutorial ui via script | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| BIG BIG BIG BIG IMMEDIATE TO DO: | ||||
| always enforce opengl interface across all opengl calls jesus christ the bone uniform bug was impossible | ||||
| 
 | ||||
|  | ||||
| @ -13,12 +13,23 @@ import org.graalvm.polyglot.Value; | ||||
| import electrosphere.logger.LoggerInterface; | ||||
| import electrosphere.util.FileUtils; | ||||
| 
 | ||||
| /** | ||||
|  * Interface for executing scripts in the game engine | ||||
|  */ | ||||
| public class ScriptEngine { | ||||
| 
 | ||||
|     //the graal context | ||||
|     Context context; | ||||
| 
 | ||||
|     //the map of script filepaths to parsed, in-memory scripts | ||||
|     Map<String,Source> sourceMap; | ||||
| 
 | ||||
|     //the javascript object that stores values | ||||
|     Value jsBindingsObject; | ||||
| 
 | ||||
|     /** | ||||
|      * Initializes the engine | ||||
|      */ | ||||
|     public void init(){ | ||||
|         //init datastructures | ||||
|         sourceMap = new HashMap<String,Source>(); | ||||
| @ -28,6 +39,8 @@ public class ScriptEngine { | ||||
|         context = Context.newBuilder("js").engine(engine).build(); | ||||
|         //read scripts into source map | ||||
|         readScriptsDirectory("/src/main/sql", FileUtils.getAssetFile("/src/main/sql")); | ||||
|         //save the js bindings object | ||||
|         jsBindingsObject = context.getBindings("js"); | ||||
|         //create bindings | ||||
|         // try { | ||||
|         //     String content = FileUtils.getAssetFileAsString("/Scripts/test.js"); | ||||
| @ -40,11 +53,29 @@ public class ScriptEngine { | ||||
|         // } | ||||
|     } | ||||
| 
 | ||||
|     void createBindings(){ | ||||
|         Value jsBindings = context.getBindings("js"); | ||||
|         jsBindings.putMember("name", "somescript"); | ||||
|     /** | ||||
|      * Stores a variable at the top level of the js bindings | ||||
|      * @param valueName The name of the variable (ie the name of the variable) | ||||
|      * @param value The value that is stored at that variable | ||||
|      */ | ||||
|     public void putTopLevelValue(String valueName, Object value){ | ||||
|         jsBindingsObject.putMember(valueName, value); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Gets a top level value from the script engine | ||||
|      * @param valueName The name of the variable | ||||
|      * @return The value of the variable | ||||
|      */ | ||||
|     public Value getTopLevelValue(String valueName){ | ||||
|         return jsBindingsObject.getMember(valueName); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Reads the scripts directory | ||||
|      * @param path The  | ||||
|      * @param directory | ||||
|      */ | ||||
|     void readScriptsDirectory(String path, File directory){ | ||||
|         if(directory.exists() && directory.isDirectory()){ | ||||
|             File[] children = directory.listFiles(); | ||||
| @ -61,6 +92,10 @@ public class ScriptEngine { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Loads a script from disk | ||||
|      * @param path The path to the script file | ||||
|      */ | ||||
|     public void loadScript(String path){ | ||||
|         String content; | ||||
|         try { | ||||
| @ -73,11 +108,17 @@ public class ScriptEngine { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Runs a script | ||||
|      * @param path The filepath of the script | ||||
|      */ | ||||
|     public void runScript(String path){ | ||||
|         Source source = sourceMap.get(path); | ||||
|         if(source != null){ | ||||
|             context.eval(source); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|      | ||||
|      | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user