Exemple #1
0
        public override void Update(LevelDefinition levelDefinition)
        {
            Player player = Player.local;

            if (!initialized || player == null || player.body == null)
            {
                return;
            }

            var rightHand = (player.body.handRight != null);
            var leftHand  = (player.body.handLeft != null);

            if (rightHand && !leftHand)
            {
                HandleCast(player.body.handRight, null);
            }
            if (!rightHand && leftHand)
            {
                HandleCast(player.body.handLeft, null);
            }
            if (rightHand && leftHand)
            {
                HandleCast(player.body.handRight, player.body.handLeft);
            }
        }
    public static bool ParseLevelJson(string levelName, out LevelDefinition levelDefinition)
    {
        string path = Path.Combine(Application.streamingAssetsPath, "LevelDefinitions/" + levelName);

        if (File.Exists(path))
        {
            var jsonLevel = File.ReadAllText(path);
            try
            {
                levelDefinition = JsonConvert.DeserializeObject <LevelDefinition>(jsonLevel);
            }
            catch (Exception e)
            {
                throw e;
            }

            return(true);
        }
        else
        {
            Debug.Log("Can't load " + levelName + " from path: " + path);
            levelDefinition = null;
            return(false);
        }
    }
Exemple #3
0
    private void ValidateLevel(LevelDefinition data)
    {
        data.name = "Room " + data.room.ToString();
        int numReturns = 0;

        for (int i = 0; i < data.items.Length; i++)
        {
            data.items[i].name = data.items[i].type.ToString();
            if (data.items[i].type == ItemType.Portal)
            {
                data.items[i].name += " " + data.items[i].portalType;
            }
            if (data.items[i].type == ItemType.Tool)
            {
                data.items[i].name += " " + data.items[i].toolType;
            }
            data.items[i].name += " " + data.items[i].number;
            if (data.items[i].type == ItemType.Portal && data.items[i].portalType == PortalType.Return)
            {
                numReturns++;
            }
        }
        if (numReturns != 1)
        {
            Debug.Log("WARNING: Level " + data.room + " has " + numReturns + " return portals!");
        }
    }
        private void DrawLevel(LevelDefinition levelDefinition)
        {
            var levelSerializedObject = new SerializedObject(levelDefinition);

            EditorGUILayout.PropertyField(levelSerializedObject.FindProperty("PowerUps"), true);
            EditorGUILayout.PropertyField(levelSerializedObject.FindProperty("Rounds"), true);
            levelSerializedObject.ApplyModifiedProperties();
            DrawHorizontalSlider();

            while (levelDefinition.EnemiesList.Count < levelDefinition.Rounds)
            {
                levelDefinition.EnemiesList.Add(CreateInstance <EnemiesDefinition>());
            }

            levelDefinition.EnemiesList.Resize(levelDefinition.Rounds, CreateInstance <EnemiesDefinition>);

            foreach (var enemiesDefinition in levelDefinition.EnemiesList)
            {
                var serializedObject = new SerializedObject(enemiesDefinition);
                EditorGUILayout.PropertyField(serializedObject.FindProperty("EnemyName"), true);
                EditorGUILayout.PropertyField(serializedObject.FindProperty("Count"), true);
                EditorGUILayout.PropertyField(serializedObject.FindProperty("Delay"), true);
                EditorGUILayout.PropertyField(serializedObject.FindProperty("InstantiationInterval"), true);
                serializedObject.ApplyModifiedProperties();
            }
        }
Exemple #5
0
        public GameLogicLayer(LevelDefinition levelDefinition)
        {
            _levelDefinition = levelDefinition;

            // Parse your level content here
            var x = levelDefinition.Content;
        }
        private void WriteEnemies(LevelDefinition definition)
        {
            WriteEnemyComments();
            _writer.StartObject(ObjectType.Fast, "Enemies");
            foreach (var enemyKeyValue in definition.Enemies)
            {
                var enemy  = enemyKeyValue.Value;
                var offset = _writer.GetCurrentOffset(ObjectType.Fast);

                WriteBobOffset(enemy.Bob, enemyKeyValue);

                _writer.WriteWord(enemy.FrameDelay);
                _writer.WriteWord(enemy.Hp);

                var pointString = enemy.Points.ToString("D8");
                foreach (var s in Enumerable.Range(0, 4).Select(i =>
                                                                byte.Parse($"{pointString.Substring(i * 2, 2)}", NumberStyles.HexNumber)))
                {
                    _writer.WriteByte(s);
                }

                var soundOffset = (ushort)_items.Get(ItemTypes.Sound, enemy.ExplosionSound, enemyKeyValue.Key).Offset;
                _writer.WriteWord(soundOffset);

                WriteBobOffset(enemy.PortalBob, enemyKeyValue);

                _items.Add(ItemTypes.Enemy, enemyKeyValue.Key, offset);
            }

            _writer.EndObject();
        }
Exemple #7
0
    /// <summary>
    /// Builds more level, according to the given amount.
    /// </summary>
    /// <param name="amount">
    ///     The amount of chunks that must be added to the level.
    /// </param>
    /// <param name="levelDefinition">
    ///     The level's definition used to build more level
    ///     (i.e this is used to know which type of chunks should be added).
    /// </param>
    /// <exception cref="System.ArgumentException">If the given amount is not positive</exception>
    private void BuildLevel(int amount, LevelDefinition levelDefinition)
    {
        if (amount <= 0)
        {
            Debug.LogError("The amount of chunks to be added to the level must be positive.");
            throw new ArgumentException("The amount must be positive");
        }
        var total = _amountOfCreatedChunks + amount; // Precalculates how many chunks will exist

        while (_amountOfCreatedChunks < total)
        {
            var selectedChunkPrefab = GetAChunkPrefab(levelDefinition);
            var chunk = Instantiate(selectedChunkPrefab);
            chunk.name = "Chunk" + _amountOfCreatedChunks;

            // The chunk must start in the next starting position 'x' component
            var chunkLength = chunk.ChunkLength;
            var chunkX      = _nextStartingPosition + chunkLength / 2;
            chunk.transform.position = new Vector3(chunkX, _levelStartingPosition.y, _levelStartingPosition.z);

            // Update internal variables
            _nextStartingPosition += chunkLength;
            _amountOfCreatedChunks++;
            _createdChunks.Add(chunk);
        }
        RecalculateCreationMarginLength(); // Calculate the margin in 'x' at which the level should be expanded.
    }
 public void Process(LevelDefinition definition)
 {
     if (definition.Sfx != null)
     {
         Render(definition.Sfx);
     }
 }
    public override bool ValidateOperation(GameObject botObject, LevelDefinition levelDef)
    {
        Vector2 direction = levelDef.getDirectionFromEnum();
        Vector2 nextPos   = direction + levelDef.botPos;

        // If the next position is in any way outside the board then it's illegal
        if (nextPos.x < 0 || nextPos.x >= levelDef.numRows ||
            nextPos.y < 0 || nextPos.y >= levelDef.numColumns)
        {
            return(false);
        }

        Tile currentTile = levelDef.board [(int)levelDef.botPos.x, (int)levelDef.botPos.y];
        Tile nextTile    = levelDef.board [(int)nextPos.x, (int)nextPos.y];

        // We won't jump if the destination is at the same height level
        if (currentTile.height == nextTile.height ||
            (currentTile.height < nextTile.height && nextTile.height - currentTile.height > 1) ||
            (currentTile.height > nextTile.height && currentTile.height - nextTile.height > 1))
        {
            return(false);
        }

        return(true);
    }
        public void Process(LevelDefinition definition)
        {
            if (definition.EnemyFire == null)
            {
                return;
            }
            _definition = definition.EnemyFire;

            WriteEnemyFireComments();
            _writer.StartObject(ObjectType.Fast, "EnemyFireTypes");
            foreach (var fireKeyValue in _definition.Types)
            {
                var fire     = fireKeyValue.Value;
                var fireName = fireKeyValue.Key;
                var offset   = _writer.GetCurrentOffset(ObjectType.Fast);
                _writer.WriteWord((ushort)_items.Get(ItemTypes.Sound, fire.Sound, fireName).Offset);
                _writer.WriteWord((ushort)fire.Movement);
                _writer.WriteWord((ushort)fire.Period);
                _writer.WriteWord((ushort)fire.Speed);
                var bob = _items.Get(ItemTypes.Bob, fire.Bob, fireName);
                _writer.WriteOffset(ObjectType.Chip, bob.Offset);
                _items.Add(ItemTypes.EnemyFire, fireName, offset);
            }

            _writer.EndObject();

            WriteSupportingCode();
        }
 public override void Update(LevelDefinition levelDefinition)
 {
     if (!Player.local)
     {
         return;
     }
     else
     {
         if (!Player.local.body)
         {
             leftIceWind  = null;
             rightIceWind = null;
             return;
         }
         else
         {
             if (!Player.local.body.handLeft)
             {
                 return;
             }
             else
             {
                 GetIceWindSpell(Player.local.body.handLeft);
                 GetIceWindSpell(Player.local.body.handRight);
             }
         }
     }
 }
Exemple #12
0
 public static Level Load( LevelDefinition def )
 {
     Level l = new Level();
     l.definition = def;
     l.Begin();
     return l;
 }
Exemple #13
0
 private void ConvertTiles(LevelDefinition definition)
 {
     foreach (var tiledDefinition in definition.Tiles)
     {
         _tiledConverter.ConvertAll(tiledDefinition.Key, tiledDefinition.Value);
     }
 }
Exemple #14
0
    public void SaveToFile()
    {
        if (!VerifyLevel())
        {
            return;
        }

        var levelDefinition = new LevelDefinition();

        levelDefinition.dimensions = tileMapSize;
        levelDefinition.blockTypeSerializedGrid = new BlockType[tileMapSize.x * tileMapSize.y];

        for (var x = 0; x < tileMapSize.x; ++x)
        {
            for (var y = 0; y < tileMapSize.y; ++y)
            {
                var linearMappedIndex = levelDefinition.CalculateLinearizedCoordinates(x, y);
                levelDefinition.blockTypeSerializedGrid[linearMappedIndex] = blocks[linearMappedIndex].blockType;
            }
        }

        var jsonRepresentation = JsonUtility.ToJson(levelDefinition);
        var formatter          = new BinaryFormatter();
        var file = OpenMapFileForWriting();

        formatter.Serialize(file, jsonRepresentation);
        file.Close();
    }
Exemple #15
0
        public LevelManager(GameInstance game, ChooseMap.Maps EnvMap)
        {
            this.game        = game;
            this.LevelNumber = -1;

            LevelNumberStat          = new Stat(Load.FontScore, Color.Red, "Level : ", 0);
            LevelNumberStat.Position = new Vector2((TimGame.GAME_WIDTH - LevelNumberStat.Size.X) / 2, 25);

            Title          = new Item("Level X", Load.FontTitleLevel, Color.Blue);
            Title.Position = new Vector2((TimGame.GAME_WIDTH - Title.Size.X) / 2,
                                         (TimGame.GAME_HEIGHT - Title.Size.Y) / 2);

            map = new Map(Load.BackgroundSun, Load.MapTextureNature, EnvMap);

            LevelDefinition Level1 = new LevelDefinition(map, Load.BackgroundSun, Load.MapTextureNature,
                                                         10, 0.3f, Color.Black, true, false);
            LevelDefinition Level2 = new LevelDefinition(map, Load.BackgroundGreen, Load.MapTextureDesert,
                                                         15, 0.2f, Color.Black, true, false);
            LevelDefinition Level3 = new LevelDefinition(map, Load.BackgroundDark, Load.MapTextureGraveyard,
                                                         20, 0.15f, Color.White, true, false);
            LevelDefinition Level4 = new LevelDefinition(map, Load.BackgroundWinter, Load.MapTextureWinter,
                                                         25, 0.15f, Color.Black, true, true);
            LevelDefinition Level5 = new LevelDefinition(map, Load.BackgroundSun, Load.MapTextureNature,
                                                         int.MaxValue, 0.1f, Color.Black, true, true);

            Levels = new List <LevelDefinition> {
                Level1, Level2, Level3, Level4, Level5
            };
            SetLevel(0);
        }
        public override void OnLevelLoaded(LevelDefinition levelDefinition)
        {
            foreach (var customTriggerData in triggerData)
            {
                string triggerType = customTriggerData.triggerType.ToLower();
                Debug.Log("Attempting to create custom trigger of type " + triggerType);
                if (!triggerTypeMap.ContainsKey(triggerType))
                {
                    Debug.LogError("Invalid custom trigger type [" + triggerType + "]");
                    continue;
                }

                List <LevelDefinition.CustomReference> customReferences = levelDefinition.customReferences.FindAll(r => r.name == customTriggerData.customReferenceId);
                if (customReferences.Count != 1)
                {
                    Debug.LogError("Expected only 1 custom reference with name " + customTriggerData.customReferenceId);
                    continue;
                }

                LevelDefinition.CustomReference currentReference = customReferences[0];
                CustomTrigger trigger = currentReference.transforms[0].gameObject.AddComponent(triggerTypeMap[triggerType]) as CustomTrigger;
                Debug.Log("Added trigger of type " + triggerTypeMap[triggerType].Name + " to CustomReference " + customTriggerData.customReferenceId);
                trigger.Initialize(customTriggerData, currentReference.transforms);
            }

            base.OnLevelLoaded(levelDefinition);
        }
Exemple #17
0
    public static Level Load(LevelDefinition def)
    {
        Level l = new Level();

        l.definition = def;
        l.Begin();
        return(l);
    }
Exemple #18
0
 public override void Update(LevelDefinition levelDefinition)
 {
     if (!initialized)
     {
         return;
     }
     // Add code here.
 }
        private void ConvertBobToDisk(string name, BobDefinition bob, LevelDefinition definition, Bitmap bobPalette)
        {
            var offset = _writer.GetCurrentOffset(ObjectType.Chip);

            _bobConverter.ConvertBob(name, bob, definition.BobPlaneCount, bobPalette.Palette,
                                     _definition.BobPaletteFlip0AndLast ? BobMode.ColorFlip : BobMode.NoColorFlip, Destination.Disk);

            _items.Add(ItemTypes.Bob, name, offset);
        }
 /// <summary>
 /// Creates the screen
 /// </summary>
 /// <param name="game">Snails Pace instance</param>
 /// <param name="levelsSetting">The levels for the game, [n][0] = display name, [n][1] = file</param>
 public LevelSelectScreen(SnailsPace game, String[][] levelsSetting )
     : base(game)
 {
     levels = new LevelDefinition[levelsSetting.Length];
     for (int index = 0; index < levelsSetting.Length; index++)
     {
         levels[index] = new LevelDefinition(levelsSetting[index][0], levelsSetting[index][1]);
     }
 }
 /// <summary>Creates an instance of IWorld</summary>
 /// <param name="definition">World definition</param>
 /// <returns>The created IWorld instance</returns>
 public override IWorld Create(LevelDefinition definition)
 {
     return(new UnityWorld(
                definition,
                this.Resources,
                this.ControllerManager,
                this.ControllerFactories,
                this.EntityFactory));
 }
Exemple #22
0
 /// <summary>Initializes a new instance of the TestEntity class</summary>
 public TestWorld(
     LevelDefinition definition,
     IResourceLibrary resources,
     IControllerManager controllerManager,
     IControllerFactory[] controllerFactories,
     IEntityFactory entityFactory)
     : base(definition, resources, controllerManager, controllerFactories, entityFactory)
 {
 }
Exemple #23
0
 /// <summary>Initializes a new instance of the UnityWorld class</summary>
 public UnityWorld(
     LevelDefinition definition,
     IResourceLibrary resources,
     IControllerManager controllerManager,
     IControllerFactory[] controllerFactories,
     IEntityFactory entityFactory)
     : base(definition, resources, controllerManager, controllerFactories, entityFactory)
 {
     SafeECall.Invoke(() => WorldBehaviour.Instance.World = this);
 }
Exemple #24
0
 public void StartLevel(LevelDefinition level)
 {
     levelEndPopUp.SetActive(false); // reset
     instruction1Solved = false;
     instruction2Solved = false;
     correctAnswers     = 0;     // reset
     incorrectAttempts  = 0;     // reset
     playerWonLevel     = false; // reset
     levelFinished      = false; // reset
 }
Exemple #25
0
    public override void RunOperation(GameObject botObject, LevelDefinition levelDef)
    {
        Vector2 currentPos  = levelDef.botPos;
        Tile    currentTile = levelDef.board [(int)currentPos.x, (int)currentPos.y];

        currentTile.lightOn = true;
        Renderer r = currentTile.associatedGO.GetComponent <Renderer> ();

        r.sharedMaterial = lightOnMat;
    }
Exemple #26
0
        public override void OnLevelLoaded(LevelDefinition levelDefinition)
        {
            helperModule.instance = this;

            base.OnLevelLoaded(levelDefinition);
            Debug.LogError("Helper Reborn Module:\nhelperModule.activationWord Word: " + activationWord + "\nhelperModule.confidenceNeeded Requirement: " + confidenceNeeded);
            GameObject g = new GameObject();
            HelperMain m = g.AddComponent <HelperMain>();

            GameObject.DontDestroyOnLoad(g);
        }
Exemple #27
0
        public void RoundtripLevelDefinition()
        {
            var entities = new EntityDefinition[]
            {
                new EntityDefinition
                {
                    Id       = Guid.NewGuid().ToString(),
                    AvatarId = Guid.NewGuid().ToString(),
                    Mass     = 1f,
                },
                new EntityDefinition
                {
                    Id       = Guid.NewGuid().ToString(),
                    AvatarId = Guid.NewGuid().ToString(),
                    Mass     = 1f,
                },
            };

            var expected = new LevelDefinition
            {
                Id          = Guid.NewGuid().ToString(),
                Title       = Guid.NewGuid().ToString(),
                Description = Guid.NewGuid().ToString(),
                Entities    =
                {
                    new LevelDefinition.EntityCollection.Entry
                    {
                        EntityId  = entities[0].Id,
                        Position  = Vector3D.Zero,
                        Direction = Vector3D.Zero,
                        Velocity  = Vector3D.Zero,
                    },
                    new LevelDefinition.EntityCollection.Entry
                    {
                        EntityId  = entities[1].Id,
                        Position  = Vector3D.Identity,
                        Direction = Vector3D.Identity,
                        Velocity  = Vector3D.Zero,
                    },
                },
            };

            var xml = expected.ToString();

            Assert.IsFalse(string.IsNullOrEmpty(xml));

            var actual = LevelDefinition.FromString(xml);

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.Id, actual.Id);
            Assert.AreEqual(expected.Title, actual.Title);
            Assert.AreEqual(expected.Description, actual.Description);
            Assert.AreEqual(expected.Entities.Count, actual.Entities.Count);
        }
Exemple #28
0
    /// <summary>
    /// Returns a random chunk prefab according to the given level definition.
    /// </summary>
    /// <param name="levelDefinition">The level definition used to know which chunk prefabs can be returned.</param>
    /// <returns></returns>
    private Chunk GetAChunkPrefab(LevelDefinition levelDefinition)
    {
        var chunkLelve = GetRandomWithProbability(levelDefinition.Probabilities);
        var chunks     = _chunksByDifficulty[chunkLelve];

        Random.state = _randomState; // Set the state.
        var randomIndex = Random.Range(0, chunks.Count);

        _randomState = Random.state; // Save the state
        return(chunks[randomIndex]);
    }
Exemple #29
0
    LevelDefinition GenerateDefinitionFromLevelResource(string levelName)
    {
        FileIO fileIO   = new FileIO(levelName, "txt");
        string fileText = fileIO.GetFileText();

        if (fileText == null)
        {
            return(null);
        }

        var levelInfoDict = new Dictionary <string, Dictionary <string, string> >();

        foreach (var line in fileText.Split('\n'))
        {
            if (line.StartsWith("//"))                          // line comment
            {
                continue;
            }

            if (!(string.IsNullOrEmpty(line) || line.Trim().Length == 0))               // if not an empty line
            {
                string dataIdentifier = line.Split(':')[0].ToLower();
                string dataValue      = line.Split(':')[1].Trim();

                string dataCategory = dataIdentifier.Split('/')[0];
                string dataProperty = dataIdentifier.Split('/')[1];

                if (!levelInfoDict.ContainsKey(dataCategory))
                {
                    // add key to external dict
                    levelInfoDict.Add(dataCategory, new Dictionary <string, string>());
                }

                levelInfoDict[dataCategory].Add(dataProperty, dataValue);
            }
        }

        LevelDefinition levelDefinition = new LevelDefinition(int.Parse(levelInfoDict["levelmanager"]["mapheight"]));

        // todo: do this procedurally based on what's available
        levelDefinition.AddTileGenerationInfo(LevelDefinitionParser.GenerateInfoForOneType(Tile.TileType.DIRT, ref levelInfoDict));
        levelDefinition.AddTileGenerationInfo(LevelDefinitionParser.GenerateInfoForOneType(Tile.TileType.DIRT2, ref levelInfoDict));
        levelDefinition.AddTileGenerationInfo(LevelDefinitionParser.GenerateInfoForOneType(Tile.TileType.GOLD_VEIN, ref levelInfoDict));
        levelDefinition.AddTileGenerationInfo(LevelDefinitionParser.GenerateInfoForOneType(Tile.TileType.STONE, ref levelInfoDict));
        levelDefinition.AddTileGenerationInfo(LevelDefinitionParser.GenerateInfoForOneType(Tile.TileType.STONE2, ref levelInfoDict));
        levelDefinition.AddTileGenerationInfo(LevelDefinitionParser.GenerateInfoForOneType(Tile.TileType.ALIEN_TECH, ref levelInfoDict));
        levelDefinition.AddTileGenerationInfo(LevelDefinitionParser.GenerateInfoForOneType(Tile.TileType.ENERGY_WELL, ref levelInfoDict));
        levelDefinition.AddTileGenerationInfo(LevelDefinitionParser.GenerateInfoForOneType(Tile.TileType.RIFT, ref levelInfoDict));

        // add wave definitions
        levelDefinition.AddWaveDefinitions(LevelDefinitionParser.GenerateWaveInfoForType(Tile.TileType.RIFT, ref levelInfoDict));

        return(levelDefinition);
    }
Exemple #30
0
    public void Initialize(string levelName)
    {
        LevelDefinition levelDefinition = GenerateDefinitionFromLevelResource(levelName);

        if (levelDefinition == null)
        {
            levelDefinition = GenerateDefinitionFromLevelResource("Level 1");
            Debug.LogWarning("No resource found. defaulting to level 1");
        }

        LevelGenerator.Instance.Initialize(levelDefinition, GetTechSettingsDefinition(levelName));
    }
  private void StartLevel(int levelIndex)
  {
      currentLevel = levels[levelIndex];

      StartCoroutine(SpawnShip(false));
      StartCoroutine(SpawnEnemies());

      if (currentLevel.hasPowerUps)
      {
          StartCoroutine(SpawnPowerUp());
      }
  }
Exemple #32
0
 private void Start()
 {
     IntroSequence.SetActive(true);
     director.SetActive(true);
     gameStartButton.onClick.AddListener(DeactivateIntroTimeline);
     correctAnswers    = 0;
     incorrectAttempts = 0;
     levelFinished     = false;
     levelEndPopUp.SetActive(false);
     currentLevel = levels[0];
     StartLevel(currentLevel);
 }