Exemplo n.º 1
0
        public static (LevelComponent, IReadOnlyList <Room>) CreateLevel(DefiningMapFragment fragment, Game game)
        {
            var branch = new GameBranch
            {
                Game       = game,
                Name       = "test branch",
                Length     = 1,
                Difficulty = 1
            };

            game.Branches.Add(branch);

            fragment.EnsureInitialized(game);
            if (fragment.Height != 0)
            {
                fragment.LevelHeight = fragment.Height;
            }

            if (fragment.Width != 0)
            {
                fragment.LevelWidth = fragment.Width;
            }

            var level = LevelGenerator.CreateEmpty(branch, 0, game.Random.Seed, game.Manager);
            var rooms = LevelGenerator.Generate(level, fragment);

            return(level, rooms);
        }
Exemplo n.º 2
0
        public static ConnectionComponent CreateSourceConnection(
            LevelComponent level, Point cell, string targetBranchName, byte targetDepth = 1)
        {
            var game    = level.Game;
            var manager = game.Manager;
            var branch  = game.GetBranch(targetBranchName) ??
                          Branch.Loader.Find(targetBranchName).Instantiate(game);

            var   targetLevel = branch.Levels.FirstOrDefault(l => l.Depth == targetDepth);
            Point?targetCell  = null;

            if (targetLevel != null)
            {
                var matchingConnection = manager.IncomingConnectionsToLevelRelationship[targetLevel.EntityId]
                                         .Select(c => c.Connection)
                                         .FirstOrDefault(c => c.TargetLevelId == level.EntityId && c.TargetLevelX == null);
                if (matchingConnection != null)
                {
                    matchingConnection.TargetLevelCell = cell;
                    targetCell = matchingConnection.Entity.Position.LevelCell;
                }
            }
            else
            {
                targetLevel = LevelGenerator.CreateEmpty(branch, targetDepth, level.GenerationRandom.Seed, manager);
            }

            return(CreateConnection(level, cell, targetLevel.EntityId, targetCell));
        }
Exemplo n.º 3
0
        private PlayerComponent CreatePlayer(string name)
        {
            uint seed;

            using (RandomNumberGenerator rng = new RNGCryptoServiceProvider())
            {
                var rngData = new byte[4];
                rng.GetBytes(rngData);

                seed = (uint)(rngData[0] | rngData[1] << 8 | rngData[2] << 16 | rngData[3] << 24);
            }

            var game = new Game
            {
                InitialSeed = seed,
                Random      = new SimpleRandom {
                    Seed = seed
                }
            };

            Initialize(game);
            _dbContext.Games.Add(game);
            _dbContext.SaveChanges();

            var manager       = game.Manager;
            var surfaceBranch = Branch.Loader.Find("surface").Instantiate(game);
            var surfaceLevel  = LevelGenerator.CreateEmpty(surfaceBranch, depth: 1, seed, manager);

            LevelGenerator.EnsureGenerated(surfaceLevel);

            var initialLevelConnection =
                manager.ConnectionsToLevelRelationship[surfaceLevel.EntityId].Single().Connection;
            var initialLevelEntity = manager.FindEntity(initialLevelConnection.TargetLevelId);

            LevelGenerator.EnsureGenerated(initialLevelEntity.Level);

            // TODO: Set correct sex
            var playerEntity = PlayerRace.InstantiatePlayer(
                name, Sex.Male, initialLevelEntity, initialLevelConnection.TargetLevelCell.Value);

            ItemData.FlaskOfHealing.Instantiate(playerEntity);
            ItemData.MailArmor.Instantiate(playerEntity);
            ItemData.LongSword.Instantiate(playerEntity);
            ItemData.Dagger.Instantiate(playerEntity);
            ItemData.Shortbow.Instantiate(playerEntity);
            ItemData.ThrowingKnives.Instantiate(playerEntity);
            ItemData.FireStaff.Instantiate(playerEntity);
            ItemData.FreezingFocus.Instantiate(playerEntity);
            ItemData.FieryAegis.Instantiate(playerEntity);
            ItemData.PotionOfOgreness.Instantiate(playerEntity);
            ItemData.PotionOfElfness.Instantiate(playerEntity);
            ItemData.PotionOfDwarfness.Instantiate(playerEntity);
            ItemData.PotionOfExperience.Instantiate(playerEntity, quantity: 6);
            ItemData.SkillbookOfConjuration.Instantiate(playerEntity);

            manager.LoggingSystem.WriteLog(game.Services.Language.Welcome(playerEntity), playerEntity, manager);

            Turn(playerEntity.Player);
            _dbContext.ChangeTracker.AcceptAllChanges();

            _gameServices.SharedCache.Set(game, game,
                                          new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromHours(1)));

            return(playerEntity.Player);
        }