IAssignment IJobSource.FindAssignment(ILivingObject living)
        {
            var tick = this.Environment.World.TickNumber;

            var designations = m_map
                               .Where(kvp => kvp.Value.Job == null && kvp.Value.ReachableSimple && kvp.Value.NextReacahbleCheck <= tick)
                               .OrderBy(kvp => (kvp.Key - living.Location).Length);

            foreach (var d in designations)
            {
                var p  = d.Key;
                var dt = d.Value;

                var ds = GetDesignationPositioning(p, dt.Type);

                // XXX we should pass the found path to the job, to avoid re-pathing
                bool canreach = AStar.CanReach(this.Environment, living.Location, p, ds);
                if (!canreach)
                {
                    dt.NextReacahbleCheck = tick + 10;
                    continue;
                }

                IAssignment job;

                switch (dt.Type)
                {
                case DesignationType.Mine:
                case DesignationType.CreateStairs:
                    MineActionType mat = DesignationTypeToMineActionType(dt.Type);

                    job = new Jobs.AssignmentGroups.MoveMineAssignment(this, this.Environment, p, mat);

                    break;

                case DesignationType.FellTree:

                    job = new Jobs.AssignmentGroups.MoveFellTreeAssignment(this, this.Environment, p);
                    break;

                default:
                    throw new Exception();
                }

                this.Environment.World.Jobs.Add(job);
                dt.Job = job;

                return(job);
            }

            return(null);
        }
Exemple #2
0
        IAssignment IJobSource.FindAssignment(ILivingObject living)
        {
            var designations = m_map
                .Where(kvp => kvp.Value.Reachable && kvp.Value.Job == null)
                .OrderBy(kvp => (kvp.Key - living.Location).Length);

            foreach (var d in designations)
            {
                var p = d.Key;
                var dt = d.Value;

                IAssignment job;

                switch (dt.Type)
                {
                    case DesignationType.Mine:
                    case DesignationType.CreateStairs:
                    case DesignationType.Channel:
                        MineActionType mat;

                        switch (dt.Type)
                        {
                            case DesignationType.Mine:
                                mat = MineActionType.Mine;
                                break;
                            case DesignationType.CreateStairs:
                                mat = MineActionType.Stairs;
                                break;
                            case DesignationType.Channel:
                                mat = MineActionType.Channel;
                                break;
                            default:
                                throw new Exception();
                        }

                        job = new Jobs.AssignmentGroups.MoveMineAssignment(this, this.Environment, p, mat);

                        break;

                    case DesignationType.FellTree:

                        job = new Jobs.AssignmentGroups.MoveFellTreeAssignment(this, this.Environment, p);
                        break;

                    default:
                        throw new Exception();
                }

                this.Environment.World.Jobs.Add(job);
                dt.Job = job;

                return job;
            }

            return null;
        }
Exemple #3
0
        IAssignment IJobSource.FindAssignment(ILivingObject living)
        {
            var tick = this.Environment.World.TickNumber;

            var designations = m_map
                .Where(kvp => kvp.Value.Job == null && kvp.Value.ReachableSimple && kvp.Value.NextReacahbleCheck <= tick)
                .OrderBy(kvp => (kvp.Key - living.Location).Length);

            foreach (var d in designations)
            {
                var p = d.Key;
                var dt = d.Value;

                var ds = GetDesignationPositioning(p, dt.Type);

                // XXX we should pass the found path to the job, to avoid re-pathing
                bool canreach = AStar.CanReach(this.Environment, living.Location, p, ds);
                if (!canreach)
                {
                    dt.NextReacahbleCheck = tick + 10;
                    continue;
                }

                IAssignment job;

                switch (dt.Type)
                {
                    case DesignationType.Mine:
                    case DesignationType.CreateStairs:
                        MineActionType mat = DesignationTypeToMineActionType(dt.Type);

                        job = new Jobs.AssignmentGroups.MoveMineAssignment(this, this.Environment, p, mat);

                        break;

                    case DesignationType.FellTree:

                        job = new Jobs.AssignmentGroups.MoveFellTreeAssignment(this, this.Environment, p);
                        break;

                    default:
                        throw new Exception();
                }

                this.Environment.World.Jobs.Add(job);
                dt.Job = job;

                return job;
            }

            return null;
        }