Exemplo n.º 1
0
    // Start is called before the first frame update
    void Start()
    {
        floor  = GameObject.Find("Floor");
        player = GameObject.Find("Player");

        lava.transform.position = floor.transform.position;
        this.lavaArea           = lava.GetComponent <WaterArea>();
        lavaArea.size           = new Vector2(floor.transform.localScale.x, floor.transform.localScale.y);
        this.lavaArea           = lava.GetComponent <WaterArea>();
        lavaLevel = GameObject.Find("Lava line");
        lavaLevel.SetActive(true);
        lavaLevel.transform.position = new Vector3(lavaLevel.transform.position.x, lava.transform.position.y + (lavaArea.size.y * lavaSizeMultiplier / 2) * lava.transform.localScale.y, lavaLevel.transform.position.z);

        deathUI.SetActive(false);
        settingsUI.SetActive(false);
        hudUI.SetActive(true);
        winUI.SetActive(false);
        floor.SetActive(true);
        lava.SetActive(false);

        settingsUI.transform.Find("Same Layout Button").gameObject.SetActive(false);

        originalPlayerPosition = player.transform.position;
        objectiveList[currentObjective].IsActive = true;

        Vector2 size = floor.GetComponent <BoxCollider2D>().bounds.size;

        playerBody   = player.GetComponent <Rigidbody2D>();
        playerScript = player.GetComponent <PlayerMovement>();
        SetDragMode();

        sourceMusic.clip = music;
        sourceMusic.loop = true;
        sourceMusic.Play();
    }
Exemplo n.º 2
0
    public void BeginLevel(bool restart, bool toDragMode)
    {
        settingsUI.SetActive(false);
        hudUI.SetActive(true);
        deathUI.SetActive(false);

        lava.transform.position = floor.transform.position;
        this.lavaArea           = lava.GetComponent <WaterArea>();
        lavaArea.size           = new Vector2(floor.transform.localScale.x, floor.transform.localScale.y);
        lava.SetActive(true);
        lavaLevel.SetActive(false);
        lavaArea.AdjustComponentSizes();
        lavaArea.RecomputeMesh();
        floor.SetActive(false);

        for (int i = 0; i < targetObjects.Length; i++)
        {
            if (restart || (targetObjects[i].GetComponent <Furniture>() != null && targetObjects[i].GetComponent <Furniture>().destroyedOnLanding))
            {
                targetObjects[i].SendMessage("OnLavaReset", null, SendMessageOptions.DontRequireReceiver);
            }
            targetObjects[i].SetActive(true);
        }

        if (toDragMode)
        {
            deathUI.SetActive(false);
            settingsUI.SetActive(false);
            hudUI.SetActive(true);
            floor.SetActive(true);
            lava.SetActive(false);
            dragUI.SetActive(true);
            settingsUI.transform.Find("Same Layout Button").gameObject.SetActive(false);
            playerScript.canMove = false;
            lavaLevel.SetActive(true);
            lavaLevel.transform.position = new Vector3(lavaLevel.transform.position.x, lava.transform.position.y + (lavaArea.size.y * lavaSizeMultiplier / 2) * lava.transform.localScale.y, lavaLevel.transform.position.z);
            lavaSwitch = false;
            SetDragMode();
        }

        objectiveList[currentObjective].IsActive = false;
        currentObjective = 0;
        objectiveList[currentObjective].IsActive = true;

        sourceMusic.clip = music;
        sourceMusic.loop = true;
        sourceMusic.Play();
    }
Exemplo n.º 3
0
    private void OnEnable()
    {
        m_WaterArea = target as WaterArea;
        m_WaterArea.GetReferences();     //needed for when you edit prefab directly, onEnable won't be called on it

        m_PrevSize   = m_WaterArea.boxCollider2D.size;
        m_PrevOffset = m_WaterArea.boxCollider2D.offset;

        m_CurrentLayer = -1;
        int defaultLayer = 0;

        SortingLayer[] layers = SortingLayer.layers;
        m_SortingLayers = new string[layers.Length];
        for (int i = 0; i < layers.Length; ++i)
        {
            m_SortingLayers[i] = layers[i].name;
            if (layers[i].id == m_WaterArea.sortingLayerID)
            {
                m_CurrentLayer = i;
            }

            if (layers[i].name == "Default")
            {
                defaultLayer = i;
            }
        }

        if (m_CurrentLayer == -1)
        {
            m_WaterArea.sortingLayerID = SortingLayer.NameToID("Default");
            m_CurrentLayer             = defaultLayer;
        }

        m_OffsetProp             = serializedObject.FindProperty("offset");
        m_SizeProp               = serializedObject.FindProperty("size");
        m_SortingLayerProp       = serializedObject.FindProperty("sortingLayer");
        m_SortingLayerOrderProp  = serializedObject.FindProperty("sortingLayerOrder");
        m_SplashPlayerPrefabProp = serializedObject.FindProperty("splashPlayerPrefab");
    }
Exemplo n.º 4
0
        protected override Scene3D LoadEntry(FileSystemEntry entry, ContentManager contentManager, Game game, LoadOptions loadOptions)
        {
            switch (contentManager.SageGame)
            {
            case SageGame.Ra3:
            case SageGame.Ra3Uprising:
            case SageGame.Cnc4:
                // TODO
                break;

            default:
                contentManager.IniDataContext.LoadIniFile(@"Data\INI\Terrain.ini");
                contentManager.IniDataContext.LoadIniFile(@"Data\INI\Roads.ini");
                break;
            }

            var mapFile = MapFile.FromFileSystemEntry(entry);

            var heightMap = new HeightMap(mapFile.HeightMapData);

            var indexBufferCache = AddDisposable(new TerrainPatchIndexBufferCache(contentManager.GraphicsDevice));

            var tileDataTexture = AddDisposable(CreateTileDataTexture(
                                                    contentManager.GraphicsDevice,
                                                    mapFile,
                                                    heightMap));

            var cliffDetailsBuffer = AddDisposable(CreateCliffDetails(
                                                       contentManager.GraphicsDevice,
                                                       mapFile));

            CreateTextures(
                contentManager,
                mapFile.BlendTileData,
                out var textureArray,
                out var textureDetails);

            var textureDetailsBuffer = AddDisposable(contentManager.GraphicsDevice.CreateStaticStructuredBuffer(textureDetails));

            var terrainMaterial = AddDisposable(new TerrainMaterial(contentManager, contentManager.EffectLibrary.Terrain));

            terrainMaterial.SetTileData(tileDataTexture);
            terrainMaterial.SetCliffDetails(cliffDetailsBuffer);
            terrainMaterial.SetTextureDetails(textureDetailsBuffer);
            terrainMaterial.SetTextureArray(textureArray);

            var terrainPatches = CreatePatches(
                contentManager.GraphicsDevice,
                heightMap,
                mapFile.BlendTileData,
                terrainMaterial,
                indexBufferCache);

            Texture LoadTexture(string name)
            {
                var texture = contentManager.Load <Texture>(Path.Combine("Art", "Textures", name), fallbackToPlaceholder: false);

                if (texture == null)
                {
                    texture = contentManager.Load <Texture>(Path.Combine("Art", "CompiledTextures", name.Substring(0, 2), name));
                }
                return(texture);
            }

            var cloudTexture = LoadTexture(mapFile.EnvironmentData?.CloudTexture ?? "tscloudmed.dds");
            var macroTexture = LoadTexture(mapFile.EnvironmentData?.MacroTexture ?? "tsnoiseurb.dds");

            var materialConstantsBuffer = AddDisposable(contentManager.GraphicsDevice.CreateStaticBuffer(
                                                            new TerrainMaterial.TerrainMaterialConstants
            {
                MapBorderWidth          = new Vector2(mapFile.HeightMapData.BorderWidth, mapFile.HeightMapData.BorderWidth) * HeightMap.HorizontalScale,
                MapSize                 = new Vector2(mapFile.HeightMapData.Width, mapFile.HeightMapData.Height) * HeightMap.HorizontalScale,
                IsMacroTextureStretched = false     // TODO: This must be one of the EnvironmentData unknown values.
            },
                                                            BufferUsage.UniformBuffer));

            terrainMaterial.SetMaterialConstants(materialConstantsBuffer);

            var terrain = new Terrain.Terrain(
                heightMap,
                terrainPatches,
                cloudTexture,
                macroTexture,
                contentManager.SolidWhiteTexture);

            var players = Player.FromMapData(mapFile.SidesList.Players, contentManager).ToArray();

            var teams = (mapFile.SidesList.Teams ?? mapFile.Teams.Items)
                        .Select(team => Team.FromMapData(team, players))
                        .ToArray();

            LoadObjects(
                contentManager,
                heightMap,
                mapFile.ObjectsList.Objects,
                teams,
                out var waypoints,
                out var gameObjects,
                out var roads,
                out var bridges);

            var waterAreas = new List <WaterArea>();

            foreach (var polygonTrigger in mapFile.PolygonTriggers.Triggers)
            {
                switch (polygonTrigger.TriggerType)
                {
                case PolygonTriggerType.Water:
                case PolygonTriggerType.River:     // TODO: Handle this differently. Water texture should be animated "downstream".
                case PolygonTriggerType.WaterAndRiver:
                    if (WaterArea.TryCreate(contentManager, polygonTrigger, out var waterArea))
                    {
                        waterAreas.Add(AddDisposable(waterArea));
                    }

                    break;
                }
            }

            var lighting = new WorldLighting(
                mapFile.GlobalLighting.LightingConfigurations.ToLightSettingsDictionary(),
                mapFile.GlobalLighting.Time);

            var waypointPaths = new WaypointPathCollection(mapFile.WaypointsList.WaypointPaths
                                                           .Select(path =>
            {
                var start = waypoints[path.StartWaypointID];
                var end   = waypoints[path.EndWaypointID];
                return(new Settings.WaypointPath(start, end));
            }));

            // TODO: Don't hardcode this.
            // Perhaps add one ScriptComponent for the neutral player,
            // and one for the active player.
            var scriptList = mapFile.GetPlayerScriptsList().ScriptLists[0];
            var mapScripts = CreateScripts(scriptList);

            var cameraController = new RtsCameraController(contentManager)
            {
                TerrainPosition = terrain.HeightMap.GetPosition(
                    terrain.HeightMap.Width / 2,
                    terrain.HeightMap.Height / 2)
            };

            contentManager.GraphicsDevice.WaitForIdle();

            return(new Scene3D(
                       game,
                       cameraController,
                       mapFile,
                       terrain,
                       waterAreas.ToArray(),
                       roads,
                       bridges,
                       mapScripts,
                       gameObjects,
                       waypoints,
                       waypointPaths,
                       lighting,
                       players,
                       teams));
        }