Exemple #1
0
 public void RemoveHull(TileOWW tile)
 {
     tile.SetTileType("Empty");
     emptyHullTiles.Remove(tile);
     allHullTiles.Add(tile);
     ObjectiveController.Instance.CheckObjectives();
 }
Exemple #2
0
    private void UpdateOxygenSprite(TileOWW tileOWW, float oxygenLevel)
    {
        Tile t;

        if (tileOWW.oxygenLevel > 0)
        {
            // Create room graphics
            t = Resources.Load <Tile>("TileSets/Rooms/Oxygen");
            if (tileOWW.GetTileType() == "Hull")
            {
                t.color = new Color(0.227451f, 0.7294118f, 0.9960784f, tileOWW.oxygenLevel / 50);
            }
            else
            {
                t.color = new Color(0.9215686f, 0.5764706f, 0.1176471f);
                // TODO: Notification
            }

            tilemap.SetTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0), t);
            tilemap.RefreshTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0));
        }
        else
        {
            // Remove tile graphics
            t = null;
            tilemap.SetTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0), t);
            tilemap.RefreshTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0));
        }
    }
Exemple #3
0
    public List <TileOWW> PreviewRemoveHull(int start_x, int end_x, int start_y, int end_y)
    {
        List <TileOWW> hull_tiles = new List <TileOWW>();

        ClearPreviews();

        // Loop through all the tiles
        for (int x = start_x; x <= end_x; x++)
        {
            for (int y = start_y; y <= end_y; y++)
            {
                TileOWW tileOWW = WorldController.Instance.GetWorld().GetTileAt(x, y);

                // Check valid - remove installed hull OR job
                if (tileOWW != null)
                {
                    if (tileOWW.GetTileType() == "Hull")
                    {
                        hull_tiles.Add(tileOWW);
                        CreatePreview(removePreviewPrefab, "Hull", x, y);
                    }
                    // Can remove any build job
                    else if (tileOWW.currentJobType != null)
                    {
                        if (tileOWW.currentJobType.Contains("Build"))
                        {
                            hull_tiles.Add(tileOWW);
                            CreatePreview(removePreviewPrefab, "Hull", x, y);
                        }
                    }
                }
            }
        }
        return(hull_tiles);
    }
Exemple #4
0
    public Job(Action action, TileOWW tileOWW, float jobTime, string jobType, JobPriority jobPriority, Job prerequisiteJob = null, bool tileExcludeOtherJobs = true)
    {
        this.action               = action;
        this.tileOWW              = tileOWW;
        this.jobTime              = jobTime;
        this.jobType              = jobType;
        this.prerequisiteJob      = prerequisiteJob;
        this.tileExcludeOtherJobs = tileExcludeOtherJobs;
        this.jobPriority          = jobPriority;

        // The tile won't hold a reference to this job. Likely because a character is wandering.
        if (tileExcludeOtherJobs == true)
        {
            tileOWW.currentJobType = jobType;
        }

        // Set default job pos
        jobPosX = tileOWW.GetX();
        jobPosY = tileOWW.GetY();

        if (jobTime < 0.1f)
        {
            Debug.LogWarning("Job time is too short! Prerequisites may be skipped");
        }
    }
Exemple #5
0
    public List <TileOWW> PreviewRoom(string roomType, int start_x, int end_x, int start_y, int end_y)
    {
        List <TileOWW> room_tiles = new List <TileOWW>();

        ClearPreviews();

        for (int x = start_x; x <= end_x; x++)
        {
            for (int y = start_y; y <= end_y; y++)
            {
                TileOWW t = WorldController.Instance.GetWorld().GetTileAt(x, y);

                if (t != null)
                {
                    // Check valid
                    if (t.GetInstalledFurniture()?.GetFurnitureType() != "Wall" && t.GetTileType() == "Hull")
                    {
                        room_tiles.Add(t);
                        CreatePreview(validPreviewPrefab, "Hull", x, y); // TODO: Different looks per room?
                    }
                    else
                    {
                        CreatePreview(invalidPreviewPrefab, "Hull", x, y);  // TODO: Different looks per room?
                    }
                }
            }
        }

        return(room_tiles);
    }
Exemple #6
0
    public TileOWW PreviewFurniture(FurnitureType furnitureType, int posX, int posY)
    {
        ClearPreviews();


        TileOWW furnitureTile       = WorldController.Instance.GetWorld().GetTileAt(posX, posY);
        TileOWW furnitureTileReturn = null;

        if (furnitureTile != null)
        {
            // Check valid
            if (CheckFurniturePreviewValid(furnitureTile, furnitureType))
            {
                CreatePreview(validPreviewPrefab, furnitureType.title, posX, posY);
                furnitureTileReturn = furnitureTile;
            }
            else
            {
                CreatePreview(invalidPreviewPrefab, furnitureType.title, posX, posY);
            }
        }
        // Display price UI
        InputController.Instance.currentBuildPrice = furnitureType.cost;

        return(furnitureTileReturn);
    }
    public void UpdateJob(TileOWW tileOWW)
    {
        if (tileOWW == null)
        {
            return;
        }

        RuleTile t;

        if (tileOWW.currentJobType != null &&                                                                         // Has a job
            ((tileOWW.installedFurnitureAltX == null && tileOWW.installedFurnitureAltY == null) ||                    // Is the origin tile of job
             (tileOWW.installedFurnitureAltX == tileOWW.GetX() && tileOWW.installedFurnitureAltY == tileOWW.GetY()))) // Is the origin tile of job
        {
            // Create job graphics
            t = Resources.Load <RuleTile>("TileSets/Furniture/" + JobQueueController.Instance.ConvertJobTypeToFurnitureType(tileOWW.currentJobType));
            tilemap.SetTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0), t);
            tilemap.RefreshTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0));
        }
        else
        {
            // Remove tile graphics
            t = null;
            tilemap.SetTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0), t);
            tilemap.RefreshTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0));
        }
    }
    protected override void Refresh()
    {
        // Call from superclass
        base.Refresh();

        // Program from here onwards

        if (targetJob == null || targetJob?.GetJobType() == "Wander")
        {
            // Not required to use global job queue yet
            // targetJob = jobQueue.GetNextJob(new Vector2(currentX, currentY), failedJobs);

            DoJobAtVisibleCharacter("Enemy");

            if (targetJob == null)
            {
                // We are idle, wander the ship
                TileOWW randomTile = WorldController.Instance.GetWorld().GetRandomHullTile();
                if (randomTile != null)
                {
                    targetJob = new Job(delegate() { }, randomTile, 1f, "Wander", JobPriority.Medium, tileExcludeOtherJobs: false);
                }
            }
        }
    }
Exemple #9
0
    protected void DoJobAtFurnitureTile(string furnitureType, string jobType, Action action, float jobTime)
    {
        // Does the furnitureType exist in the world?
        if (BuildModeController.Instance.furnitureTileOWWMap.ContainsKey(furnitureType))
        {
            // Loop through all chargers
            for (int i = 0; i < BuildModeController.Instance.furnitureTileOWWMap[furnitureType].Count; i++)
            {
                TileOWW tileOWW = BuildModeController.Instance.furnitureTileOWWMap[furnitureType][i];
                if (tileOWW.currentJobType == null)
                {
                    if (targetJob != null)
                    {
                        if (targetJob.GetJobType() != jobType)
                        {
                            jobQueue.AddJob(targetJob);
                            targetJob = currentJob = null;
                        }
                    }

                    targetJob = new Job(action, tileOWW, 5, jobType, JobPriority.Medium);
                    return;
                }
            }
        }
    }
Exemple #10
0
    protected override void Refresh()
    {
        // Call from superclass
        base.Refresh();

        // Program from here onwards


        // Find and set a target/current jobs

        if (targetJob == null || targetJob?.GetJobType() == "Wander")
        {
            targetJob = jobQueue.GetNextJob(new Vector2(currentX, currentY), failedJobs);
            if (targetJob == null)
            {
                // We are idle
                // TODO: Go to storage and enter low power mode

                // Get random hull tile
                TileOWW randomHullTile = WorldController.Instance.GetWorld().GetRandomHullTile();
                if (randomHullTile != null)
                {
                    targetJob = new Job(delegate() { }, randomHullTile, 1, "Wander", JobPriority.Low, tileExcludeOtherJobs: false);
                }
            }
        }
    }
    public void UpdateFurniture(TileOWW tileOWW)
    {
        RuleTile t;

        if (tileOWW.GetInstalledFurniture() != null)
        {
            // Create tile graphics
            t = Resources.Load <RuleTile>("TileSets/Furniture/" + tileOWW.GetInstalledFurniture().GetFurnitureType());
            tilemap.SetTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0), t);
            tilemap.RefreshTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0));

            // Pathfinding
            if (!tileOWW.GetIsWalkable())
            {
                // Create NavMeshObstacle GameObject
                GameObject go = new GameObject();
                go.name               = "NavMeshBlocking: (" + tileOWW.GetX() + " ," + tileOWW.GetY() + ")";
                go.transform.parent   = Instance.transform;
                go.transform.position = new Vector3(tileOWW.GetX(), tileOWW.GetY(), 0);
                NavMeshObstacle nma = go.AddComponent <NavMeshObstacle>();
                nma.center = new Vector3(0.5f, 0.5f);

                // Set parameters depending on the furniture type
                if (tileOWW.GetInstalledFurniture().GetFurnitureType() == "Wall")
                {
                    nma.carving = true;
                    nma.size    = new Vector3(0.7f, 0.7f, 1f);
                }
                else if (tileOWW.GetInstalledFurniture().GetFurnitureType() == "Airlock")
                {
                    nma.size = new Vector3(1f, 1f, 1f);
                    go.AddComponent <AirlockDoor>();
                    BoxCollider2D boxCollider = go.AddComponent <BoxCollider2D>();
                    boxCollider.isTrigger = true;
                    boxCollider.offset    = new Vector2(0.5f, 0.5f);
                    Rigidbody2D rigidbody = go.AddComponent <Rigidbody2D>();
                    rigidbody.constraints = RigidbodyConstraints2D.FreezeAll;
                }
                tileNavBlockMap.Add(tileOWW, go);
            }
        }
        else
        {
            // Remove tile graphics
            t = null;
            tilemap.SetTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0), t);
            tilemap.RefreshTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0));
            if (tileNavBlockMap.ContainsKey(tileOWW))
            {
                if (tileNavBlockMap[tileOWW] != null)
                {
                    // Remove NavMeshObstacle GameObject
                    GameObject go = tileNavBlockMap[tileOWW];
                    tileNavBlockMap.Remove(tileOWW);
                    Destroy(go);
                }
            }
        }
    }
Exemple #12
0
    private void TileOxygen(TileOWW originTile, TileOWW nextTile)
    {
        // Base case #1
        if (nextTile.GetInstalledFurniture()?.GetFurnitureType() == "Wall" || nextTile.GetInstalledFurniture()?.GetFurnitureType() == "Airlock")
        {
            return;
        }

        // Base case #2
        if (!uncheckedTiles.Contains(nextTile))
        {
            return;
        }

        // Main
        oxygenTileGroups[originTile].Add(nextTile);
        if (uncheckedTiles.Contains(nextTile))
        {
            uncheckedTiles.Remove(nextTile);
        }

        // Base case #3
        // Note we still add this tile to the group without spreading to other tiles
        if (nextTile.GetTileType() == "Empty")
        {
            return;
        }

        // Spread to next tiles
        TileOWW tileNorth = WorldController.Instance.GetWorld().GetTileAt(nextTile.GetX(), nextTile.GetY() + 1);
        TileOWW tileEast  = WorldController.Instance.GetWorld().GetTileAt(nextTile.GetX() + 1, nextTile.GetY());
        TileOWW tileSouth = WorldController.Instance.GetWorld().GetTileAt(nextTile.GetX(), nextTile.GetY() - 1);
        TileOWW tileWest  = WorldController.Instance.GetWorld().GetTileAt(nextTile.GetX() - 1, nextTile.GetY());

        if (tileNorth != null)
        {
            {
                TileOxygen(originTile, tileNorth);
            }
        }
        if (tileEast != null)
        {
            {
                TileOxygen(originTile, tileEast);
            }
        }
        if (tileSouth != null)
        {
            {
                TileOxygen(originTile, tileSouth);
            }
        }
        if (tileWest != null)
        {
            {
                TileOxygen(originTile, tileWest);
            }
        }
    }
    public bool TryDestroyJob(TileOWW tileOWW, JobPriority jobPriority)
    {
        List <Job> jobList = new List <Job>();

        if (jobPriority == JobPriority.User)
        {
            jobList = jobs_user;
        }
        else if (jobPriority == JobPriority.High)
        {
            jobList = jobs_high;
        }
        else if (jobPriority == JobPriority.Medium)
        {
            jobList = jobs_med;
        }
        else if (jobPriority == JobPriority.Low)
        {
            jobList = jobs_low;
        }

        // Check the jobList first
        foreach (Job job in jobList)
        {
            if (job.GetTileOWW() == tileOWW)
            {
                jobList.Remove(job);
                tileOWW.currentJobType = null;
                JobSpriteController.Instance.UpdateJob(tileOWW);
                return(true);
            }
        }
        // Now check all staff
        foreach (GameObject staffGO in WorldController.Instance.staff)
        {
            if (staffGO.GetComponent <Staff>().currentJob != null)
            {
                if (staffGO.GetComponent <Staff>().currentJob.GetTileOWW() == tileOWW)
                {
                    staffGO.GetComponent <Staff>().currentJob = staffGO.GetComponent <Staff>().targetJob = null;
                    tileOWW.currentJobType = null;
                    JobSpriteController.Instance.UpdateJob(tileOWW);
                    return(true);
                }
            }
            if (staffGO.GetComponent <Staff>().targetJob != null)
            {
                if (staffGO.GetComponent <Staff>().targetJob.GetTileOWW() == tileOWW)
                {
                    staffGO.GetComponent <Staff>().currentJob = staffGO.GetComponent <Staff>().targetJob = null;
                    tileOWW.currentJobType = null;
                    JobSpriteController.Instance.UpdateJob(tileOWW);
                    return(true);
                }
            }
        }

        return(false);
    }
Exemple #14
0
    private void CreateRemoveFurnitureAction(TileOWW tile, int offsetX = 0, int offsetY = 0)
    {
        Action removeFurnitureAction = delegate() { RemoveFurniture(tile); };
        Job    j = new Job(removeFurnitureAction, tile, 2, "Remove " + tile.GetInstalledFurniture().GetFurnitureType(), JobPriority.Medium);

        j.SetAltPosition(tile.GetX() + offsetX, tile.GetY() + offsetY);
        tile.currentJobType = j.GetJobType();
        JobQueueController.BuildersJobQueue.AddJob(j);
    }
Exemple #15
0
    public void PlaceHull(TileOWW tile)
    {
        tile.SetTileType("Hull");
        emptyHullTiles.Add(tile);
        allHullTiles.Add(tile);

        // Event checks
        ObjectiveController.Instance.CheckObjectives();
    }
Exemple #16
0
    public List <TileOWW> PreviewFurniture(FurnitureType furnitureType, int start_x, int end_x, int start_y, int end_y)
    {
        List <TileOWW> furniture_tiles = new List <TileOWW>();

        ClearPreviews();

        int estimatedCost = 0;

        for (int x = start_x; x <= end_x; x++)
        {
            for (int y = start_y; y <= end_y; y++)
            {
                TileOWW t = WorldController.Instance.GetWorld().GetTileAt(x, y);

                if (t != null)
                {
                    // Check valid
                    if (CheckFurniturePreviewValid(t, furnitureType))
                    {
                        furniture_tiles.Add(t);
                        CreatePreview(validPreviewPrefab, furnitureType.title, x, y);
                        estimatedCost += furnitureType.cost;
                    }
                    else
                    {
                        CreatePreview(invalidPreviewPrefab, furnitureType.title, x, y);
                    }
                }
            }
        }
        // Display price UI
        InputController.Instance.currentBuildPrice = estimatedCost;

        if (estimatedCost > CurrencyController.Instance.GetBankBalance())
        {
            ClearPreviews();

            for (int x = start_x; x <= end_x; x++)
            {
                for (int y = start_y; y <= end_y; y++)
                {
                    TileOWW t = WorldController.Instance.GetWorld().GetTileAt(x, y);

                    if (t != null)
                    {
                        CreatePreview(invalidPreviewPrefab, furnitureType.title, x, y);
                    }
                }
            }
            return(null);
        }
        else
        {
            return(furniture_tiles);
        }
    }
 public World(int width, int height)
 {
     // Tile array
     tiles = new TileOWW[width, height];
     for (int i = 0; i < width; i++)
     {
         for (int j = 0; j < height; j++)
         {
             tiles[i, j] = new TileOWW(i, j, "Empty");
         }
     }
 }
Exemple #18
0
    // Overloaded method for planing single furniture jobs at once
    public void PlanFurniture(TileOWW furnitureTile, FurnitureType furnitureType)
    {
        if (furnitureTile != null)
        {
            // Check validity for multi-tile
            for (int i = 0; i < furnitureType.sizeX; i++)
            {
                for (int j = 0; j < furnitureType.sizeY; j++)
                {
                    TileOWW temp = WorldController.Instance.GetWorld().GetTileAt(furnitureTile.GetX() + i, furnitureTile.GetY() + j);
                    if (temp.currentJobType != null)
                    {
                        Debug.Log("Unable to place job baceause tile already had an existing job: " + temp.currentJobType);
                        return; // Failed to place
                    }
                }
            }

            Action placeFurnitureAction = delegate() { PlaceFurniture(furnitureTile, furnitureType.title); };
            Job    job;

            // Allow certain furniture to overwrite others by creating a prerequisite removal job
            if (furnitureTile.GetInstalledFurniture()?.GetFurnitureType() == "Wall" && furnitureType.title == "Airlock")
            {
                Action removeExistingFurnitureAction = delegate() { RemoveFurniture(furnitureTile); };
                Job    prerequisiteJob = new Job(removeExistingFurnitureAction, furnitureTile, 2, "Remove Wall", JobPriority.Medium);
                job = new Job(placeFurnitureAction, furnitureTile, furnitureType.installTime, "Build " + furnitureType.title, JobPriority.Medium, prerequisiteJob);
            }
            else
            {
                job = new Job(placeFurnitureAction, furnitureTile, furnitureType.installTime, "Build " + furnitureType.title, JobPriority.Medium);
            }

            furnitureTile.currentJobType = job.GetJobType();
            JobQueueController.BuildersJobQueue.AddJob(job);

            // Invoice
            CurrencyController.Instance.DeductBankBalance(furnitureType.cost);

            // Multi-tile furniture items
            for (int i = 0; i < furnitureType.sizeX; i++)
            {
                for (int j = 0; j < furnitureType.sizeY; j++)
                {
                    TileOWW temp = WorldController.Instance.GetWorld().GetTileAt(furnitureTile.GetX() + i, furnitureTile.GetY() + j);
                    temp.currentJobType         = furnitureTile.currentJobType;
                    temp.installedFurnitureAltX = furnitureTile.GetX();
                    temp.installedFurnitureAltY = furnitureTile.GetY();
                }
            }
        }
    }
Exemple #19
0
    public TileOWW PreviewRemoveFurniture(int posX, int posY)
    {
        ClearPreviews();

        TileOWW tileOWW = WorldController.Instance.GetWorld().GetTileAt(posX, posY);

        // Check valid
        if (tileOWW?.GetInstalledFurniture()?.GetFurnitureType() == "Wall" || tileOWW?.currentJobType == "Build Wall")
        {
            CreatePreview(removePreviewPrefab, "Wall", posX, posY);
            return(tileOWW);
        }
        return(null);
    }
Exemple #20
0
    public bool CheckFurniturePreviewValid(TileOWW tile, FurnitureType furnitureType)
    {
        if (furnitureType.cost > CurrencyController.Instance.GetBankBalance())
        {
            // Debug.Log("Couldn't affoard.");
            return(false);
        }

        // Check all tiles of multi-tile furniture
        for (int i = 0; i < furnitureType.sizeX; i++)
        {
            for (int j = 0; j < furnitureType.sizeY; j++)
            {
                TileOWW t = WorldController.Instance.GetWorld().GetTileAt(tile.GetX() + i, tile.GetY() + j);
                if ((t.GetTileType() == "Hull" && furnitureType.exteriorOnly) || (t.GetTileType() == "Empty" && !furnitureType.exteriorOnly))
                {
                    // Debug.Log("Interior / exterior check failed.");
                    return(false);
                }
                if (t.installedFurnitureAltX != null || t.installedFurnitureAltY != null)
                {
                    //Allow certain furniture to overwrite others
                    if (t.GetInstalledFurniture()?.GetFurnitureType() == "Wall" && furnitureType.title == "Airlock")
                    {
                        return(true);
                    }
                    // Debug.Log("Multi-tile furniture check failed.");
                    return(false);
                }
                if (t.GetInstalledFurniture() != null)
                {
                    //Allow certain furniture to overwrite others
                    if (t.GetInstalledFurniture().GetFurnitureType() == "Wall" && furnitureType.title == "Airlock")
                    {
                        return(true);
                    }
                    // Debug.Log("Installed furniture check failed");
                    return(false);
                }
                if (t.currentJobType != null)
                {
                    // Debug.Log("Existing job check failed.");
                    return(false);
                }
            }
        }

        // All checks passed, furniture is valid.
        return(true);
    }
Exemple #21
0
    public void PreviewStaff(string staffType, int posX, int posY)
    {
        ClearPreviews();

        TileOWW staffTile = WorldController.Instance.GetWorld().GetTileAt(posX, posY);

        if (CurrencyController.Instance.GetBankBalance() >= 500)
        {
            CreatePreview(validPreviewPrefab, staffType, posX, posY);
        }
        else
        {
            CreatePreview(invalidPreviewPrefab, staffType, posX, posY);
        }

        // Display price UI
        InputController.Instance.currentBuildPrice = 1000;
    }
    public void UpdateRoom(TileOWW tileOWW)
    {
        RuleTile t;

        if (tileOWW.GetRoomType() != null)
        {
            // Create room graphics
            t = Resources.Load <RuleTile>("TileSets/Rooms/" + tileOWW.GetRoomType());
            tilemap.SetTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0), t);
            tilemap.RefreshTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0));
        }
        else
        {
            // Remove tile graphics
            t = null;
            tilemap.SetTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0), t);
            tilemap.RefreshTile(new Vector3Int(tileOWW.GetX(), tileOWW.GetY(), 0));
        }
    }
Exemple #23
0
    public void RemoveFurniture(TileOWW tile)
    {
        string furnitureType = tile.GetInstalledFurniture()?.GetFurnitureType();

        // 'Airlock' may be in 'Airlock Open' state
        if (furnitureType == "Airlock Open")
        {
            furnitureType = "Airlock";
        }

        // Update pathfinding
        if (furnitureType == "Wall")
        {
            // TODO: reset all failed jobs
        }

        tile.RemoveInstalledFurniture();

        // Multi-tile references
        for (int i = 0; i < furnitureTypes[furnitureType].sizeX; i++)
        {
            for (int j = 0; j < furnitureTypes[furnitureType].sizeY; j++)
            {
                TileOWW temp = WorldController.Instance.GetWorld().GetTileAt(tile.GetX() + i, tile.GetY() + j);
                temp.installedFurnitureAltX = null;
                temp.installedFurnitureAltY = null;

                if (tile.GetTileType() == "Hull")
                {
                    emptyHullTiles.Add(tile);
                }
            }
        }

        // Remove from map of furnitureType TileOWW
        while (furnitureTileOWWMap[furnitureType].Contains(tile))
        {
            furnitureTileOWWMap[furnitureType].Remove(tile);
        }

        ObjectiveController.Instance.CheckObjectives();
    }
Exemple #24
0
    // TODO: Return true before marking off the other tiles as checked!!
    private bool CheckTile(TileOWW tile, List <TileOWW> tilesToCheck)
    {
        if (tilesToCheck.Contains(tile))
        {
            tilesToCheck.Remove(tile);

            bool isSuccessful = false;

            if (CheckTile(WorldController.Instance.GetWorld().GetTileAt(tile.GetX(), tile.GetY() + 1), tilesToCheck))
            {
                isSuccessful = true;
            }
            if (CheckTile(WorldController.Instance.GetWorld().GetTileAt(tile.GetX(), tile.GetY() - 1), tilesToCheck))
            {
                isSuccessful = true;
            }
            if (CheckTile(WorldController.Instance.GetWorld().GetTileAt(tile.GetX() + 1, tile.GetY()), tilesToCheck))
            {
                isSuccessful = true;
            }
            if (CheckTile(WorldController.Instance.GetWorld().GetTileAt(tile.GetX() - 1, tile.GetY()), tilesToCheck))
            {
                isSuccessful = true;
            }

            if (isSuccessful)
            {
                return(true);
            }

            if (tile.GetInstalledFurniture()?.GetFurnitureType() == "Charging Pad") // TODO: The validity will be horrible
            {
                return(true);
            }

            return(false);
        }
        else
        {
            return(false);
        }
    }
    public void UpdateTile(TileOWW tile)
    {
        Tile t;

        if (!tileObjectMap.ContainsKey(tile))
        {
            // The tile might not exist when loading a game from file
            t        = ScriptableObject.CreateInstance <Tile>();
            t.name   = tile.GetX() + "_" + tile.GetY();
            t.sprite = Resources.Load <Sprite>("Images/Tiles/" + tile.GetTileType());
            tilemap.SetTile(new Vector3Int(tile.GetX(), tile.GetY(), 0), t);
            tileObjectMap.Add(tile, t);
        }
        else
        {
            t        = tileObjectMap[tile];
            t.sprite = Resources.Load <Sprite>("Images/Tiles/" + tile.GetTileType());
            tilemap.RefreshTile(new Vector3Int(tile.GetX(), tile.GetY(), 0));
        }
    }
Exemple #26
0
    void UpdateTileInterface()
    {
        // Abort if in any building mode
        if (isMode_Plopable || isMode_Dragable)
        {
            return;
        }

        if (Input.GetMouseButtonUp(0)) // LMB
        {
            // Check if player clicked on something other than a tile
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out RaycastHit hit))
            {
                if (hit.collider.tag != "NavigationPlane")
                {
                    return;
                }
            }

            // Get tile clicked on
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            TileOWW tileOWW  = WorldController.Instance.GetWorld().GetTileAt((int)mousePos.x, (int)mousePos.y);

            // Null checks
            if (tileOWW == null)
            {
                return;
            }
            if (tileOWW.GetTileType() == "Empty" && tileOWW.currentJobType == null)
            {
                return;
            }

            // Create interface
            tileInterfaceGO = Instantiate(tileInterfacePrefab);
            tileInterfaceGO.GetComponent <TileInterface>().tile          = tileOWW;
            tileInterfaceGO.GetComponent <TileInterface>().tileType.text = tileOWW.GetTileType();
        }
    }
Exemple #27
0
    public void PlaceFurniture(TileOWW tile, string furnitureType)
    {
        tile.SetInstalledFurniture(new InstalledFurniture(furnitureType));

        // Add to map of furnitureType TileOWW
        if (!furnitureTileOWWMap.ContainsKey(furnitureType))
        {
            furnitureTileOWWMap.Add(furnitureType, new List <TileOWW>());
        }
        furnitureTileOWWMap[furnitureType].Add(tile);

        // If engines built, update ship speed
        // TODO: Different types of engines
        if (furnitureType == "Engine")
        {
            // TODO: Different speeds per engine
            JourneyController.Instance.shipSpeedMax = furnitureTileOWWMap[furnitureType].Count * 5;
        }

        // Multi-tile references

        if (!furnitureTypes.ContainsKey(furnitureType))
        {
            Debug.LogError("This key wasnt found: " + furnitureType);
        }
        for (int i = 0; i < furnitureTypes[furnitureType].sizeX; i++)
        {
            for (int j = 0; j < furnitureTypes[furnitureType].sizeY; j++)
            {
                TileOWW temp = WorldController.Instance.GetWorld().GetTileAt(tile.GetX() + i, tile.GetY() + j);
                temp.currentJobType         = null;
                temp.installedFurnitureAltX = tile.GetX();
                temp.installedFurnitureAltY = tile.GetY();
                emptyHullTiles.Remove(tile);
            }
        }

        ObjectiveController.Instance.CheckObjectives();
    }
    public Job ToJob()
    {
        Job p = null;

        if (prerequisiteJob != null)
        {
            p = prerequisiteJob.ToJob();
        }

        TileOWW tile = WorldController.Instance.GetWorld().GetTileAt(tilePosX, tilePosY);

        if (tile == null)
        {
            Debug.LogWarning("Just made a job with no tile");
        }

        Job job = new Job(tile, jobTime, jobType, tileExcludeOtherJobs, jobPriority, p);

        job.SetAltPosition(jobPosX, jobPosY);

        return(job);
    }
Exemple #29
0
    public List <TileOWW> PreviewRemoveFurniture(int start_x, int end_x, int start_y, int end_y)
    {
        List <TileOWW> furniture_tiles = new List <TileOWW>();

        ClearPreviews();

        // Loop through all the tiles
        for (int x = start_x; x <= end_x; x++)
        {
            for (int y = start_y; y <= end_y; y++)
            {
                TileOWW tileOWW = WorldController.Instance.GetWorld().GetTileAt(x, y);

                // Check valid
                if (tileOWW != null)
                {
                    if (tileOWW.GetInstalledFurniture() != null)
                    {
                        if (tileOWW.GetInstalledFurniture().GetFurnitureType() != "Wall") // Do NOT remove wall furniture items!
                        {
                            furniture_tiles.Add(tileOWW);
                            CreatePreview(removePreviewPrefab, "Hull", x, y);
                        }
                    }
                    // Allow removal of build jobs that are not walls
                    else if (tileOWW.currentJobType != null)
                    {
                        if (tileOWW.currentJobType.Contains("Build") && !tileOWW.currentJobType.Contains("Wall") && !tileOWW.currentJobType.Contains("Hull"))
                        {
                            furniture_tiles.Add(tileOWW);
                            CreatePreview(removePreviewPrefab, "Hull", x, y);
                        }
                    }
                }
            }
        }
        return(furniture_tiles);
    }
Exemple #30
0
    public List <TileOWW> PreviewRemoveWall(int start_x, int end_x, int start_y, int end_y)
    {
        List <TileOWW> wall_tiles = new List <TileOWW>();

        ClearPreviews();

        // Loop through all the tiles
        for (int x = start_x; x <= end_x; x++)
        {
            for (int y = start_y; y <= end_y; y++)
            {
                TileOWW tileOWW = WorldController.Instance.GetWorld().GetTileAt(x, y);

                // Check valid
                if (tileOWW?.GetInstalledFurniture()?.GetFurnitureType() == "Wall" || tileOWW?.currentJobType == "Build Wall") // Only remove wall furniture items!
                {
                    wall_tiles.Add(tileOWW);
                    CreatePreview(removePreviewPrefab, "Wall", x, y);
                }
            }
        }
        return(wall_tiles);
    }