98 lines
2.1 KiB
Java
98 lines
2.1 KiB
Java
package antsim.start;
|
|
|
|
import java.io.IOException;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
import antsim.entity.EntityNestEntrance;
|
|
import antsim.init.Entities;
|
|
import antsim.nest.Nest;
|
|
import antsim.worker.WorkerComType;
|
|
import antsim.worker.WorkerServer;
|
|
import antsim.worker.WorkerSocket;
|
|
import antsim.world.World;
|
|
import bdf.types.BdfArray;
|
|
import bdf.types.BdfNamedList;
|
|
import bdf.types.BdfObject;
|
|
import bdf.types.BdfReader;
|
|
import gl_engine.MathHelpers;
|
|
import gl_engine.vec.Vec2d;
|
|
import mainloop.manager.MainloopManager;
|
|
import mainloop.task.IMainloopTask;
|
|
|
|
public class StartServer implements IMainloopTask
|
|
{
|
|
private static WorkerServer server;
|
|
private static AtomicBoolean needToUpdate = new AtomicBoolean();
|
|
|
|
public static void main(String[] args) throws IOException, InterruptedException
|
|
{
|
|
MathHelpers.init();
|
|
Entities.init();
|
|
|
|
Start.isServer = true;
|
|
|
|
int port = Start.DEFAULT_PORT;
|
|
|
|
if(args.length > 0) {
|
|
port = Integer.parseInt(args[0]);
|
|
}
|
|
|
|
server = new WorkerServer(port);
|
|
server.start();
|
|
|
|
Start.mainloop = new MainloopManager(Start.START);
|
|
Start.mainloop.register(new StartServer());
|
|
Start.mainloop.register(Start.START);
|
|
|
|
for(int i=0;i<2;i++)
|
|
{
|
|
Nest nest = new Nest(i);
|
|
Vec2d area_pos = new Vec2d(Math.random() * 50 - 25, Math.random() * 50 - 25);
|
|
|
|
for(int j=0;j<50;j++)
|
|
{
|
|
World.WORLD.nests.add(nest);
|
|
World.WORLD.entities.add(new EntityNestEntrance(
|
|
nest, area_pos.add(new Vec2d(Math.random() * 20 - 10, Math.random() * 20 - 10))));
|
|
}
|
|
}
|
|
|
|
Start.mainloop.start();
|
|
|
|
server.close();
|
|
}
|
|
|
|
public static void markNeedToUpdate() {
|
|
needToUpdate.set(true);
|
|
}
|
|
|
|
@Override
|
|
public boolean MainLoopDelay(long millis) {
|
|
return millis > 10;
|
|
}
|
|
|
|
@Override
|
|
public boolean MainLoopRepeat() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void MainLoopUpdate()
|
|
{
|
|
server.update();
|
|
|
|
if(needToUpdate.getAndSet(false))
|
|
{
|
|
BdfReader reader = new BdfReader();
|
|
BdfObject bdf = reader.getObject();
|
|
BdfNamedList nl = bdf.getNamedList();
|
|
|
|
nl.set("type", bdf.newObject().setAutoInt(WorkerComType.UPDATE));
|
|
|
|
World.WORLD.saveBDF(bdf);
|
|
|
|
server.broadcast(reader);
|
|
}
|
|
}
|
|
}
|