package org.codecranachan.asteroidpush.content.behaviors; import java.util.Collection; import java.util.LinkedList; import org.codecranachan.asteroidpush.base.input.ControlItem; import org.codecranachan.asteroidpush.base.input.Controller; import org.codecranachan.asteroidpush.base.simulation.ActorFactory; import org.codecranachan.asteroidpush.base.simulation.InteractionHandler; import org.codecranachan.asteroidpush.base.simulation.RigidBody; import org.codecranachan.asteroidpush.base.simulation.command.Command; import org.codecranachan.asteroidpush.base.simulation.command.CreateActorCommand; import org.codecranachan.asteroidpush.base.visuals.Representation; import org.codecranachan.asteroidpush.base.workshop.actor.Behavior; import org.codecranachan.asteroidpush.utils.NewtonianState; public class ActorSpawnBehavior implements Behavior, InteractionHandler { private NewtonianState spawnState; private ActorFactory factory; private RigidBody currentBody; private Controller controller; private int lastSpawnFrame; static int SPAWN_INTERVAL = 60; public ActorSpawnBehavior(NewtonianState spawn_state, ActorFactory spawn_factory) { this.spawnState = spawn_state; this.factory = spawn_factory; this.currentBody = null; this.controller = null; this.lastSpawnFrame = -SPAWN_INTERVAL; } public Collection<Command> update(int frame) { LinkedList<Command> commands = new LinkedList<Command>(); if (controller != null && currentBody != null) { if (controller.getControl(ControlItem.FIRE_PRIMARY, frame) > 0) { if (lastSpawnFrame + SPAWN_INTERVAL < frame) { lastSpawnFrame = frame; currentBody.getState(); NewtonianState initialState = currentBody .transformToWorld(spawnState); commands.add(new CreateActorCommand(initialState, factory)); } } } return commands; } public void onDetach(RigidBody body, int index) { assert index == 0; assert body == currentBody; currentBody = null; } public void onAttach(RigidBody body, int index) { assert index == 0; assert currentBody == null; currentBody = body; } public Collection<Representation> getRepresentations() { Collection<Representation> reps = new LinkedList<Representation>(); return reps; } public void setController(Controller controller, int index) { assert index == 0; this.controller = controller; } }