示例#1
0
        public Character(string characterName, int difficulty)
        {
            try
            {
                var fantasyNameSettings = new FantasyNameSettings(Classes.Warrior, Race.None, true, true, Gender.Male);
                IFantasyNameGenerator fantasyNameGenerator = FantasyNameGenerator.FromSettingsInfo(fantasyNameSettings);
                FantasyName[]         names = fantasyNameGenerator.GetFantasyNames(1);
                CharacterName = characterName == null || characterName == "" ? names[0].FullName : characterName;
            }
            catch
            {
                CharacterName = characterName == null || characterName == "" ? "Grim Stekspade" : characterName;
            }

            _difficulty = difficulty / 3.0;
            Strength    = rnd.Next(10, 18);
            Agility     = rnd.Next(10, 18);
            MaxHealth   = Convert.ToInt32(100 * _difficulty);
            Health      = MaxHealth;
            SetDamage();
            SetHitChance();
            SetCritChance();
            SetBlock();
            SetSpeed();
        }
示例#2
0
        public Character(string characterName)
        {
            try
            {
                var fantasyNameSettings = new FantasyNameSettings(Classes.Warrior, Race.None, true, true, Gender.Male);
                IFantasyNameGenerator fantasyNameGenerator = FantasyNameGenerator.FromSettingsInfo(fantasyNameSettings);
                FantasyName[]         names = fantasyNameGenerator.GetFantasyNames(1);
                CharacterName = characterName == null || characterName == "" ? names[0].FullName : characterName;
            }
            catch
            {
                CharacterName = characterName == null || characterName == "" ? "Crash Bandicoot" : characterName;
            }


            Strength  = rnd.Next(10, 18);
            Agility   = rnd.Next(10, 18);
            MaxHealth = 100;
            Health    = MaxHealth;
            SetDamage();
            SetHitChance();
            SetCritChance();
            SetBlock();
            SetSpeed();
        }
        public void Female_Goblin_Warrior()
        {
            // arrange
            NameGenerator.GetRandomNumber = (maxValue) => 1;
            IFantasyNameGenerator fantasyNameGenerator = FantasyNameGenerator.FromSettingsInfo(new FantasyNameSettings(Classes.Warrior, Race.Goblin, true, true, Gender.Female));

            // act
            var names = fantasyNameGenerator.GetFantasyNames(2);

            // assert
            ApprovalTests.Approvals.VerifyAll("Female Goblin Names", names, "names");
        }
示例#4
0
        void Start()
        {
            nav2DAgent       = GetComponent <Nav2DAgent>();
            character        = GetComponent <Character>();
            nav2DAgent.Speed = character.GetSpeed();

            nav2DAgent.addSeparationIgnored(GameObject.FindWithTag("Player"));

            characterName = FantasyNameGenerator.GetCharacterNameGenerator(new FantasyNameSettings(
                                                                               RPGKit.FantasyNameGenerator.Generators.Classes.Warrior,
                                                                               RPGKit.FantasyNameGenerator.Generators.Race.None, false,
                                                                               UnityEngine.Random.value > 0.5 ? RPGKit.FantasyNameGenerator.Generators.Gender.Male :
                                                                               RPGKit.FantasyNameGenerator.Generators.Gender.Female)
                                                                           ).GetFantasyName().FullName;
        }
示例#5
0
    public void Init()
    {
        for (var i = 0; i < transform.childCount; i++)
        {
            Destroy(transform.GetChild(i).gameObject);
        }

        //create the city data model

        cityName = FantasyNameGenerator.GetTownName();

        cityModel = new Model(settings);

        //create buildings
        foreach (var patch in cityModel.patches)
        {
            var ward = Instantiate(wardPrefab, this.transform, false);
            ward.GetComponent <WardController>().ward = patch.ward;

            foreach (var shape in patch.ward.geometry)
            {
                if (shape._perimeter() > 0)
                {
                    var b = Instantiate(buildingPrefab, this.transform, false);
                    b.transform.rotation = Quaternion.identity;

                    Debug.DrawLine(transform.position, cityModel.center.vec, Color.magenta, 20);

                    var buildingController = b.GetComponent <BuildingController>();
                    buildingController.shape = shape;
                }
            }
        }

        // create walls and towers and gates

        var castle = cityModel.citadel.ward as Castle;

        if (cityModel.wallsNeeded)
        {
            // city wall and towers
            for (var i = 0; i < cityModel.wall.shape.Count; i++)
            {
                if (castle.wall.shape.findEdge(cityModel.wall.shape[(i + 1) % cityModel.wall.shape.Count], cityModel.wall.shape[i]) != -1)
                {
                    // castle wall creation below will take care of the wall.
                    continue;
                }

                // wall

                var start   = cityModel.wall.shape[i].vec;
                var end     = cityModel.wall.shape[(i + 1) % cityModel.wall.shape.Count].vec;
                var nextEnd = cityModel.wall.shape[(i + 2) % cityModel.wall.shape.Count].vec;

                var startToEnd = end - start;
                var endToStart = start - end;
                var dis        = endToStart.magnitude;

                //connectedToGate

                if (cityModel.wall.gates.Select(x => x.vec).Contains(new Point(end).vec))
                {
                    // shorten wall
                    end = start + startToEnd.normalized * (dis - gateOpeningSize / 2);

                    // add gate tower
                    Instantiate(gatePrefab, transform.TransformPoint(end),
                                Quaternion.Euler(90, 0, 0),
                                this.transform
                                );
                }

                if (cityModel.wall.gates.Select(x => x.vec).Contains(new Point(start).vec))
                {
                    // shorten wall
                    start = end + endToStart.normalized * (dis - gateOpeningSize / 2);

                    // add gate tower
                    Instantiate(gatePrefab, transform.TransformPoint(start),
                                Quaternion.Euler(90, 0, 0),
                                this.transform
                                );
                }

                var vec  = end - start;
                var pos  = Vector2.Lerp(start, end, 0.5f);
                var wall = Instantiate(wallPrefab, this.transform);

                wall.transform.rotation   = Quaternion.Euler(0, 0, Mathf.Atan2(vec.y, vec.x) * Mathf.Rad2Deg);
                wall.transform.position   = transform.TransformPoint(pos);
                wall.transform.localScale = new Vector3(dis, 1, 22);
            }

            foreach (var tower in cityModel.wall.towers
                     .Where(x => !castle.wall.towers.Concat(castle.wall.gates)
                            .Select(p => p.vec).Contains(x.vec)))
            {
                Instantiate(towerPrefab, transform.TransformPoint(tower.vec), Quaternion.Euler(90, 0, 0), this.transform);
            }
        }


        // build castle walls

        for (var i = 0; i < castle.wall.shape.Count; i++)
        {
            // wall
            var start      = castle.wall.shape[i].vec;
            var end        = castle.wall.shape[(i + 1) % castle.wall.shape.Count].vec;
            var startToEnd = end - start;
            var endToStart = start - end;
            var dis        = endToStart.magnitude;

            //connectedToGate

            if ((cityModel.citadel.ward as Castle).wall.gates
                .Select(x => x.vec).Contains(new Point(end).vec))
            {
                // shorten wall
                end = start + startToEnd.normalized * (dis - gateOpeningSize / 2);

                // add gate tower
                Instantiate(gatePrefab, transform.TransformPoint(end),
                            Quaternion.Euler(90, 0, 0),
                            this.transform
                            );
            }

            if ((cityModel.citadel.ward as Castle).wall.gates
                .Select(x => x.vec).Contains(new Point(start).vec))
            {
                // shorten wall
                start = end + endToStart.normalized * (dis - gateOpeningSize / 2);

                // add gate tower
                Instantiate(gatePrefab, transform.TransformPoint(start),
                            Quaternion.Euler(90, 0, 0),
                            this.transform
                            );
            }


            var vec  = end - start;
            var pos  = Vector2.Lerp(start, end, 0.5f);
            var wall = Instantiate(wallPrefab, this.transform);

            wall.transform.rotation   = Quaternion.Euler(0, 0, Mathf.Atan2(vec.y, vec.x) * Mathf.Rad2Deg);
            wall.transform.position   = transform.TransformPoint(pos);
            wall.transform.localScale = new Vector3(dis, 1, 22);
        }

        foreach (var tower in castle.wall.towers)
        {
            var t = Instantiate(towerPrefab, transform.TransformPoint(tower.vec), Quaternion.Euler(90, 0, 0), this.transform);
        }


        // roads

        // foreach (var street in cityModel.streets)
        // {
        //     var roadControl = Instantiate(roadPrefab, this.transform.position, Quaternion.identity, this.transform).GetComponent<RoadController>();
        //     roadControl.points = street.Select(x => transform.TransformPoint(x.vec)).ToList();
        // }

        foreach (var street in cityModel.roads)
        {
            var roadControl = Instantiate(roadPrefab, this.transform.position, Quaternion.identity, this.transform).GetComponent <RoadController>();
            roadControl.points    = street.Select(x => transform.TransformPoint(x.vec)).ToList();
            roadControl.roadWidth = 4;
        }

        MovePlayerToSpawnPoint(transform.TransformPoint(cityModel.roads[0][1].vec));

        var edges = new List <Polygon>();

        foreach (var patch in cityModel.inner)
        {
            patch.shape.forEdge((start, end) =>
            {
                if (!cityModel.wall.bordersBy(patch, start, end))
                {
                    if (!edges.Any(x => x.findEdge(start, end) != -1) && !edges.Any(x => x.findEdge(end, start) != -1))
                    {
                        var edge = new Polygon {
                            start, end
                        };
                        edges.Add(edge);

                        var roadControl    = Instantiate(roadPrefab, this.transform.position, Quaternion.identity, this.transform).GetComponent <RoadController>();
                        roadControl.points = new List <Vector3> {
                            transform.TransformPoint(edge[0].vec), transform.TransformPoint(edge[1].vec)
                        };
                        roadControl.roadWidth = patch.withinWalls ? 8 : 4;
                    }
                }
            });
        }



        // foreach (var street in cityModel.arteries)
        // {
        //     var roadControl = Instantiate(roadPrefab, this.transform.position, Quaternion.identity, this.transform).GetComponent<RoadController>();
        //     roadControl.points = street.Select(x => transform.TransformPoint(x.vec)).ToList();
        // }

        // init nav mesh
        // navGrid = Instantiate(navGridPrefab, transform.position, Quaternion.identity).GetComponent<Nav2D>();

        // navGrid.transform.SetParent(this.gameObject.transform);

        //navGrid.GenerateNavMesh();

        StartCoroutine("GenerateNav2d");
    }