Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b1efb9802d | ||
|
|
7524a0096a | ||
|
|
4354eac0cf |
Vendored
+1
-1
@@ -14,7 +14,7 @@
|
|||||||
"type": "java",
|
"type": "java",
|
||||||
"name": "Launch App",
|
"name": "Launch App",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"mainClass": "nz.ac.massey.programming_project_159333_s1_2021.App",
|
"mainClass": "nz.ac.massey.javaecs.App",
|
||||||
"projectName": "javaecs"
|
"projectName": "javaecs"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
+6
@@ -1,9 +1,15 @@
|
|||||||
package nz.ac.massey.javaecs;
|
package nz.ac.massey.javaecs;
|
||||||
|
|
||||||
public class FrameRateSystem extends ECSSystem{
|
public class FrameRateSystem extends ECSSystem{
|
||||||
|
@Override
|
||||||
void init() {}
|
void init() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void update() {}
|
||||||
|
|
||||||
void update(double dt, double idleTime){
|
void update(double dt, double idleTime){
|
||||||
System.out.print(String.format("dt: %.3g (%.3g idle) ", dt, idleTime));
|
System.out.print(String.format("dt: %.3g (%.3g idle) ", dt, idleTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
+6
@@ -6,12 +6,18 @@ public class LogVec2DSystem extends ECSSystem{
|
|||||||
this.gameEngine = gameEngine;
|
this.gameEngine = gameEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
void init() {}
|
void init() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void update() {}
|
||||||
|
|
||||||
void update(double dt){
|
void update(double dt){
|
||||||
for (Integer entity : entities) {
|
for (Integer entity : entities) {
|
||||||
Vec2D pos = (Vec2D)gameEngine.getComponentData(entity, Vec2D.class);
|
Vec2D pos = (Vec2D)gameEngine.getComponentData(entity, Vec2D.class);
|
||||||
System.out.println(String.format("X: %.6g, Y: %.6g", pos.x, pos.y));
|
System.out.println(String.format("X: %.6g, Y: %.6g", pos.x, pos.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
+5
-1
@@ -6,9 +6,13 @@ public class PhysicsSystem extends ECSSystem{
|
|||||||
this.gameEngine = gameEngine;
|
this.gameEngine = gameEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
void init() {}
|
void init() {}
|
||||||
|
|
||||||
void update(double dt){
|
@Override
|
||||||
|
void update() {}
|
||||||
|
|
||||||
|
void update(Double dt){
|
||||||
for (Integer entity : entities) {
|
for (Integer entity : entities) {
|
||||||
Vec2D pos = (Vec2D)gameEngine.getComponentData(entity, Vec2D.class);
|
Vec2D pos = (Vec2D)gameEngine.getComponentData(entity, Vec2D.class);
|
||||||
RidgidBody ridgidBody = (RidgidBody)gameEngine.getComponentData(entity, RidgidBody.class);
|
RidgidBody ridgidBody = (RidgidBody)gameEngine.getComponentData(entity, RidgidBody.class);
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>nz.ac.massey.programming_project_159333_s1_2021</groupId>
|
<groupId>nz.ac.massey.javaecs</groupId>
|
||||||
<artifactId>javaecs</artifactId>
|
<artifactId>javaecs</artifactId>
|
||||||
<version>1.1-SNAPSHOT</version>
|
<version>1.1-SNAPSHOT</version>
|
||||||
<properties>
|
<properties>
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ public class ECS {
|
|||||||
void addComponent(int entity, Type componentName, Object component){
|
void addComponent(int entity, Type componentName, Object component){
|
||||||
componentManager.addComponentToEntity(componentName, component, entity);
|
componentManager.addComponentToEntity(componentName, component, entity);
|
||||||
entityManager.registerComponent(componentManager.getComponentIndex(componentName), entity);
|
entityManager.registerComponent(componentManager.getComponentIndex(componentName), entity);
|
||||||
systemManager.entitySignatureChanged(entity, entityManager.getRegistrations(entity));
|
systemManager.entityRegistrationsChanged(entity, entityManager.getRegistrations(entity));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -108,7 +108,7 @@ public class ECS {
|
|||||||
void removeComponent(int entity, Type componentType){
|
void removeComponent(int entity, Type componentType){
|
||||||
componentManager.removeComponentFromEntity(componentType, entity);
|
componentManager.removeComponentFromEntity(componentType, entity);
|
||||||
entityManager.unregisterComponent(componentManager.getComponentIndex(componentType), entity);
|
entityManager.unregisterComponent(componentManager.getComponentIndex(componentType), entity);
|
||||||
systemManager.entitySignatureChanged(entity, entityManager.getRegistrations(entity));
|
systemManager.entityRegistrationsChanged(entity, entityManager.getRegistrations(entity));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -137,7 +137,7 @@ public class ECS {
|
|||||||
* @param signature the new signature data
|
* @param signature the new signature data
|
||||||
*/
|
*/
|
||||||
void setSystemSignature(Type system, BitSet signature){
|
void setSystemSignature(Type system, BitSet signature){
|
||||||
systemManager.setSignature(system, signature);
|
systemManager.setRegistrationSignature(system, signature);
|
||||||
}
|
}
|
||||||
Integer getMaxEntities(){
|
Integer getMaxEntities(){
|
||||||
return entityManager.currentSize;
|
return entityManager.currentSize;
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ package nz.ac.massey.javaecs;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
class ECSSystem{
|
abstract class ECSSystem{
|
||||||
Set<Integer> entities = new HashSet<>();
|
Set<Integer> entities = new HashSet<>();
|
||||||
|
|
||||||
|
// Abstractions are included to remind the library user these two implementations (and/or variations) should be implemented
|
||||||
|
abstract void init();
|
||||||
|
abstract void update();
|
||||||
}
|
}
|
||||||
@@ -110,7 +110,7 @@ class EntityManager{
|
|||||||
setRegistrations(newPos, getRegistrations(integer));
|
setRegistrations(newPos, getRegistrations(integer));
|
||||||
// Invoke an update in the SystemManager
|
// Invoke an update in the SystemManager
|
||||||
systemManager.entityDestroyed(integer);
|
systemManager.entityDestroyed(integer);
|
||||||
systemManager.entitySignatureChanged(newPos, getRegistrations(newPos));
|
systemManager.entityRegistrationsChanged(newPos, getRegistrations(newPos));
|
||||||
// Invoke the change in the components
|
// Invoke the change in the components
|
||||||
componentManager.moveComponentData(integer, newPos);
|
componentManager.moveComponentData(integer, newPos);
|
||||||
componentManager.entityDestroyed(integer);
|
componentManager.entityDestroyed(integer);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import java.util.Map;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
class SystemManager{
|
class SystemManager{
|
||||||
Map<Type, BitSet> signatures = new HashMap<>();
|
Map<Type, BitSet> registrationSignatures = new HashMap<>();
|
||||||
Map<Type, ECSSystem> systems = new HashMap<>();
|
Map<Type, ECSSystem> systems = new HashMap<>();
|
||||||
|
|
||||||
// Registering the system adds it to the array of systems.
|
// Registering the system adds it to the array of systems.
|
||||||
@@ -33,12 +33,12 @@ class SystemManager{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
systems.put(systemType, system);
|
systems.put(systemType, system);
|
||||||
signatures.put(systemType, new BitSet());
|
registrationSignatures.put(systemType, new BitSet());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSignature(Type system, BitSet registrations){
|
public void setRegistrationSignature(Type systemType, BitSet registrations){
|
||||||
signatures.put(system, registrations);
|
registrationSignatures.put(systemType, registrations);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void entityDestroyed(int entity){
|
public void entityDestroyed(int entity){
|
||||||
@@ -47,13 +47,13 @@ class SystemManager{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void entitySignatureChanged(int entity, BitSet entitySignature){
|
public void entityRegistrationsChanged(int entity, BitSet entityRegistrations){
|
||||||
for (Type key : systems.keySet()) {
|
for (Type key : systems.keySet()) {
|
||||||
// Check if the signature is null
|
// Check if the signature is null
|
||||||
if (!entitySignature.equals(null)){
|
if (!entityRegistrations.equals(null)){
|
||||||
BitSet srcCpy = (BitSet)entitySignature.clone();
|
BitSet srcCpy = (BitSet)entityRegistrations.clone();
|
||||||
srcCpy.and(signatures.get(key));
|
srcCpy.and(registrationSignatures.get(key));
|
||||||
if (srcCpy.equals(signatures.get(key))){ // Bitwise check if the entity is subscribed to this system
|
if (srcCpy.equals(registrationSignatures.get(key))){ // Bitwise check if the entity is subscribed to this system
|
||||||
systems.get(key).entities.add(entity);
|
systems.get(key).entities.add(entity);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ class AppTest {
|
|||||||
for (int i = 0; i < gameEngine.getMaxEntities() + 5; i++) {
|
for (int i = 0; i < gameEngine.getMaxEntities() + 5; i++) {
|
||||||
if (i >= gameEngine.getMaxEntities()){
|
if (i >= gameEngine.getMaxEntities()){
|
||||||
assertThrows(IndexOutOfBoundsException.class, () -> {
|
assertThrows(IndexOutOfBoundsException.class, () -> {
|
||||||
int entity = gameEngine.createEntity();
|
gameEngine.createEntity();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|||||||
Reference in New Issue
Block a user