public void submit_jobs(Job.AbstractJob[] newJobs, entities.Dwarf to_instance = null) { GD.Print("Submit new jobs: ", newJobs, " -> ", to_instance != null); if (to_instance != null && to_instance.HasMethod("set_personal_jobs")) { foreach (var j in newJobs) { j.Personal = true; j.Owner = to_instance; j.jobSystem = this; } to_instance.set_personal_jobs(newJobs); } else { foreach (var j in newJobs) { if (!j.Personal) { j.Owner = null; j.jobSystem = this; _AddJob(j); } } } }
private Job.WalkJob getWalkToJob(Job.BuildTunnelJob job, entities.Dwarf caller) { var walk = new Job.WalkJob(job.navigation, new Vector3(job.get_cell_pos().x * 2, job.get_cell_pos().y * 2, 0)); walk.Personal = true; walk.Owner = caller; return(walk); }
public Job.AbstractJob[] request_jobs(Vector2 pos, entities.Dwarf caller) { GD.Print("Request jobs, ", pos, " -> ", caller); // Vector2 pos = new Vector2(x, y); // KinematicBody caller = null; Job.AbstractJob nearest = null; int lastPos = 500; foreach (var j in jobs) { if (j.distance_from_cell(pos).Length < lastPos && j.distance_from_cell(pos).Length > 0 && j.Owner == null) { lastPos = j.distance_from_cell(pos).Length; nearest = j; } } if (nearest != null) { GD.Print(pos, " -> ", lastPos, " ", nearest, " ", nearest.get_cell_pos(), " ", GD.Str(nearest.Owner), " ", caller); nearest.Owner = caller; var path = nearest.distance_from_cell(pos); if (path.Length > 0) { var walk = new Job.WalkJob(((Job.BuildTunnelJob)nearest).navigation, path[path.Length - 1]); walk.Personal = true; walk.Owner = caller; var jobs = new List <Job.AbstractJob>(); jobs.Add(walk); foreach (var item in _GetArrayOfConnectedTunnelJobs((Job.BuildTunnelJob)nearest, caller)) { jobs.Add(item); } return(jobs.ToArray()); //new Job.AbstractJob[] { walk, nearest }; } else { return(_GetArrayOfConnectedTunnelJobs((Job.BuildTunnelJob)nearest, caller));//new Job.AbstractJob[] { nearest }; } } else { // GD.Print(pos, " -> ", lastPos); } return(new Job.AbstractJob[0]); }
private Job.AbstractJob[] _GetArrayOfConnectedTunnelJobs(Job.BuildTunnelJob startJob, entities.Dwarf caller) { GD.Print("_GetArrayOfConnectedTunnelJobs ", startJob, " ", caller); var startPos = startJob.get_cell_pos(); var direction = _GetTunnelDirection(startPos); GD.Print("Add jobs in direction: ", direction, " starting from: ", startPos); if (direction.Length() == 0) { return(new Job.BuildTunnelJob[] { startJob }); } else { var jobs = new List <Job.AbstractJob>(); var nextPos = startPos + direction; var nextJob = get_tunnel_job_on_cell(nextPos); GD.Print("Add Jobs: ", nextPos, " -> ", nextJob); jobs.Add(startJob); int iteration = 0; while (nextJob != null) { nextJob.Owner = caller; jobs.Add(getWalkToJob(nextJob, caller)); jobs.Add(nextJob); nextPos = nextPos + direction; nextJob = get_tunnel_job_on_cell(nextPos); GD.Print("(", iteration, ") Add Jobs: ", nextPos, " -> ", GD.Str(nextJob)); iteration++; if (iteration > 10) { GD.PrintErr("Exceted iteration for tunnel jobs: ", iteration); break; } } return(jobs.ToArray()); } }