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

This commit is contained in:
austin 2024-09-15 10:56:09 -04:00
parent efd2ff1bb7
commit 79e2fdf512
11 changed files with 80 additions and 55 deletions

View File

@ -110,15 +110,15 @@
"idleAnim" : "Idle",
"collidable": {
"type" : "CUBE",
"dimension1" : 0.03,
"dimension2" : 0.03,
"dimension3" : 0.2,
"dimension1" : 0.04,
"dimension2" : 0.04,
"dimension3" : 0.8,
"rotX": 0,
"rotY": 0,
"rotZ": 0,
"rotW": 1,
"offsetX" : 0.0,
"offsetY" : 0.05,
"offsetY" : 0.0,
"offsetZ" : 0.0
},
"iconPath" : "Textures/icons/itemIconWeapon.png"

View File

@ -25,25 +25,21 @@ A list of all creatures that are targets for the game, and what their status of
## Deer
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data
## Bird
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data
## Bat
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data
## Wolf
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data
@ -75,31 +71,26 @@ A list of all creatures that are targets for the game, and what their status of
## Chicken
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data
## Slime
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data
## Rat
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data
## Boar
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data
## Spider
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data
@ -141,6 +132,5 @@ A list of all creatures that are targets for the game, and what their status of
## Raptor
- [ ] 3d Model
- [ ] Viewmodel
- [ ] Data

View File

@ -4,7 +4,7 @@ Progress on the human creature
## Third Person Model
- [X] Meshed
- [ ] Textured
- [X] Textured
- [X] Rigged
- Animations
- Common
@ -173,20 +173,20 @@ Progress on the human creature
- [ ] Ride Glider
- Attributes 0/0
## Data
- [ ] Bone Groups
- [ ] Physics
- [X] Bone Groups
- [X] Physics
- [ ] Visual Attributes
- Movement
- [ ] Ground Movement
- [ ] Sprinting
- [ ] Jumping
- [ ] Falling
- [ ] Walking
- [ ] Swimming
- [ ] Equip Data
- [ ] Hitboxes
- [X] Ground Movement
- [X] Sprinting
- [X] Jumping
- [X] Falling
- [X] Walking
- [X] Swimming
- [X] Equip Data
- [X] Hitboxes
- Combat
- [ ] Health
- [ ] Block System
- [ ] Attack Moves
- [ ] AI
- [X] Health
- [X] Block System
- [X] Attack Moves
- [X] AI

View File

@ -7,15 +7,32 @@
+ on clearing the tutorial, continue the game when the sword is equipped, create another popup to teach sword controls. it pauses the game
+ when popup is accepted, spawn an enemy with an effect
Script engine ability to spawn entities
Particles and particle manager
+ rearchitecture
Particles and particle manager
+ fix the vibes
Hitstun
Ticketed randomizer node for BTs to more heavily weight attacking and waiting
+ feedback driven requirements
Much much much much more UI sound effects
Combine inventory menus into one ui
UI spacing and scaling
Come up with a title for the game and create a title menu for it (ideally with some animation and music)
Better skybox
Model clothing, hair for the human
Hitstun, particles, light on sword collision
Idle viewmodel does not show hands
Add punching/unarmed combat
Crouching
Objectives
- PVP arena mode initially?
- Spawn player at start of a dungeon
- Spawn player in a town with a quest to complete a nearby dungeon
+ bug fixes
Fix local connection showing equipped item in natural inventory
Fix return to title menu synchronization bug
+ unreproducible bugs

View File

@ -758,6 +758,13 @@ More animations
Skeleton 3rd person model
NPE fixes in hitbox collection state + commonentityutils
Debug menu ability to play animation locally or on server
Documentation updates
(09/15/2024)
Fix movement packet timing bug
Fix all items spawning above player head
Fix items falling below terrain
Fix gridded data cell manager saving attached items on realm save
# TODO
@ -788,20 +795,22 @@ Startup Performance
- Cache loaded typescript
- Allow texture map to bind multiple model paths to a single set of mesh->textures
- Cache texture atlas for terrain
- Separate thread loads non-critical assets async while on title menu, but blocks main game display until completed
- Voxel caching and compression over network
- Easiest one is if sending all air, send single byte
- Proactively send chunks on player loading in (ie, send all chunks that are all air before its even requested)
- Also send all 'dirt' or 'stone' chunks
Code Generation
- Generate static "hasXComponent", "getXComponent" functions on sync'd components
Rearchitecting
- Main render is a ui element (that we can have multiple of)
- Don't require player entity/camera for client-side logic
- "Viewport Testing" - where we can run a test that observes a scene on client without having a client-player-assigned entity
- This will require allowing the server to assign a player to data cells without the player having an entity -- this is what i mean by decoupling entity/player
Code cleanup
- Rename "BehaviorTree" to be "Component" (what it actually is)
- Refactor ground movement components
- Refactor menu clases under electrosphere.client package
- Refactor menu clases to be under electrosphere.client package
Goof off today requirements:
Transvoxel implementation
@ -824,9 +833,6 @@ Bug fixes
- The quads are off screen because the calculation for ndcX/ndcY are putting it wayyy to the right -- will need to revisit calcs for all that
- Fix being able to walk off far side of the world (ie in level editor)
Grass System properly LOD
- Have foliage dynamically time out cells to be reconsidered based on distance from player (if close, short cooldown, if far long cooldown)
Debug
- Draw all bones with orientations

View File

@ -606,15 +606,16 @@ public class CollisionEngine {
* Ray casts into the scene and gets the position of the closest collision's position in world space.
* Will collide with any collidable types including characters and items.
* @param start The start position of the ray to cast
* @param direction The direction of the ray to cast
* @param direction The direction of the ray to cast (this will automatically be converted into a unit vector if it isn't already)
* @param length The length of the ray to cast
* @return The position, in world coordinates, of the closest collision of the way, or null if it did not collide with anything.
*/
public Vector3d rayCastPosition(Vector3d start, Vector3d direction, double length){
spaceLock.acquireUninterruptibly();
Vector3d unitDir = new Vector3d(direction).normalize();
//create the ray
DRay ray = OdeHelper.createRay(space, length);
ray.set(start.x, start.y, start.z, direction.x, direction.y, direction.z);
ray.set(start.x, start.y, start.z, unitDir.x, unitDir.y, unitDir.z);
//collide
RayCastCallbackData data = new RayCastCallbackData(bodyPointerMap, null);
rayCastCallback.setLength(length);

View File

@ -249,27 +249,27 @@ public class ClientGroundMovementTree implements BehaviorTree {
// System.out.println("MOVE to " + message.getX() + " " + message.getY() + " " + message.getZ());
switch(message.getMessageSubtype()){
case MOVEUPDATE:
if(updateTime > lastUpdateTime){
if(updateTime >= lastUpdateTime){
lastUpdateTime = updateTime;
switch(message.gettreeState()){
case 0:
state = MovementTreeState.STARTUP;
// System.out.println("Set state STARTUP");
// System.out.println("Set state STARTUP");
GravityUtils.clientAttemptActivateGravity(parent);
break;
case 1:
state = MovementTreeState.MOVE;
// System.out.println("Set state MOVE");
// System.out.println("Set state MOVE");
GravityUtils.clientAttemptActivateGravity(parent);
break;
case 2:
state = MovementTreeState.SLOWDOWN;
// System.out.println("Set state SLOWDOWN");
// System.out.println("Set state SLOWDOWN");
GravityUtils.clientAttemptActivateGravity(parent);
break;
case 3:
state = MovementTreeState.IDLE;
// System.out.println("Set state IDLE");
// System.out.println("Set state IDLE");
break;
}
//this should only fire on the client, we don't want the server snap updating due to client position reporting

View File

@ -226,9 +226,11 @@ public class ServerGroundMovementTree implements BehaviorTree {
switch(message.gettreeState()){
//0 is startup
case 0: {
// System.out.println("Receive move packet from client treestate " + message.gettreeState());
start(ClientGroundMovementTree.getMovementRelativeFacingShortAsEnum((short)message.getpropertyValueInt()));
} break;
case 2: {
// System.out.println("Receive move packet from client treestate " + message.gettreeState());
slowdown();
} break;
default: {

View File

@ -6,6 +6,7 @@ import org.joml.Vector3d;
import org.joml.Vector3f;
import electrosphere.client.entity.camera.CameraEntityUtils;
import electrosphere.collision.CollisionEngine;
import electrosphere.engine.Globals;
import electrosphere.engine.signal.Signal.SignalType;
import electrosphere.entity.Entity;
@ -174,7 +175,8 @@ public class MenuGeneratorsLevelEditor {
Vector3d eyePos = new Vector3d(CameraEntityUtils.getCameraEye(Globals.playerCamera));
Vector3d centerPos = new Vector3d(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
Realm realm = Globals.realmManager.getRealms().iterator().next();
Vector3d cursorPos = realm.getCollisionEngine().rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0).add(cursorVerticalOffset);
CollisionEngine clientCollisionEngine = Globals.clientSceneWrapper.getCollisionEngine(); //using client collision engine so ray doesn't collide with player entity
Vector3d cursorPos = clientCollisionEngine.rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0).add(cursorVerticalOffset);
CreatureUtils.serverSpawnBasicCreature(realm, cursorPos, data.getId(), null);
}));
}
@ -203,7 +205,8 @@ public class MenuGeneratorsLevelEditor {
Vector3d eyePos = new Vector3d(CameraEntityUtils.getCameraEye(Globals.playerCamera));
Vector3d centerPos = new Vector3d(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
Realm realm = Globals.realmManager.getRealms().iterator().next();
Vector3d cursorPos = realm.getCollisionEngine().rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0);
CollisionEngine clientCollisionEngine = Globals.clientSceneWrapper.getCollisionEngine(); //using client collision engine so ray doesn't collide with player entity
Vector3d cursorPos = clientCollisionEngine.rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0);
if(cursorPos == null){
cursorPos = new Vector3d(centerPos).add(new Vector3d(eyePos).mul(-5.0));
}
@ -235,7 +238,8 @@ public class MenuGeneratorsLevelEditor {
Vector3d eyePos = new Vector3d(CameraEntityUtils.getCameraEye(Globals.playerCamera));
Vector3d centerPos = new Vector3d(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
Realm realm = Globals.realmManager.getRealms().iterator().next();
Vector3d cursorPos = realm.getCollisionEngine().rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0).add(cursorVerticalOffset);
CollisionEngine clientCollisionEngine = Globals.clientSceneWrapper.getCollisionEngine(); //using client collision engine so ray doesn't collide with player entity
Vector3d cursorPos = clientCollisionEngine.rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0).add(cursorVerticalOffset);
FoliageUtils.serverSpawnTreeFoliage(realm, cursorPos, data.getId(), new Random().nextLong());
}));
}
@ -263,7 +267,8 @@ public class MenuGeneratorsLevelEditor {
Vector3d eyePos = new Vector3d(CameraEntityUtils.getCameraEye(Globals.playerCamera));
Vector3d centerPos = new Vector3d(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
Realm realm = Globals.realmManager.getRealms().iterator().next();
Vector3d cursorPos = realm.getCollisionEngine().rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0).add(cursorVerticalOffset);
CollisionEngine clientCollisionEngine = Globals.clientSceneWrapper.getCollisionEngine(); //using client collision engine so ray doesn't collide with player entity
Vector3d cursorPos = clientCollisionEngine.rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0).add(cursorVerticalOffset);
ItemUtils.serverSpawnBasicItem(realm, cursorPos, item.getId());
}));
}
@ -292,7 +297,8 @@ public class MenuGeneratorsLevelEditor {
Vector3d eyePos = new Vector3d(CameraEntityUtils.getCameraEye(Globals.playerCamera));
Vector3d centerPos = new Vector3d(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
Realm realm = Globals.realmManager.getRealms().iterator().next();
Vector3d cursorPos = realm.getCollisionEngine().rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0).add(cursorVerticalOffset);
CollisionEngine clientCollisionEngine = Globals.clientSceneWrapper.getCollisionEngine(); //using client collision engine so ray doesn't collide with player entity
Vector3d cursorPos = clientCollisionEngine.rayCastPosition(new Vector3d(centerPos), new Vector3d(eyePos).mul(-1.0), 5.0).add(cursorVerticalOffset);
CommonEntityUtils.serverSpawnBasicObject(realm, cursorPos, object.getId());
}));
}

View File

@ -5,6 +5,7 @@ import java.util.List;
import electrosphere.entity.Entity;
import electrosphere.entity.EntityUtils;
import electrosphere.entity.state.attach.AttachUtils;
import electrosphere.entity.state.equip.ServerEquipState;
import electrosphere.entity.state.inventory.InventoryUtils;
import electrosphere.entity.types.EntityTypes;
@ -53,12 +54,14 @@ public class ContentSerialization {
rVal.serializedEntities.add(serializedEntity);
} break;
case ITEM: {
EntitySerialization serializedEntity = new EntitySerialization();
serializedEntity.setPosition(EntityUtils.getPosition(entity));
serializedEntity.setRotation(EntityUtils.getRotation(entity));
serializedEntity.setType(EntityType.ITEM.getValue());
serializedEntity.setSubtype(CommonEntityUtils.getEntitySubtype(entity));
rVal.serializedEntities.add(serializedEntity);
if(!AttachUtils.isAttached(entity)){
EntitySerialization serializedEntity = new EntitySerialization();
serializedEntity.setPosition(EntityUtils.getPosition(entity));
serializedEntity.setRotation(EntityUtils.getRotation(entity));
serializedEntity.setType(EntityType.ITEM.getValue());
serializedEntity.setSubtype(CommonEntityUtils.getEntitySubtype(entity));
rVal.serializedEntities.add(serializedEntity);
}
} break;
case FOLIAGE: {
EntitySerialization serializedEntity = new EntitySerialization();