Beispiel #1
0
    public void TestForBlueprints()
    {
        List <ResourcePickup> blueprintKeysToRemove = blueprints.Keys.ToList();

        foreach (Vector2 key in tm.pickups.Keys.ToList())
        {
            if (ResourcePickup.IsAtPosition(key))
            {
                ResourcePickup resourceToTest = tm.pickups [key] as ResourcePickup;

                Vector3   spawnPos;
                Craftable craftableInfo = GetCraftableForResource(resourceToTest, out spawnPos);

                if (craftableInfo is BuildingInfo)
                {
                    blueprintKeysToRemove.Remove(resourceToTest);
                }
            }
        }

        foreach (ResourcePickup key in blueprintKeysToRemove)
        {
            Destroy(blueprints[key].gameObject);
            blueprints.Remove(key);
        }
    }
Beispiel #2
0
    public void TestForCrafting()
    {
        foreach (Vector2 key in tm.pickups.Keys.ToList())
        {
            if (ResourcePickup.IsAtPosition(key))
            {
                ResourcePickup resourceToTest = tm.pickups [key] as ResourcePickup;
                Vector3        spawnPos;
                Craftable      craftableInfo = GetCraftableForResource(resourceToTest, out spawnPos);

                if (craftableInfo is BuildingInfo)
                {
                    BuildingInfo buildingInfo = craftableInfo as BuildingInfo;

                    if (!blueprints.ContainsKey(resourceToTest))
                    {
                        Building newBuilding = tm.SpawnBuilding(spawnPos, buildingInfo.prefab, buildingInfo, resourceToTest.island);
                        blueprints.Add(resourceToTest, newBuilding);
                    }
                }
                else if (craftableInfo is WeaponInfo)
                {
                    WeaponInfo weaponInfo = craftableInfo as WeaponInfo;
                    tm.SpawnWeapon(spawnPos, weaponInfo, resourceToTest.island);
                }
                else if (craftableInfo is AugmentInfo)
                {
                    AugmentInfo augmentInfo = craftableInfo as AugmentInfo;
                    tm.SpawnAugment(spawnPos, augmentInfo, resourceToTest.island);
                }
            }
        }
    }
Beispiel #3
0
        public void MoveTile(float newHeight)
        {
            tile.transform.position = new Vector3(tile.transform.position.x, newHeight, tile.transform.position.z);
            Vector2 posV2 = TerrainManager.PosToV2(tile.transform.position);

            if (ResourcePickup.IsAtPosition(posV2))
            {
                ResourcePickup resource       = ResourcePickup.GetAtPosition(posV2);
                float          resourceHeight = TerrainManager.instance.PadAtPosition(posV2).GetValueOrDefault(tile.transform.position.y);
                for (int i = 0; i < resource.gameObjects.Count; i++)
                {
                    resource.gameObjects[i].transform.position = new Vector3(resource.gameObjects[i].transform.position.x, resourceHeight + (TerrainManager.instance.stackHeight * i), resource.gameObjects[i].transform.transform.position.z);
                }
                resource.UpdatePosition();
            }
        }
Beispiel #4
0
    public void PickUpPickup()
    {
        Vector2 playerPos = TerrainManager.PosToV2(playerTransform.position);

        if (ResourcePickup.IsAtPosition(playerPos))
        {
            CollectResource(ResourcePickup.GetAtPosition(playerPos));
        }
        else if (WeaponPickup.IsAtPosition(playerPos))
        {
            PickupWeapon(WeaponPickup.GetAtPosition(playerPos));
        }
        else if (AugmentPickup.IsAtPosition(playerPos))
        {
            PickupAugment(AugmentPickup.GetAtPosition(playerPos));
        }
    }
Beispiel #5
0
    public ResourcePickup SpawnResource(Vector3 position, ResourceInfo info, Island island, bool initialSpawn = false)
    {
        Vector2 posV2 = PosToV2(position);

        if (island == null || WeaponPickup.IsAtPosition(posV2))
        {
            return(null);
        }

        float      startingHeight;
        GameObject buildingObj = GetBuildingAtPosition(posV2);

        if (buildingObj != null)
        {
            Building building = buildingObj.GetComponent <Building> ();
            startingHeight = building.height + GetTileAtPosition(posV2).transform.position.y;
            if (building is ProductionBuilding)
            {
                (building as ProductionBuilding).SpawnTop();
            }
        }
        else
        {
            startingHeight = PadAtPosition(posV2).GetValueOrDefault(position.y);
        }

        List <Vector2> allDirections = new List <Vector2> ()
        {
            Vector2.zero, Vector2.right, Vector2.up, Vector2.left, Vector2.down
        };

        foreach (Vector2 direction in allDirections)
        {
            Vector2 posToCheck = posV2 + direction;
//			island = tiles [posToCheck].island;

            if (GetTileAtPosition(posToCheck) != null)
            {
                float posHeightOffset = GetTileAtPosition(posToCheck).transform.position.y - GetTileAtPosition(posV2).transform.position.y;

                if (ResourcePickup.IsAtPosition(posToCheck))
                {
                    ResourcePickup curResource = ResourcePickup.GetAtPosition(posToCheck);
//					print ("Dir: " + direction + " Resource At Pos, Type: " + curResource.info.type);

                    if (curResource.info.type == info.type)
                    {
                        GameObject resourceGO = CreateResource(info, island.transform);
                        resourceGO.transform.position = new Vector3(posToCheck.x, 0f, posToCheck.y);

                        curResource.gameObjects.Add(resourceGO);
                        resourceGO.transform.Translate(Vector3.up * ((stackHeight * (curResource.gameObjects.Count - 1)) + startingHeight + posHeightOffset));

                        if (!initialSpawn && !GameManager.isLoadingFromSave)
                        {
                            UpdateResources();
                            SavedGame.UpdatePickups();
                        }

                        return(curResource);
                    }
                }
                else
                {
//					print ("Dir: " + direction + " creating new resource");

                    GameObject resourceGO = CreateResource(info, island.transform);
                    float      height     = 0f;
                    if (GetTileAtPosition(posToCheck))
                    {
                        height = GetTileAtPosition(posToCheck).transform.position.y;
                    }
                    resourceGO.transform.position = new Vector3(posToCheck.x, 0f, posToCheck.y);
                    ResourcePickup resource = new ResourcePickup(info, resourceGO, island);

                    pickups.Add(posToCheck, resource);
                    island.pickups.Add(resource);
                    resourceGO.transform.Translate(Vector3.up * (startingHeight + posHeightOffset));

                    if (!initialSpawn && !GameManager.isLoadingFromSave)
                    {
                        SavedGame.UpdatePickups();
                        UpdateResources();
                    }

                    return(resource);
                }
            }
            else
            {
//				print ("Dir: " + direction + " no tile at pos:" + posToCheck);
            }
        }

        return(null);
    }
Beispiel #6
0
    Craftable GetCraftableForResource(ResourcePickup anchorResource, out Vector3 spawnPos)
    {
        ResourceInfo.ResourceType tileType        = tm.tiles[anchorResource.position].resourceType;
        List <Crafting.Recipe>    possibleRecipes = GetPossibleRecipes(new Stack(anchorResource.info.type, tileType, anchorResource.gameObjects.Count));

        bool hasRecipe = false;

        Crafting.Recipe       confirmedRecipe   = new Crafting.Recipe();
        List <ResourcePickup> affectedResources = new List <ResourcePickup> ();

        foreach (var recipe in possibleRecipes)
        {
            int correct = 0;
            for (int y = 0; y < recipe.resources.GetLength(1); y++)
            {
                for (int x = 0; x < recipe.resources.GetLength(0); x++)
                {
                    Vector2 posToCheck = new Vector2(anchorResource.position.x + x, anchorResource.position.y + y);
                    if (ResourcePickup.IsAtPosition(posToCheck) && tm.PadAtPosition(posToCheck) == null)
                    {
                        ResourcePickup resourceAtPos = ResourcePickup.GetAtPosition(posToCheck);
                        if (resourceAtPos.island.buildable)
                        {
                            if (resourceAtPos.info.type == recipe.resources [x, y].resourceType && resourceAtPos.gameObjects.Count == recipe.resources [x, y].count)
                            {
                                // check tile
                                ResourceInfo.ResourceType curTileType = tm.tiles [posToCheck].resourceType;
                                if (curTileType == recipe.resources [x, y].tileType)
                                {
                                    affectedResources.Add(resourceAtPos);
                                    correct++;
                                }
                            }
                        }
                    }
                }
            }

            if (correct >= recipe.resources.Length)
            {
                hasRecipe       = true;
                confirmedRecipe = recipe;
                break;
            }
        }

        if (hasRecipe)
        {
            Craftable craftableInfo = craftableInfos [confirmedRecipe.name];
            spawnPos = anchorResource.gameObjects[0].transform.position + new Vector3(craftableInfo.anchorOffset.x, 0, craftableInfo.anchorOffset.y);

            if (confirmedRecipe.type != Recipe.RecipeType.Building)
            {
                tm.ConsumeResources(affectedResources);
            }

            return(craftableInfo);
        }
        else
        {
            spawnPos = Vector3.zero;
            return(null);
        }
    }