Synchronization codegen work
This commit is contained in:
parent
058c6ac3d9
commit
7d4b3b1a97
@ -0,0 +1,21 @@
|
|||||||
|
package electrosphere.entity.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
/**
|
||||||
|
* A field in a synchronized behavior tree that is synchronized between the server and the client.
|
||||||
|
*/
|
||||||
|
public @interface SyncedField {
|
||||||
|
|
||||||
|
//True if the field is an enum
|
||||||
|
boolean isEnum() default false;
|
||||||
|
|
||||||
|
//if the field is an enum, this value is MANDETORY. Determines what id will be set to when serialized/deserialized
|
||||||
|
int enumId() default 0;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
package electrosphere.entity.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
/**
|
||||||
|
* A behavior tree that will have modifications by code generation.
|
||||||
|
* It is synchronized between the server and client with auto-generated netcode.
|
||||||
|
*/
|
||||||
|
public @interface SynchronizedBehaviorTree {
|
||||||
|
|
||||||
|
//The name of the behavior tree
|
||||||
|
public String name() default "";
|
||||||
|
|
||||||
|
//True if this is a server-side behavior tree
|
||||||
|
public boolean isServer() default false;
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,7 +1,14 @@
|
|||||||
package electrosphere.entity.state;
|
package electrosphere.entity.state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A behavior tree
|
||||||
|
*/
|
||||||
public interface BehaviorTree {
|
public interface BehaviorTree {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simulates the behavior tree
|
||||||
|
* @param deltaTime The time since the last call to the simulate function
|
||||||
|
*/
|
||||||
public void simulate(float deltaTime);
|
public void simulate(float deltaTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +0,0 @@
|
|||||||
package electrosphere.entity.state;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Target(ElementType.TYPE)
|
|
||||||
public @interface BehaviorTreeAnnotation {
|
|
||||||
|
|
||||||
public String name() default "";
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
package electrosphere.entity.state;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Target(ElementType.FIELD)
|
|
||||||
public @interface SyncedField {
|
|
||||||
|
|
||||||
boolean isEnum() default false;
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,8 +1,6 @@
|
|||||||
package electrosphere.entity.state.idle;
|
package electrosphere.entity.state.idle;
|
||||||
|
|
||||||
import electrosphere.entity.state.BehaviorTree;
|
import electrosphere.entity.state.BehaviorTree;
|
||||||
import electrosphere.entity.state.BehaviorTreeAnnotation;
|
|
||||||
import electrosphere.entity.state.SyncedField;
|
|
||||||
import electrosphere.entity.state.attack.AttackTree;
|
import electrosphere.entity.state.attack.AttackTree;
|
||||||
import electrosphere.entity.state.attack.AttackTree.AttackTreeState;
|
import electrosphere.entity.state.attack.AttackTree.AttackTreeState;
|
||||||
import electrosphere.entity.state.movement.AirplaneMovementTree;
|
import electrosphere.entity.state.movement.AirplaneMovementTree;
|
||||||
@ -11,24 +9,28 @@ import electrosphere.engine.Globals;
|
|||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
import electrosphere.entity.EntityDataStrings;
|
import electrosphere.entity.EntityDataStrings;
|
||||||
import electrosphere.entity.EntityUtils;
|
import electrosphere.entity.EntityUtils;
|
||||||
|
import electrosphere.entity.annotation.SyncedField;
|
||||||
|
import electrosphere.entity.annotation.SynchronizedBehaviorTree;
|
||||||
import electrosphere.entity.state.movement.GroundMovementTree.MovementTreeState;
|
import electrosphere.entity.state.movement.GroundMovementTree.MovementTreeState;
|
||||||
import electrosphere.entity.types.creature.CreatureUtils;
|
import electrosphere.entity.types.creature.CreatureUtils;
|
||||||
import electrosphere.net.parser.net.message.EntityMessage;
|
import electrosphere.net.parser.net.message.EntityMessage;
|
||||||
import electrosphere.renderer.actor.Actor;
|
import electrosphere.renderer.actor.Actor;
|
||||||
import electrosphere.renderer.anim.Animation;
|
import electrosphere.renderer.anim.Animation;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import org.joml.Vector3d;
|
import org.joml.Vector3d;
|
||||||
|
|
||||||
|
|
||||||
@BehaviorTreeAnnotation(name="idle")
|
@SynchronizedBehaviorTree(name = "idle", isServer = false)
|
||||||
public class IdleTree {
|
public class IdleTree implements BehaviorTree {
|
||||||
|
|
||||||
public static enum IdleTreeState {
|
public static enum IdleTreeState {
|
||||||
IDLE,
|
IDLE,
|
||||||
NOT_IDLE,
|
NOT_IDLE,
|
||||||
}
|
}
|
||||||
|
|
||||||
@SyncedField(isEnum = true)
|
@SyncedField(isEnum = true, enumId = 0)
|
||||||
IdleTreeState state;
|
IdleTreeState state;
|
||||||
|
|
||||||
Entity parent;
|
Entity parent;
|
||||||
@ -45,8 +47,8 @@ public class IdleTree {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IdleTreeState getState(){
|
public IdleTreeState getState(){
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(){
|
public void start(){
|
||||||
//TODO: check if can start moving
|
//TODO: check if can start moving
|
||||||
@ -62,6 +64,7 @@ public class IdleTree {
|
|||||||
state = IdleTreeState.NOT_IDLE;
|
state = IdleTreeState.NOT_IDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void simulate(float deltaTime){
|
public void simulate(float deltaTime){
|
||||||
Actor entityActor = EntityUtils.getActor(parent);
|
Actor entityActor = EntityUtils.getActor(parent);
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
package electrosphere.entity.state.idle;
|
package electrosphere.entity.state.idle;
|
||||||
|
|
||||||
import electrosphere.entity.state.BehaviorTree;
|
import electrosphere.entity.state.BehaviorTree;
|
||||||
import electrosphere.entity.state.BehaviorTreeAnnotation;
|
|
||||||
import electrosphere.entity.state.SyncedField;
|
|
||||||
import electrosphere.entity.state.attack.ServerAttackTree;
|
import electrosphere.entity.state.attack.ServerAttackTree;
|
||||||
import electrosphere.entity.state.attack.ServerAttackTree.AttackTreeState;
|
import electrosphere.entity.state.attack.ServerAttackTree.AttackTreeState;
|
||||||
import electrosphere.entity.state.movement.AirplaneMovementTree;
|
import electrosphere.entity.state.movement.AirplaneMovementTree;
|
||||||
@ -11,16 +9,21 @@ import electrosphere.engine.Globals;
|
|||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
import electrosphere.entity.EntityDataStrings;
|
import electrosphere.entity.EntityDataStrings;
|
||||||
import electrosphere.entity.EntityUtils;
|
import electrosphere.entity.EntityUtils;
|
||||||
|
import electrosphere.engine.Main;
|
||||||
|
import electrosphere.entity.annotation.SyncedField;
|
||||||
|
import electrosphere.entity.annotation.SynchronizedBehaviorTree;
|
||||||
import electrosphere.entity.state.movement.ServerGroundMovementTree.MovementTreeState;
|
import electrosphere.entity.state.movement.ServerGroundMovementTree.MovementTreeState;
|
||||||
import electrosphere.entity.types.creature.CreatureUtils;
|
import electrosphere.entity.types.creature.CreatureUtils;
|
||||||
import electrosphere.net.parser.net.message.EntityMessage;
|
import electrosphere.net.parser.net.message.EntityMessage;
|
||||||
import electrosphere.renderer.actor.Actor;
|
import electrosphere.renderer.actor.Actor;
|
||||||
import electrosphere.renderer.anim.Animation;
|
import electrosphere.renderer.anim.Animation;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import org.joml.Vector3d;
|
import org.joml.Vector3d;
|
||||||
|
|
||||||
|
|
||||||
@BehaviorTreeAnnotation(name="idle")
|
@SynchronizedBehaviorTree(name = "serverIdle", isServer = true)
|
||||||
public class ServerIdleTree {
|
public class ServerIdleTree {
|
||||||
|
|
||||||
public static enum IdleTreeState {
|
public static enum IdleTreeState {
|
||||||
@ -28,7 +31,7 @@ public class ServerIdleTree {
|
|||||||
NOT_IDLE,
|
NOT_IDLE,
|
||||||
}
|
}
|
||||||
|
|
||||||
@SyncedField(isEnum = true)
|
@SyncedField(isEnum = true, enumId = 0)
|
||||||
IdleTreeState state;
|
IdleTreeState state;
|
||||||
|
|
||||||
Entity parent;
|
Entity parent;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user