Compare commits
6 Commits
db043eda43
...
b9f0eef20e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9f0eef20e | ||
|
|
496172680f | ||
|
|
ef724d3832 | ||
|
|
ad1f65aca6 | ||
|
|
35aec8affe | ||
|
|
1cb93b04f6 |
@ -2,8 +2,8 @@
|
||||
"gameplayGenerateWorld" : false,
|
||||
"gameplayPhysicsCellRadius" : 2,
|
||||
|
||||
"displayWidth" : 1920,
|
||||
"displayHeight" : 1080,
|
||||
"displayWidth" : 2560,
|
||||
"displayHeight" : 1600,
|
||||
"displayFullscreen" : false,
|
||||
|
||||
"graphicsFOV" : 100.0,
|
||||
@ -15,8 +15,8 @@
|
||||
"graphicsPerformanceOIT" : true,
|
||||
"graphicsViewRange" : 20000.0,
|
||||
|
||||
"renderResolutionX": 1920,
|
||||
"renderResolutionY": 1080,
|
||||
"renderResolutionX": 2560,
|
||||
"renderResolutionY": 1600,
|
||||
|
||||
"graphicsDebugDrawCollisionSpheresClient" : false,
|
||||
"graphicsDebugDrawCollisionSpheresServer" : false,
|
||||
|
||||
@ -117,6 +117,7 @@
|
||||
"model": {
|
||||
"idleData": {
|
||||
"animation": {
|
||||
"nameFirstPerson" : "Idle",
|
||||
"nameThirdPerson" : "Idle",
|
||||
"priorityCategory" : "IDLE"
|
||||
}
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
#maven.buildNumber.plugin properties file
|
||||
#Fri Sep 20 15:37:40 EDT 2024
|
||||
buildNumber=359
|
||||
#Mon Oct 21 09:58:24 EDT 2024
|
||||
buildNumber=363
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
- Decoy (creates a decoy)
|
||||
- Torch
|
||||
- Throwable potions
|
||||
Fix ui scaling on abnormal monitors
|
||||
Crouching
|
||||
Model clothing, hair for the human
|
||||
particles, light on sword collision
|
||||
@ -44,11 +43,13 @@
|
||||
- Spawn player in a town with a quest to complete a nearby dungeon
|
||||
|
||||
+ bug fixes
|
||||
Fix idle animations
|
||||
Fix light cluster mapping for foliage shader
|
||||
Fix foliage placement
|
||||
Fix lights not being deleted
|
||||
- Not sending a "light count" var to light calculations, so the data stays in buffer even though it is not being updated
|
||||
Fix block tree preventing initiating an attack
|
||||
Fix equipping sword on toolbar
|
||||
Fix return to title menu synchronization bug
|
||||
Fix particles not spawning in correct positions
|
||||
|
||||
+ unreproducible bugs
|
||||
|
||||
@ -870,6 +870,20 @@ Camera offset definitions in entity files
|
||||
Non-Lsystem pine tree
|
||||
Potential fix for ground audio bug
|
||||
|
||||
(10/20/2024)
|
||||
Fix SP debug launcher actually entering world
|
||||
Fix virtual scrollable clipping logic
|
||||
Fix ui scaling on abnormal monitors
|
||||
- This is literally just a function of the settings file not being updated for different resolutions
|
||||
Fix inventory null pointer check on virtualaudiomanager
|
||||
|
||||
(10/21/2024)
|
||||
Fix inventory message for undefined id on client
|
||||
Fix movement audio service when audio engine disabled
|
||||
Fix idle animations (for katana)
|
||||
|
||||
|
||||
|
||||
# TODO
|
||||
|
||||
|
||||
|
||||
@ -153,9 +153,11 @@ public class MovementAudioService {
|
||||
* @param type The interaction type
|
||||
*/
|
||||
public void playAudio(int voxelType, InteractionType type){
|
||||
String audioPath = this.getAudioPath(voxelType, type);
|
||||
if(audioPath != null){
|
||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(audioPath, VirtualAudioSourceType.CREATURE, false);
|
||||
if(Globals.RUN_AUDIO){
|
||||
String audioPath = this.getAudioPath(voxelType, type);
|
||||
if(audioPath != null){
|
||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(audioPath, VirtualAudioSourceType.CREATURE, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -166,9 +168,11 @@ public class MovementAudioService {
|
||||
* @param position The position of the audio
|
||||
*/
|
||||
public void playAudioPositional(int voxelType, InteractionType type, Vector3d position){
|
||||
String audioPath = this.getAudioPath(voxelType, type);
|
||||
if(audioPath != null){
|
||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(audioPath, VirtualAudioSourceType.CREATURE, false, position);
|
||||
if(Globals.RUN_AUDIO){
|
||||
String audioPath = this.getAudioPath(voxelType, type);
|
||||
if(audioPath != null){
|
||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(audioPath, VirtualAudioSourceType.CREATURE, false, position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -161,7 +161,7 @@ public class Globals {
|
||||
public static boolean RUN_DEMO = false;
|
||||
public static boolean RUN_CLIENT = true;
|
||||
public static boolean RUN_HIDDEN = false; //glfw session will be created with hidden window
|
||||
public static boolean RUN_AUDIO = true;
|
||||
public static boolean RUN_AUDIO = false;
|
||||
public static boolean RUN_SCRIPTS = true;
|
||||
public static int clientCharacterID;
|
||||
public static NetConfig netConfig = null;
|
||||
|
||||
@ -192,10 +192,10 @@ public class LoadingUtils {
|
||||
}
|
||||
|
||||
static void initMacroSimulation(){
|
||||
Globals.macroData = MacroData.generateWorld(0);
|
||||
// Globals.macroData = MacroData.generateWorld(0);
|
||||
// Globals.macroData.describeWorld();
|
||||
Globals.macroSimulation = new MacroSimulation();
|
||||
Globals.macroSimulation.simulate();
|
||||
// Globals.macroSimulation = new MacroSimulation();
|
||||
// Globals.macroSimulation.simulate();
|
||||
// Town startTown = Globals.macroData.getTowns().get(0);
|
||||
// Vector2i firstPos = startTown.getPositions().get(0);
|
||||
// double startX = firstPos.x * Globals.serverTerrainManager.getChunkWidth();
|
||||
|
||||
@ -1,12 +1,6 @@
|
||||
package electrosphere.entity.scene;
|
||||
|
||||
import electrosphere.game.server.world.ServerWorldData;
|
||||
import electrosphere.server.datacell.GriddedDataCellManager;
|
||||
import electrosphere.server.fluid.generation.DefaultFluidGenerator;
|
||||
import electrosphere.server.fluid.manager.ServerFluidManager;
|
||||
import electrosphere.server.terrain.generation.OverworldChunkGenerator;
|
||||
import electrosphere.server.terrain.manager.ServerTerrainManager;
|
||||
import electrosphere.util.FileUtils;
|
||||
|
||||
/**
|
||||
* Generates scene files where appropriate (ie, if playing the procedurally generated level)
|
||||
@ -27,17 +21,6 @@ public class SceneGenerator {
|
||||
file.createSaveInstance = true; //won't have a predefined scene to load, so must create one in the save
|
||||
file.loadAllCells = false; // do not load all cells on init
|
||||
|
||||
//create terrain
|
||||
ServerWorldData serverWorldData = ServerWorldData.createGriddedRealmWorldData(2000);
|
||||
ServerTerrainManager serverTerrainManager = new ServerTerrainManager(serverWorldData, 0, new OverworldChunkGenerator());
|
||||
serverTerrainManager.generate();
|
||||
serverTerrainManager.save(saveName);
|
||||
//create world.json
|
||||
FileUtils.serializeObjectToSavePath(saveName, "./world.json", serverWorldData);
|
||||
//create mock fluid sim manager
|
||||
ServerFluidManager serverFluidManager = new ServerFluidManager(serverWorldData, serverTerrainManager, 0, new DefaultFluidGenerator());
|
||||
serverFluidManager.save(saveName);
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
|
||||
@ -78,8 +78,11 @@ public class SceneLoader {
|
||||
}
|
||||
} break;
|
||||
case RealmDescriptor.REALM_DESCRIPTOR_PROCEDURAL: {
|
||||
realm = Globals.realmManager.createRealm();
|
||||
realm = Globals.realmManager.createGriddedRealm(serverWorldData,serverContentManager);
|
||||
} break;
|
||||
default: {
|
||||
throw new Error("Unhandled case! " + file.realmDescriptor.getType());
|
||||
}
|
||||
}
|
||||
//spawn initial entities
|
||||
for(EntityDescriptor descriptor : file.getEntities()){
|
||||
|
||||
@ -113,6 +113,7 @@ public class ClientParticleEmitterComponent implements BehaviorTree {
|
||||
Globals.clientSceneWrapper.getScene().registerBehaviorTree(rVal);
|
||||
return rVal;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Detatches this tree from the entity.
|
||||
@ -122,6 +123,7 @@ public class ClientParticleEmitterComponent implements BehaviorTree {
|
||||
*/
|
||||
public static void detachTree(Entity entity, BehaviorTree tree){
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Gets the ClientEquipState of the entity
|
||||
@ -132,4 +134,5 @@ public class ClientParticleEmitterComponent implements BehaviorTree {
|
||||
public static ClientEquipState getClientEquipState(Entity entity){
|
||||
return (ClientEquipState)entity.getData(EntityDataStrings.TREE_CLIENTPARTICLEEMITTERSTATE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -10,7 +10,6 @@ import electrosphere.entity.EntityDataStrings;
|
||||
import electrosphere.entity.EntityUtils;
|
||||
import electrosphere.entity.btree.BehaviorTree;
|
||||
import electrosphere.entity.types.creature.CreatureUtils;
|
||||
import electrosphere.game.data.creature.type.CreatureData;
|
||||
import electrosphere.game.data.creature.type.IdleData;
|
||||
import electrosphere.net.synchronization.annotation.SyncedField;
|
||||
import electrosphere.net.synchronization.annotation.SynchronizableEnum;
|
||||
@ -42,15 +41,12 @@ public class ClientIdleTree implements BehaviorTree {
|
||||
* Creates an idle tree
|
||||
* @param e the entity to attach the tree to
|
||||
*/
|
||||
public ClientIdleTree(Entity e, Object ... params){
|
||||
private ClientIdleTree(Entity e, Object ... params){
|
||||
state = IdleTreeState.IDLE;
|
||||
parent = e;
|
||||
//check if this is a creature, if so add its idle data
|
||||
CreatureData creatureType = Globals.gameConfigCurrent.getCreatureTypeLoader().getType(CreatureUtils.getType(parent));
|
||||
if(creatureType != null){
|
||||
idleData = creatureType.getGraphicsTemplate().getModel().getIdleData();
|
||||
if(params.length > 0 && params[0] instanceof IdleData){
|
||||
idleData = (IdleData)params[0];
|
||||
}
|
||||
//TODO: if object, check if object has idle data and add accordingly
|
||||
}
|
||||
|
||||
/**
|
||||
@ -112,6 +108,8 @@ public class ClientIdleTree implements BehaviorTree {
|
||||
rVal = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rVal = true;
|
||||
}
|
||||
return rVal;
|
||||
}
|
||||
|
||||
@ -150,6 +150,8 @@ public class ServerIdleTree implements BehaviorTree {
|
||||
rVal = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rVal = true;
|
||||
}
|
||||
return rVal;
|
||||
}
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package electrosphere.entity.state.inventory;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import electrosphere.client.ui.menu.WindowUtils;
|
||||
@ -35,6 +37,7 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
|
||||
@Override
|
||||
public void simulate(float deltaTime) {
|
||||
List<InventoryMessage> bouncedMessages = new LinkedList<InventoryMessage>();
|
||||
for(InventoryMessage message : networkMessageQueue){
|
||||
networkMessageQueue.remove(message);
|
||||
switch(message.getMessageSubtype()){
|
||||
@ -153,10 +156,10 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
//translate id
|
||||
Globals.clientSceneWrapper.mapIdToId(inWorldEntity.getId(), message.getentityId());
|
||||
switch(message.getcontainerType()){
|
||||
case electrosphere.net.server.protocol.InventoryProtocol.INVENTORY_TYPE_NATURAL: {
|
||||
case InventoryProtocol.INVENTORY_TYPE_NATURAL: {
|
||||
throw new UnsupportedOperationException("unsupported!");
|
||||
}
|
||||
case electrosphere.net.server.protocol.InventoryProtocol.INVENTORY_TYPE_EQUIP: {
|
||||
case InventoryProtocol.INVENTORY_TYPE_EQUIP: {
|
||||
//grab equip state
|
||||
ClientEquipState equipState = ClientEquipState.getEquipState(equipper);
|
||||
//create entity from template in message
|
||||
@ -165,16 +168,17 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
EquipPoint equipPoint = equipState.getEquipPoint(equipPointName);
|
||||
//attach
|
||||
equipState.attemptEquip(inWorldEntity, equipPoint);
|
||||
}
|
||||
case electrosphere.net.server.protocol.InventoryProtocol.INVENTORY_TYPE_TOOLBAR: {
|
||||
} break;
|
||||
case InventoryProtocol.INVENTORY_TYPE_TOOLBAR: {
|
||||
//grab toolbar state
|
||||
ClientToolbarState toolbarState = ClientToolbarState.getClientToolbarState(equipper);
|
||||
//attach
|
||||
toolbarState.attemptEquip(inWorldEntity);
|
||||
}
|
||||
} break;
|
||||
}
|
||||
} else {
|
||||
throw new UnsupportedOperationException("todo");
|
||||
bouncedMessages.add(message);
|
||||
// throw new UnsupportedOperationException("TODO: in world item is null");
|
||||
}
|
||||
} break;
|
||||
case CLIENTUPDATETOOLBAR:
|
||||
@ -186,6 +190,7 @@ public class ClientInventoryState implements BehaviorTree {
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.networkMessageQueue.addAll(bouncedMessages);
|
||||
}
|
||||
|
||||
public void addNetworkMessage(InventoryMessage networkMessage) {
|
||||
|
||||
@ -152,9 +152,10 @@ public class CommonEntityUtils {
|
||||
}
|
||||
//idle tree & generic stuff all creatures have
|
||||
if(graphicsTemplate.getModel() != null && graphicsTemplate.getModel().getIdleData() != null){
|
||||
ClientIdleTree idleTree = new ClientIdleTree(entity);
|
||||
entity.putData(EntityDataStrings.TREE_IDLE, idleTree);
|
||||
Globals.clientScene.registerBehaviorTree(idleTree);
|
||||
ClientIdleTree.attachTree(entity, graphicsTemplate.getModel().getIdleData());
|
||||
// ClientIdleTree idleTree = new ClientIdleTree(entity);
|
||||
// entity.putData(EntityDataStrings.TREE_IDLE, idleTree);
|
||||
// Globals.clientScene.registerBehaviorTree(idleTree);
|
||||
}
|
||||
}
|
||||
Actor creatureActor = EntityUtils.getActor(entity);
|
||||
|
||||
@ -152,10 +152,10 @@ public class Actor {
|
||||
return false;
|
||||
}
|
||||
for(ActorAnimationMask mask : animationQueue){
|
||||
if(mask.getAnimationName().contains(animationData.getNameFirstPerson())){
|
||||
if(animationData.getNameFirstPerson() != null && mask.getAnimationName().contains(animationData.getNameFirstPerson())){
|
||||
return true;
|
||||
}
|
||||
if(mask.getAnimationName().contains(animationData.getNameThirdPerson())){
|
||||
if(animationData.getNameThirdPerson() != null && mask.getAnimationName().contains(animationData.getNameThirdPerson())){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -200,10 +200,12 @@ public class ToolbarInventoryPanel {
|
||||
}
|
||||
}
|
||||
Item itemData = Globals.gameConfigCurrent.getItemMap().getItem(ItemUtils.getType(Globals.draggedItem));
|
||||
if(itemData.getItemAudio() != null && itemData.getItemAudio().getUIReleaseAudio() != null){
|
||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(itemData.getItemAudio().getUIReleaseAudio(), VirtualAudioSourceType.UI, false);
|
||||
} else {
|
||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(AssetDataStrings.UI_SFX_ITEM_RELEASE, VirtualAudioSourceType.UI, false);
|
||||
if(Globals.virtualAudioSourceManager != null){
|
||||
if(itemData.getItemAudio() != null && itemData.getItemAudio().getUIReleaseAudio() != null){
|
||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(itemData.getItemAudio().getUIReleaseAudio(), VirtualAudioSourceType.UI, false);
|
||||
} else {
|
||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(AssetDataStrings.UI_SFX_ITEM_RELEASE, VirtualAudioSourceType.UI, false);
|
||||
}
|
||||
}
|
||||
//update ui
|
||||
Globals.dragSourceInventory = null;
|
||||
|
||||
@ -66,7 +66,7 @@ public class VirtualScrollable extends StandardContainerElement implements Drawa
|
||||
*/
|
||||
private boolean childIsInBounds(DrawableElement element){
|
||||
boolean rVal = true;
|
||||
if(element.getAbsoluteX() + scroll < 0 ||element.getAbsoluteY() + scroll > this.getHeight()){
|
||||
if(element.getAbsoluteY() + scroll < this.getAbsoluteY() || element.getAbsoluteY() + scroll > this.getHeight() + this.getAbsoluteY()){
|
||||
return false;
|
||||
}
|
||||
return rVal;
|
||||
|
||||
@ -99,6 +99,7 @@ public class SaveUtils {
|
||||
|
||||
//create save file
|
||||
Save save = new Save(saveName);
|
||||
Globals.currentSave = save; //chunk map saving requires global save to be set
|
||||
FileUtils.serializeObjectToSavePath(saveName, "/save.json", save);
|
||||
|
||||
//write scene file
|
||||
|
||||
Loading…
Reference in New Issue
Block a user