Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        public override void map_input_event(Camera camera, InputEvent _event, Vector3 click_position, Vector3 click_normal, int shape_idx, Vector2 chunk, AStar navigation, Node meshMapCtrl, Info info)
        {
            if (_event is InputEventMouseMotion)
            {
                if (click_normal.z == 1)
                {
                    var x = Mathf.Round(click_position.x / 2);
                    var y = Mathf.Round(click_position.y / 2);
                    info.MouseCellPosistion = new Vector2(x, y);
                }
            }

            var pts = info.get_last_points();

            // GD.Print("Check if equal: ", equals(last_pts, pts));
            if (!last_pts.Equals(pts))
            {
                last_pts = pts;

                if (!Input.IsMouseButtonPressed((int)ButtonList.Left) && pts != null && pts.Length > 0)
                {
                    GD.Print("New build tunnel jobs to add: ", pts, " ", last_pts != pts);
                    List <Job.AbstractJob> jobs = new List <Job.AbstractJob>();

                    foreach (Vector2 p in pts)
                    {
                        var job = new Job.BuildTunnelJob(p, navigation, meshMapCtrl);
                        jobs.Add(job);
                    }

                    var jobsarr = jobs.ToArray();
                    ((singleton.InGameState)ctrl).get_job_system().submit_jobs(jobsarr);
                }
            }
            if (_event is InputEventMouseButton)
            {
                var tmpInput = (InputEventMouseButton)_event;
                if (tmpInput.ButtonIndex == (int)ButtonList.Right && tmpInput.ButtonMask == (int)ButtonList.MaskRight)
                {
                    ctrl.Call("request_new_state", constant.StateNames.NONE);
                }
            }
        }
Ejemplo n.º 3
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());
            }
        }