コード例 #1
0
    public override string ToString()
    {
        string data = "";

        data += "HasJob: " + HasJob + ((HasJob)? ("-" + NPCJob.ToString()) : "") + "\n";
        data += "Gender: " + Gender;
        return(data);
    }
コード例 #2
0
    public static MarketPlace GenerateMarket(MarketPlace building, BuildingStyle style = BuildingStyle.stone)
    {
        int   width  = building.Width;
        int   height = building.Height;
        Vec2i entr   = GenerateWallsFloorAndEntrance(width, height, building.BuildingObjects, building.BuildingTiles, 0, style, tileType: Tile.TEST_YELLOW);

        building.SetEntrancePoint(entr);
        MarketStall s1 = new MarketStall(new Vec2i(3, 3));
        MarketStall s2 = new MarketStall(new Vec2i(building.Width - 3, building.Height - 3));

        AddObject(building, s1, 3, 3);
        AddObject(building, s2, building.Width - 3, building.Height - 3);
        NPCJob[] jobs = new NPCJob[] { new NPCJobMarketStall("Market runner", building, s1), new NPCJobMarketStall("Market runner", building, s2) };
        building.SetWorkBuildingData(new WorkBuildingData(jobs));

        return(building);
    }
コード例 #3
0
    private void GenerateNPCJobs(List <NPC> npcs, Settlement set)
    {
        List <NPCJob> workJobs = new List <NPCJob>();
        Dictionary <KingdomHierarchy, List <NPCJob> > rankedJobs = new Dictionary <KingdomHierarchy, List <NPCJob> >();

        //Iterate all buildings and select work buildings
        foreach (Building b in set.Buildings)
        {
            if (b is IWorkBuilding)
            {
                //Get the jobs for each building
                NPCJob[] js = (b as IWorkBuilding).GetWorkData.BuildingJobs;
                foreach (NPCJob j in js)
                {
                    if (!rankedJobs.ContainsKey(j.RequiredRank))
                    {
                        rankedJobs.Add(j.RequiredRank, new List <NPCJob>());
                    }
                    rankedJobs[j.RequiredRank].Add(j);
                }
            }
        }
        Debug.Log("Settlement " + set.ToString() + " has " + workJobs.Count + " jobs", Debug.ENTITY_GENERATION);


        foreach (NPC npc in npcs)
        {
            KingdomHierarchy rank = npc.NPCKingdomData.Rank;
            if (!rankedJobs.ContainsKey(rank))
            {
                continue;
            }
            if (rankedJobs[rank].Count == 0)
            {
                continue;
            }

            NPCJob job = rankedJobs[rank][0];
            rankedJobs[rank].Remove(job);
            npc.NPCData.SetJob(job);
        }
    }
コード例 #4
0
    public static Blacksmith GenerateBlacksmith(Blacksmith building, BuildingStyle style = BuildingStyle.stone)
    {
        int   width  = building.Width;
        int   height = building.Height;
        Vec2i entr   = GenerateWallsFloorAndEntrance(width, height, building.BuildingObjects, building.BuildingTiles, 0, style, tileType: Tile.TEST_MAGENTA);

        building.SetEntrancePoint(entr);
        WorkEquiptmentData anvil = new Anvil(new Vec2i(1, 3));
        WorkEquiptmentData forge = new Anvil(new Vec2i(4, 4));

        AddObject(building, anvil, 1, 3);
        AddObject(building, forge, 4, 4);

        NPCJob[] jobs = new NPCJob[] { new NPCJobBlackSmith(building),
                                       new NPCJobBlackSmith(building),
                                       new NPCJobBlackSmith(building) };

        building.SetWorkBuildingData(new WorkBuildingData(jobs));
        AddEntrance(building, 0);
        //building.WorkEquiptment.Add(new WorkEquiptmentPlacement(anvil, new Vec2i(1, 3)));
        //building.WorkEquiptment.Add(new WorkEquiptmentPlacement(forge, new Vec2i(4, 4)));
        return(building);
    }
コード例 #5
0
    public static Tavern GenerateTavern(GenerationRandom genRan, Tavern tavern, out BuildingVoxels vox, BuildingGenerationPlan plan)
    {
        vox = new BuildingVoxels(tavern.Width, World.ChunkHeight, tavern.Height);
        BuildingGenerator.BuildBoundingWallRect(vox, tavern.Width, tavern.Height, 6, Voxel.wood);
        BuildingGenerator.ChooseEntrancePoint(genRan, vox, tavern, plan);

        Tile[,] tileMap = new Tile[tavern.Width, tavern.Height];

        BuildingGenerator.SetTiles(tileMap, 0, 0, tavern.Width, tavern.Height, Tile.WOOD_FLOOR);
        tavern.SetBuilding(tileMap);
        BuildingGenerator.AddWindow(genRan, vox, tavern, autoReattempt: true);
        BuildingGenerator.AddWindow(genRan, vox, tavern, autoReattempt: true);
        BuildingGenerator.AddWindow(genRan, vox, tavern, autoReattempt: true);
        BuildingGenerator.AddWindow(genRan, vox, tavern, autoReattempt: false);
        BuildingGenerator.AddWindow(genRan, vox, tavern, autoReattempt: false);
        FirePlace fp = new FirePlace();

        BuildingGenerator.PlaceObjectAgainstWall(genRan, fp, 0, vox, tavern, 0, true, 4, true, 20);
        BuildingGenerator.PlaceObjectAgainstWall(genRan, new WallTorch(), 1.5f, vox, tavern, 0, true, 2);
        NPCJob[] jobs = new NPCJob[] { new NPCJobMerchant(tavern, "Tavern Keep"), new NPCJobMerchant(tavern, "Tavern Keep") };
        tavern.SetWorkBuildingData(new WorkBuildingData(jobs));
        BuildingGenerator.AddRoof(genRan, vox, tavern, Voxel.thatch);
        return(tavern);
    }
コード例 #6
0
 public void SetJob(NPCJob job)
 {
     NPCJob = job;
 }
コード例 #7
0
 public NPCTaskDoJob(Entity entity, IWorkBuilding building, NPCJob job, float priority, float taskTime = -1) : base(entity, priority, taskTime, taskDesc: "Working: " + job)
 {
     WorkBuilding = building.WorkBuilding;
     Job          = job;
 }