Beispiel #1
0
    private string MapToAbstract()
    {
        List <AbstractLevel> levels = new List <AbstractLevel>();

        for (int levelIndex = 0; levelIndex < allLevels.Count - 1; levelIndex++)
        {
            List <OverworldNode> thisLevel = allLevels[levelIndex];
            List <OverworldNode> nextLevel = allLevels[levelIndex + 1];

            AbstractLevel lvl = LevelToAbstract(thisLevel, nextLevel);
            lvl.numNodes = thisLevel.Count;
            levels.Add(lvl);
        }

        AbstractLevel finallvl = LevelToAbstract(allLevels[allLevels.Count - 1], null);

        finallvl.numNodes = 1;
        levels.Add(finallvl);

        AbstractMap map = new AbstractMap();

        map.numLevels = allLevels.Count;
        map.levels    = levels;
        Tuple <int, int> playerPos = FindPlayerAt();

        if (playerPos != null)
        {
            map.playerLevel = playerPos.Item1;
            map.playerNode  = playerPos.Item2;
        }

        return(JsonUtility.ToJson(map));
    }
Beispiel #2
0
        public static void Initialise(MonoGameRenderer renderer)
        {
            //levelCompleteState = new LevelCompleteState(nextLevelState);
            //nextLevelState = new NextLevelState(levelInProgressState);
            collusionManager = new CollusionManager();
            level            = new LevelOne(null, collusionManager);
            character        = new Character(level, collusionManager);

            gameInProgressState   = new GameInProgressState(initialState, level, character);
            drawCompleteState     = new DrawCompleteState(initialState);
            drawCharacterState    = new DrawCharacterState(initialState, character);
            drawLevelState        = new DrawLevelState(initialState, level);
            drawLevelBuilderState = new DrawLevelBuilderState(initialState);
            drawMainMenuState     = new DrawMainMenuState(initialState);
            initialState          = new InitialState(drawMainMenuState);
            //displayMainMenuState.NextState = displayLevelBuilderState;
            //displayLevelBuilderState.NextState = initialState;
            //displayLevelState.NextState = initialState;
            //levelInProgressState.NextState = levelCompleteState;
            //levelCompleteState.NextState = nextLevelState;
            //nextLevelState.NextState = levelInProgressState;

            States.Add("InitialState", initialState);
            States.Add("DrawMainMenuState", drawMainMenuState);
            States.Add("DrawLevelBuilderState", drawLevelBuilderState);
            States.Add("DrawLevelState", drawLevelState);
            States.Add("DrawCharacterState", drawCharacterState);
            States.Add("DrawCompleteState", drawCompleteState);
            States.Add("GameInProgressState", gameInProgressState);
            //States.Add("LevelCompleteState", levelCompleteState);
            //States.Add("NextLevelState", nextLevelState);
        }
Beispiel #3
0
    private AbstractLevel LevelToAbstract(List <OverworldNode> level, List <OverworldNode> next)
    {
        AbstractLevel lvl = new AbstractLevel();

        lvl.numNodes = level.Count;
        lvl.nodes    = new List <AbstractNode>();

        if (next != null)
        {
            foreach (OverworldNode node in level)
            {
                AbstractNode absnode = new AbstractNode();
                absnode.links = new List <int>();

                foreach (OverworldNode other in node.outwardLinks)
                {
                    int otherindex = next.FindIndex((a) => { return(a == other); });
                    absnode.links.Add(otherindex);
                }

                lvl.nodes.Add(absnode);
            }
        }

        return(lvl);
    }
Beispiel #4
0
 public Character(AbstractLevel level, CollusionManager collusionManager)
 {
     Level                 = level;
     CurrentPositionX      = Level.BoundaryLeft;
     CurrentPositionY      = Level.BoundaryBottom - Height;
     PreviousPositionX     = CurrentPositionX;
     PreviousPositionY     = CurrentPositionY;
     this.collusionManager = collusionManager;
     AddCollider();
 }
Beispiel #5
0
    private void AbstractToMap(string abstractMap)
    {
        ClearLevel();
        AbstractMap absMap = JsonUtility.FromJson <AbstractMap>(abstractMap);

        rootPosition = new Vector3((NumberOfLevels - 1) * distanceBetweenLevels * -0.5f, 0, 0);
        Vector3 pos = rootPosition;

        //generate all levels
        NumberOfLevels = absMap.numLevels;
        foreach (AbstractLevel absLevel in absMap.levels)
        {
            List <OverworldNode> level = CreateLevel(absLevel.numNodes, pos);

            pos.x += distanceBetweenLevels;
            allLevels.Add(level);
        }

        //link all nodes
        for (int i = 0; i < NumberOfLevels - 1; i++)
        {
            AbstractLevel        absLevel   = absMap.levels[i];
            List <OverworldNode> leftLevel  = allLevels[i];
            List <OverworldNode> rightLevel = allLevels[i + 1];

            for (int nodeId = 0; nodeId < absLevel.numNodes; nodeId++)
            {
                AbstractNode  absNode  = absLevel.nodes[nodeId];
                OverworldNode leftNode = leftLevel[nodeId];
                foreach (int link in absNode.links)
                {
                    OverworldNode rightNode = rightLevel[link];
                    LinkNodes(leftNode, rightNode);
                }
            }
        }

        SetPlayerAt(allLevels[absMap.playerLevel][absMap.playerNode]);
    }
    void SetLevel()
    {
        if (lgo != null)
        {
            GameObject.Destroy(lgo);
            lgo = null;
        }

        var level  = _levelNames[_currentLevel];
        var subDir = $"Levels/{level}";
        var goPath = $"{subDir}/Level{level}";

        Debug.Log($"Instantiating {goPath}");
        {
            var go = Resources.Load <GameObject>(goPath);
            if (go == null)
            {
                throw new Exception($"failed to load resource '{goPath}'");
            }
            lgo = Instantiate(go);
        }
        Level = (AbstractLevel)lgo?.GetComponent <MonoBehaviour>();
        if (Level == null)
        {
            throw new Exception($"failed to find component for level '{level}'");
        }

        if (audioSource != null)
        {
            audioSource.Stop();
        }
        audioSource = lgo.GetComponent <AudioSource>();
        if (audioSource != null)
        {
            audioSource.Play();
        }

        var bgcam = GameObject.Find("Background Camera").GetComponent <Camera>();

        bgcam.backgroundColor = Level.clearColor;

        var bggo = GameObject.Find("BackgroundPlane");

        bggo.GetComponent <MeshRenderer>().material = Level.backgroundMaterial;
        _currentLevel = ++_currentLevel % _levelNames.Length;

        // update current visuals:
        foreach (var c in Playfield.GetEnumeratorCells())
        {
            InstantiateVisual(c);
        }

        foreach (var s in Playfield.GetEnumeratorSquares())
        {
            //    InstantiateVisual(s);
        }

        var dpv = GameObject.Find("DropPiece").GetComponent <DropPieceView>();

        dpv.UpdateVisuals = true;
    }
Beispiel #7
0
 public DrawLevelState(State nextState, AbstractLevel level)
     : base(nextState)
 {
     this.level = level;
 }
Beispiel #8
0
 public GameInProgressState(State nextState, AbstractLevel level, Character character)
     : base(nextState)
 {
     this.level     = level;
     this.character = character;
 }
    void CreateLevel(bool fragmentBased)
    {
        if (string.IsNullOrWhiteSpace(_levelName))
        {
            EditorUtility.DisplayDialog("Level name required", "Please fill in the 'Level Name' field before creating a level", "OK");
            return;
        }

        AssetDatabase.CreateFolder("Assets/Resources/Levels", _levelName);

        var blackPath = CopyItem(!string.IsNullOrWhiteSpace(_blackImagePath) ? _blackImagePath : "Black.png", "Black.png");

        CopyItem("Black.prefab");
        var whitePath = CopyItem(!string.IsNullOrWhiteSpace(_whiteImagePath) ? _whiteImagePath : "White.png", "White.png");

        CopyItem("White.prefab");

        var shaderNameOnly = "";

        if (!string.IsNullOrEmpty(_shaderPath))
        {
            shaderNameOnly = System.IO.Path.GetFileName(_shaderPath);
            CopyItem(_shaderPath, shaderNameOnly);
        }
        var shaderPath = SaveTemplateFile(new T4Generator.ShaderTemplate(_levelName, shaderNameOnly).TransformText(), "LevelTemplate.shader");

        // import copied assets:
        Debug.Log("updating resources...");
        AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);

        // create material from shader:
        var shaderImporter = (ShaderImporter)AssetImporter.GetAtPath(shaderPath);
        var newMaterial    = new Material(shaderImporter.GetShader());

        AssetDatabase.CreateAsset(newMaterial, shaderPath.Replace(".shader", ".mat"));

        // reset level name:
        _levelName = "";


        var go = new GameObject();

        go.AddComponent <AudioSource>();
        AbstractLevel al = null;

        if (fragmentBased)
        {
            var level = go.AddComponent <FragmentShaderLevel>();
            level.timelineRate = 0.4f;
            al = level;
        }
        else
        {
            //go.AddComponent<AbstractLevel>();
        }

        foreach (var p in new string[] { blackPath, whitePath })
        {
            // set texture/sprite properties:
            var importer = (TextureImporter)AssetImporter.GetAtPath(p);
            importer.wrapMode    = TextureWrapMode.Clamp;
            importer.textureType = TextureImporterType.Sprite;

            var texSettings = new TextureImporterSettings();
            importer.ReadTextureSettings(texSettings);
            texSettings.spriteAlignment = (int)SpriteAlignment.TopLeft;
            texSettings.spriteMode      = (int)SpriteImportMode.Single;
            importer.SetTextureSettings(texSettings);
            importer.mipmapEnabled  = false;
            importer.maxTextureSize = 2048;
            importer.SaveAndReimport();

            // create prefab
            var prefabPath = System.IO.Path.ChangeExtension(p, "prefab").Replace("\\", "/");

            var spriteGo = new GameObject();
            var sr       = spriteGo.AddComponent <SpriteRenderer>();
            sr.sortingLayerName = "Playfield";
            sr.sortingOrder     = 1;
            sr.sprite           = AssetDatabase.LoadAssetAtPath <Sprite>(p);

            PrefabUtility.SaveAsPrefabAsset(spriteGo, prefabPath);
            GameObject.DestroyImmediate(spriteGo);

            var prefabLoaded = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath);
            if (p.Contains("Black"))
            {
                al.prefabBlack = prefabLoaded;
                al.colorBlack  = GetDominantColor(p);
            }
            else
            {
                al.prefabWhite = prefabLoaded;
                al.colorWhite  = GetDominantColor(p);
            }
        }
        al.backgroundMaterial = newMaterial;

        // setup level prefab:
        var assetPath = shaderPath.Replace("\\", "/").Replace(".shader", ".prefab");

        PrefabUtility.SaveAsPrefabAsset(go, assetPath);
        GameObject.DestroyImmediate(go);
    }