reintroduce macro sim scaffolding
Some checks reported errors
studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit

This commit is contained in:
austin 2025-05-10 16:50:49 -04:00
parent bc2ecadf64
commit c893e0568a
7 changed files with 59 additions and 66 deletions

View File

@ -23,7 +23,6 @@ import electrosphere.server.ai.nodes.plan.PathfindingNode;
import electrosphere.server.datacell.Realm; import electrosphere.server.datacell.Realm;
import electrosphere.server.datacell.gridded.GriddedDataCellManager; import electrosphere.server.datacell.gridded.GriddedDataCellManager;
import electrosphere.server.datacell.utils.EntityLookupUtils; import electrosphere.server.datacell.utils.EntityLookupUtils;
import electrosphere.server.macro.MacroData;
import electrosphere.server.macro.character.Character; import electrosphere.server.macro.character.Character;
import electrosphere.server.macro.character.CharacterUtils; import electrosphere.server.macro.character.CharacterUtils;
import electrosphere.server.macro.character.goal.CharacterGoal; import electrosphere.server.macro.character.goal.CharacterGoal;
@ -92,8 +91,7 @@ public class ImGuiAI {
if(ImGui.button("Send off map")){ if(ImGui.button("Send off map")){
Entity entity = ai.getParent(); Entity entity = ai.getParent();
ServerCharacterData serverCharacterData = ServerCharacterData.getServerCharacterData(entity); ServerCharacterData serverCharacterData = ServerCharacterData.getServerCharacterData(entity);
MacroData macroData = Globals.realmManager.getEntityRealm(entity).getServerContentManager().getMacroData(); Character character = Globals.characterService.getCharacter(serverCharacterData.getCharacterData().getId());
Character character = macroData.getCharacter(serverCharacterData.getCharacterData().getId());
CharacterGoal.setCharacterGoal(character, new CharacterGoal(CharacterGoalType.LEAVE_SIM_RANGE)); CharacterGoal.setCharacterGoal(character, new CharacterGoal(CharacterGoalType.LEAVE_SIM_RANGE));
} }
} }

View File

@ -1,6 +1,7 @@
package electrosphere.server.entity; package electrosphere.server.entity;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import org.joml.Vector3i; import org.joml.Vector3i;
@ -83,7 +84,8 @@ public class ServerContentManager {
//ie, if we load an asset-defined (not save-defined) scene that does not have save data //ie, if we load an asset-defined (not save-defined) scene that does not have save data
//ie, imagine a puzzle room or something like that //ie, imagine a puzzle room or something like that
if(macroData != null){ if(macroData != null){
for(Character character : macroData.getCharacters(worldPos)){ List<Character> nearbyCharacters = Globals.characterService.getCharacters(worldPos);
for(Character character : nearbyCharacters){
this.spawnMacroObject(realm, character); this.spawnMacroObject(realm, character);
} }
} }

View File

@ -7,22 +7,17 @@ import electrosphere.engine.Globals;
import electrosphere.logger.LoggerInterface; import electrosphere.logger.LoggerInterface;
import electrosphere.server.datacell.ServerWorldData; import electrosphere.server.datacell.ServerWorldData;
import electrosphere.server.macro.character.Character; import electrosphere.server.macro.character.Character;
import electrosphere.server.macro.character.CharacterUtils;
import electrosphere.server.macro.character.data.CharacterDataStrings; import electrosphere.server.macro.character.data.CharacterDataStrings;
import electrosphere.server.macro.character.diety.Diety;
import electrosphere.server.macro.civilization.Civilization; import electrosphere.server.macro.civilization.Civilization;
import electrosphere.server.macro.race.Race; import electrosphere.server.macro.race.Race;
import electrosphere.server.macro.race.RaceMap; import electrosphere.server.macro.race.RaceMap;
import electrosphere.server.macro.spatial.MacroAreaObject; import electrosphere.server.macro.spatial.MacroAreaObject;
import electrosphere.server.macro.structure.Structure; import electrosphere.server.macro.structure.Structure;
import electrosphere.server.macro.symbolism.Symbol;
import electrosphere.server.macro.town.Town; import electrosphere.server.macro.town.Town;
import electrosphere.util.FileUtils; import electrosphere.util.FileUtils;
import java.util.Random; import java.util.Random;
import org.joml.Vector3i;
/** /**
* Server macro level data * Server macro level data
*/ */
@ -33,11 +28,6 @@ public class MacroData {
*/ */
static final int MAX_PLACEMENT_ATTEMPTS = 50; static final int MAX_PLACEMENT_ATTEMPTS = 50;
/**
* List of initial dieties
*/
List<Character> initialDieties = new LinkedList<Character>();
/** /**
* List of races * List of races
*/ */
@ -229,14 +219,14 @@ public class MacroData {
public void describeWorld(){ public void describeWorld(){
LoggerInterface.loggerEngine.WARNING("Initial dieties"); LoggerInterface.loggerEngine.WARNING("Initial dieties");
LoggerInterface.loggerEngine.WARNING("=========================="); LoggerInterface.loggerEngine.WARNING("==========================");
for(Character chara : initialDieties){ // for(Character chara : initialDieties){
LoggerInterface.loggerEngine.WARNING("Diety"); // LoggerInterface.loggerEngine.WARNING("Diety");
Diety diety = CharacterUtils.getDiety(chara); // Diety diety = CharacterUtils.getDiety(chara);
for(Symbol symbol : diety.getSymbols()){ // for(Symbol symbol : diety.getSymbols()){
LoggerInterface.loggerEngine.WARNING(symbol.getName() + " "); // LoggerInterface.loggerEngine.WARNING(symbol.getName() + " ");
} // }
LoggerInterface.loggerEngine.WARNING("\n"); // LoggerInterface.loggerEngine.WARNING("\n");
} // }
LoggerInterface.loggerEngine.WARNING("=========================="); LoggerInterface.loggerEngine.WARNING("==========================");
LoggerInterface.loggerEngine.WARNING("\n\n"); LoggerInterface.loggerEngine.WARNING("\n\n");
LoggerInterface.loggerEngine.WARNING("Initial races"); LoggerInterface.loggerEngine.WARNING("Initial races");
@ -258,22 +248,6 @@ public class MacroData {
LoggerInterface.loggerEngine.WARNING("=========================="); LoggerInterface.loggerEngine.WARNING("==========================");
} }
/**
* Gets the characters at a given world position
* @param worldPos The world position
* @return The list of characters occupying that world position
*/
public List<Character> getCharacters(Vector3i worldPos){
List<Character> rVal = new LinkedList<Character>();
for(Character character : Globals.characterService.getAllCharacters()){
if(ServerWorldData.convertRealToChunkSpace(character.getPos()).equals(worldPos.x, worldPos.y, worldPos.z)){
rVal.add(character);
}
}
return rVal;
}
/** /**
* Gets the list of content-blocking macro objects * Gets the list of content-blocking macro objects
* @return The list * @return The list
@ -284,18 +258,4 @@ public class MacroData {
return blockers; return blockers;
} }
/**
* Gets a character by its id
* @param id The id
* @return The character if it exists, null otherwise
*/
public Character getCharacter(int id){
for(Character character : Globals.characterService.getAllCharacters()){
if(character.getId() == id){
return character;
}
}
return null;
}
} }

View File

@ -9,6 +9,7 @@ import electrosphere.server.macro.character.diety.Diety;
import electrosphere.server.macro.race.Race; import electrosphere.server.macro.race.Race;
import electrosphere.server.macro.structure.Structure; import electrosphere.server.macro.structure.Structure;
import electrosphere.server.macro.town.Town; import electrosphere.server.macro.town.Town;
import electrosphere.server.service.CharacterService;
/** /**
* Utility functions for dealing with characters * Utility functions for dealing with characters
@ -55,7 +56,7 @@ public class CharacterUtils {
* @return The character * @return The character
*/ */
public static Character spawnCharacter(Realm realm, Vector3d position){ public static Character spawnCharacter(Realm realm, Vector3d position){
Character rVal = Globals.characterService.createCharacter(null, 0); Character rVal = Globals.characterService.createCharacter(null, CharacterService.NO_PLAYER);
rVal.setPos(position); rVal.setPos(position);
Race.setRace(rVal, Race.create("human", "human")); Race.setRace(rVal, Race.create("human", "human"));
realm.getDataCellManager().evaluateMacroObject(rVal); realm.getDataCellManager().evaluateMacroObject(rVal);

View File

@ -31,7 +31,7 @@ public class PlayerCharacterCreation {
// //
//get template //get template
Character charaData = Globals.characterService.getCharacter(connectionHandler.getPlayer().getDBID(), connectionHandler.getCharacterId()); Character charaData = Globals.characterService.getCharacter(connectionHandler.getCharacterId());
CreatureTemplate template = charaData.getCreatureTemplate(); CreatureTemplate template = charaData.getCreatureTemplate();
if(connectionHandler.getCharacterId() == CharacterProtocol.SPAWN_EXISTING_TEMPLATE){ if(connectionHandler.getCharacterId() == CharacterProtocol.SPAWN_EXISTING_TEMPLATE){
template = connectionHandler.getCurrentCreatureTemplate(); template = connectionHandler.getCurrentCreatureTemplate();
@ -90,7 +90,7 @@ public class PlayerCharacterCreation {
*/ */
static void addPlayerServerBTrees(Entity entity, ServerConnectionHandler serverConnectionHandler){ static void addPlayerServerBTrees(Entity entity, ServerConnectionHandler serverConnectionHandler){
ServerPlayerViewDirTree.attachServerPlayerViewDirTree(entity); ServerPlayerViewDirTree.attachServerPlayerViewDirTree(entity);
ServerCharacterData.attachServerCharacterData(entity, Globals.characterService.getCharacter(serverConnectionHandler.getPlayer().getDBID(), serverConnectionHandler.getCharacterId())); ServerCharacterData.attachServerCharacterData(entity, Globals.characterService.getCharacter(serverConnectionHandler.getCharacterId()));
} }
/** /**
@ -100,7 +100,7 @@ public class PlayerCharacterCreation {
* @return The spawn point for the player * @return The spawn point for the player
*/ */
public static Vector3d solveSpawnPoint(Realm realm, ServerConnectionHandler connectionHandler){ public static Vector3d solveSpawnPoint(Realm realm, ServerConnectionHandler connectionHandler){
Vector3d spawnPoint = Globals.characterService.getCharacter(connectionHandler.getPlayer().getDBID(), connectionHandler.getCharacterId()).getPos(); Vector3d spawnPoint = Globals.characterService.getCharacter(connectionHandler.getCharacterId()).getPos();
if(spawnPoint == null){ if(spawnPoint == null){
spawnPoint = realm.getSpawnPoint(); spawnPoint = realm.getSpawnPoint();
} }

View File

@ -6,6 +6,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import org.joml.Vector3i;
import com.google.gson.Gson; import com.google.gson.Gson;
import electrosphere.engine.Globals; import electrosphere.engine.Globals;
@ -17,6 +19,7 @@ import electrosphere.entity.state.server.ServerCharacterData;
import electrosphere.entity.types.creature.CreatureTemplate; import electrosphere.entity.types.creature.CreatureTemplate;
import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.types.creature.CreatureUtils;
import electrosphere.logger.LoggerInterface; import electrosphere.logger.LoggerInterface;
import electrosphere.server.datacell.ServerWorldData;
import electrosphere.server.db.DatabaseResult; import electrosphere.server.db.DatabaseResult;
import electrosphere.server.db.DatabaseResultRow; import electrosphere.server.db.DatabaseResultRow;
import electrosphere.server.macro.character.Character; import electrosphere.server.macro.character.Character;
@ -27,6 +30,11 @@ import electrosphere.util.SerializationUtils;
*/ */
public class CharacterService extends SignalServiceImpl { public class CharacterService extends SignalServiceImpl {
/**
* Playerid id for a playerless character
*/
public static final int NO_PLAYER = 0;
/** /**
* Map that stores the characters currently loaded into memory * Map that stores the characters currently loaded into memory
*/ */
@ -50,6 +58,9 @@ public class CharacterService extends SignalServiceImpl {
* @param playerId The player's id * @param playerId The player's id
*/ */
public Character createCharacter(CreatureTemplate template, int playerId){ public Character createCharacter(CreatureTemplate template, int playerId){
if(template == null){
throw new Error("Template is null!");
}
lock.lock(); lock.lock();
Character toStore = new Character(template); Character toStore = new Character(template);
DatabaseResult result = Globals.dbController.executePreparedQuery( DatabaseResult result = Globals.dbController.executePreparedQuery(
@ -70,11 +81,10 @@ public class CharacterService extends SignalServiceImpl {
/** /**
* Gets the character * Gets the character
* @param playerId The player's id
* @param characterId The character's id * @param characterId The character's id
* @return The character if it exists, null otherwise * @return The character if it exists, null otherwise
*/ */
public Character getCharacter(int playerId, int characterId){ public Character getCharacter(int characterId){
lock.lock(); lock.lock();
if(loadedCharacterMap.containsKey(characterId)){ if(loadedCharacterMap.containsKey(characterId)){
Character rVal = loadedCharacterMap.get(characterId); Character rVal = loadedCharacterMap.get(characterId);
@ -82,9 +92,9 @@ public class CharacterService extends SignalServiceImpl {
return rVal; return rVal;
} }
Character charData = null; Character charData = null;
DatabaseResult result = Globals.dbController.executePreparedQuery("SELECT id, dataVal FROM charaData WHERE playerId=? AND id=?;",playerId, characterId); DatabaseResult result = Globals.dbController.executePreparedQuery("SELECT id, dataVal FROM charaData WHERE id=?;", characterId);
if(!result.hasResult()){ if(!result.hasResult()){
LoggerInterface.loggerDB.WARNING("Failed to locate creature template for playerId=" + playerId + " characterId=" + characterId); LoggerInterface.loggerDB.WARNING("Failed to locate creature template for characterId=" + characterId);
lock.unlock(); lock.unlock();
return null; return null;
} }
@ -176,4 +186,20 @@ public class CharacterService extends SignalServiceImpl {
return rVal; return rVal;
} }
/**
* Gets the characters at a given world position
* @param worldPos The world position
* @return The list of characters occupying that world position
*/
public List<Character> getCharacters(Vector3i worldPos){
List<Character> rVal = new LinkedList<Character>();
List<Character> allCharacters = this.getAllCharacters();
for(Character character : allCharacters){
if(ServerWorldData.convertRealToChunkSpace(character.getPos()).equals(worldPos.x, worldPos.y, worldPos.z)){
rVal.add(character);
}
}
return rVal;
}
} }

View File

@ -1,5 +1,8 @@
package electrosphere.server.simulation; package electrosphere.server.simulation;
import java.util.List;
import electrosphere.engine.Globals;
import electrosphere.server.macro.character.Character; import electrosphere.server.macro.character.Character;
import electrosphere.server.macro.character.data.CharacterDataStrings; import electrosphere.server.macro.character.data.CharacterDataStrings;
@ -11,17 +14,20 @@ public class MacroSimulation {
/** /**
* Tracks whether the macro simulation is ready or not * Tracks whether the macro simulation is ready or not
*/ */
boolean isReady = false; private boolean isReady = false;
/** /**
* Iterates the macro simulation * Iterates the macro simulation
*/ */
public void simulate(){ public void simulate(){
// for(Character character : Globals.macroData.getAliveCharacters()){ List<Character> characters = Globals.characterService.getAllCharacters();
// //do something if(characters != null && characters.size() > 0){
// MacroSimulation.checkForShelter(character); for(Character character : Globals.characterService.getAllCharacters()){
// MacroSimulation.checkTownMembership(character); //do something
// } MacroSimulation.checkForShelter(character);
MacroSimulation.checkTownMembership(character);
}
}
} }
/** /**