Remove rules and create movement rules

This commit is contained in:
2021-03-30 12:58:31 +02:00
parent 06fb3258af
commit c87567358c
6 changed files with 42 additions and 67 deletions

View File

@@ -3,7 +3,7 @@ package com.bartlomiejpluta.base.api.map.layer.object;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.map.layer.base.Layer;
import com.bartlomiejpluta.base.api.move.Movement;
import com.bartlomiejpluta.base.api.rule.Rule;
import com.bartlomiejpluta.base.api.rule.MovementRule;
import org.joml.Vector2ic;
import java.util.List;
@@ -17,9 +17,9 @@ public interface ObjectLayer extends Layer {
List<Entity> getEntities();
void registerRule(Rule rule);
void registerMovementRule(MovementRule rule);
void unregisterRule(Rule rule);
void unregisterMovementRule(MovementRule rule);
void unregisterRules();

View File

@@ -3,6 +3,8 @@ package com.bartlomiejpluta.base.api.move;
import org.joml.Vector2ic;
public interface Movement {
Movable getObject();
boolean perform();
Movement another();

View File

@@ -0,0 +1,13 @@
package com.bartlomiejpluta.base.api.rule;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.move.Movement;
import org.joml.Vector2ic;
public interface MovementRule {
Vector2ic from();
Vector2ic to();
void invoke(Movement movement);
}

View File

@@ -1,9 +0,0 @@
package com.bartlomiejpluta.base.api.rule;
import com.bartlomiejpluta.base.api.entity.Entity;
public interface Rule {
boolean when(Entity entity);
void then(Entity entity);
}

View File

@@ -1,33 +0,0 @@
package com.bartlomiejpluta.base.lib.rule;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.rule.Rule;
import java.util.HashSet;
import java.util.Set;
public abstract class BaseRule implements Rule {
private final Set<Entity> invoked = new HashSet<>();
protected abstract boolean test(Entity entity);
protected abstract void invoke(Entity entity);
@Override
public boolean when(Entity entity) {
if (test(entity)) {
return true;
}
invoked.remove(entity);
return false;
}
@Override
public void then(Entity entity) {
if (!invoked.contains(entity)) {
invoke(entity);
invoked.add(entity);
}
}
}