private void Remove(Guid id, bool delete)
        {
            if (sceneDictionary.ContainsGuid(id))
            {
                WWObject rootObject = Get(id);

                // remove child from parent if there is a parent
                WWObjectData parent = rootObject.GetParent();
                if (parent != null)
                {
                    WWObject parentObject = Get(parent.id);
                    parentObject.RemoveChild(rootObject);
                }

                List <WWObjectData> objectDescendents = rootObject.GetAllDescendents();
                // include the root
                objectDescendents.Add(rootObject.objectData);

                foreach (WWObjectData objectToDelete in objectDescendents)
                {
                    WWObject objectToDestroy = RemoveObject(objectToDelete.id);
                    if (delete)
                    {
                        Destroy(objectToDestroy);
                    }
                }
            }
        }
        /// <see cref="SceneGraphManager.Load"/>
        public void Load(string filePath)
        {
            string json = FileIO.LoadJsonFromFile(filePath);

            var objectsToRestore = JsonConvert.DeserializeObject <List <WWObjectJSONBlob> >(json);

            Debug.Log(string.Format("Loaded {0} objects from file", objectsToRestore.Count));

            foreach (WWObjectJSONBlob obj in objectsToRestore)
            {
                var      objectData = new WWObjectData(obj);
                WWObject go         = WWObjectFactory.Instantiate(objectData);
                Add(go);
            }

            // re-link children since all the objects have been instantiated in game world
            foreach (WWObjectJSONBlob obj in objectsToRestore)
            {
                WWObject root = Get(obj.id);
                var      childrenToRestore = new List <WWObject>();
                foreach (Guid childID in obj.children)
                {
                    WWObject childObject = Get(childID);
                    childrenToRestore.Add(childObject);
                }
                root.AddChildren(childrenToRestore);
            }
        }
        public static WWObject Instantiate(WWObjectData objectData)
        {
            Vector3 spawnPos = CoordinateHelper.WWCoordToUnityCoord(objectData.wwTransform.coordinate);

            // Load resource and check to see if it is valid.
            WWResource         resource = WWResourceController.GetResource(objectData.resourceTag);
            GameObject         gameObject;
            WWResourceMetadata resourceMetadata = resource.GetMetaData();

            if (resource.GetPrefab() == null)
            {
                gameObject       = GameObject.CreatePrimitive(PrimitiveType.Cube);
                resourceMetadata = gameObject.AddComponent <WWResourceMetadata>();
                gameObject.transform.Translate(spawnPos);
            }
            else
            {
                if (resource.GetMetaData() == null)
                {
                    Debug.Log("There is no metadata for this resource, so it cannot be instantiated.");
                    return(null);
                }
                // Create a GameObject at the correct location and rotation.
                gameObject = Object.Instantiate(resource.GetPrefab(), spawnPos,
                                                Quaternion.Euler(0, objectData.wwTransform.rotation, 0));
            }

            // Use ResourceMetaData to construct the object.
            WWObject wwObject = ConstructWWObject(gameObject, resourceMetadata);

            // Give the new WWObject the data used to create it.
            wwObject.Init(objectData, resourceMetadata);
            wwObject.SetTransform(objectData.wwTransform);
            return(wwObject);
        }
Beispiel #4
0
        private WWObject ForceRotateAndPlaceObject(Vector3 position)
        {
            int          theRot       = curRotation;
            Coordinate   coordRotated = CoordinateHelper.UnityCoordToWWCoord(position);
            var          wwTransform  = new WWTransform(coordRotated, theRot);
            WWObjectData objData      = WWObjectFactory.CreateNew(wwTransform, GetResourceTag());
            WWObject     go           = WWObjectFactory.Instantiate(objData);

            return(go);
        }
        private WWObject PlaceObject(Vector3 position)
        {
            int          tileIndex   = Mathf.Abs(curTile) % possibleTiles.Count;
            Coordinate   coordinate  = CoordinateHelper.UnityCoordToWWCoord(position);
            var          wwTransform = new WWTransform(coordinate, curRotation);
            WWObjectData objData     = WWObjectFactory.CreateNew(wwTransform, possibleTiles[tileIndex]);
            WWObject     go          = WWObjectFactory.Instantiate(objData);

            return(go);
        }
        public static void AddObjectToSceneGraph()
        {
            Assert.AreEqual(0, ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().SceneSize());
            var          coordinate   = new Coordinate(0, 0, 0);
            var          wwTransform  = new WWTransform(coordinate);
            WWObjectData wwObjectData = WWObjectFactory.CreateNew(wwTransform, "white");
            WWObject     wwObject     = WWObjectFactory.Instantiate(wwObjectData);

            ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(wwObject);
            Assert.AreEqual(1, ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().SceneSize());
        }
Beispiel #7
0
        private void CreateCube(Vector3 controllerPos)
        {
            Coordinate cubePosition = CoordinateHelper.UnityCoordToWWCoord(controllerPos);

            Debug.Log("Cube Position: " + cubePosition.Index.x + ", " + cubePosition.Index.y + ", " +
                      cubePosition.Index.z);

            var          wwTransform = new WWTransform(cubePosition);
            WWObjectData data        = WWObjectFactory.CreateNew(wwTransform, "white");
            WWObject     obj         = WWObjectFactory.Instantiate(data);

            ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(obj);
        }
Beispiel #8
0
        /// <summary>
        /// Instantiates the WwObject wall belonging to the resource and adds the wall to the active
        /// Scene Graph.
        /// </summary>
        /// <param name="coordIndex">The coordinate index for this perimeter wall.</param>
        /// <param name="rotation">The valid rotation for this perimeter.</param>
        /// <param name="resourceTag">The resourceTag from which to load the WWObject from.</param>
        private static void PlaceWallObject(IntVector3 coordIndex, int rotation, string resourceTag)
        {
            var          coordinate  = new Coordinate(coordIndex);
            var          wwTransform = new WWTransform(coordinate, rotation);
            WWObjectData objData     = WWObjectFactory.CreateNew(wwTransform, resourceTag);
            WWObject     go          = WWObjectFactory.Instantiate(objData);

            if (!ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(go))
            {
                // this error should never happen as TryToPlaceWall checks for collision before calling this function
                Debug.LogError("Could not place wall because of collision, deleting temp");
                UnityEngine.Object.Destroy(go.gameObject);
            }
        }
Beispiel #9
0
        private readonly string assetName       = "tile_wallbrick";  // the exact name of the tile inside of the Asset Bundle

        private void Start()
        {
            // create a coordinate to place the tile
            var coordinate  = new Coordinate(0, 0, 0);
            var wwTransform = new WWTransform(coordinate, 0);
            // create the data needed to instantiate this tile
            WWObjectData tileData =
                WWObjectFactory.CreateNew(wwTransform, string.Format("{0}_{1}", assetBundleName, assetName));
            // instantiate the tile in the world
            WWObject tile = WWObjectFactory.Instantiate(tileData);

            // add the newly created tile to the SceneGraph
            ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(tile);
        }
 /// <summary>
 /// Constructor that takes in the state of a WWObjectData and constructs a blob.
 /// </summary>
 /// <param name="wwObjectData"></param>
 public WWObjectJSONBlob(WWObjectData wwObjectData)
 {
     id          = wwObjectData.id;
     wwTransform = new WWTransformJSONBlob(wwObjectData.wwTransform);
     resourceTag = wwObjectData.resourceTag;
     if (wwObjectData.parent != null)
     {
         parent = wwObjectData.parent.id;
     }
     children = new List <Guid>();
     foreach (WWObjectData child in wwObjectData.children)
     {
         children.Add(child.id);
     }
 }
        private void CreateObject(Vector3 position)
        {
            if (curObject != null)
            {
                Destroy(curObject.gameObject);
            }

            Coordinate coordinate  = CoordinateHelper.UnityCoordToWWCoord(position);
            var        wwTransform = new WWTransform(coordinate, curRotation);

            if (ManagerRegistry.Instance.GetAnInstance <WWObjectGunManager>().GetPossibleObjectKeys().Count > 0)
            {
                WWObjectData objData = WWObjectFactory.CreateNew(wwTransform,
                                                                 ManagerRegistry.Instance.GetAnInstance <WWObjectGunManager>().GetPossibleObjectKeys()[curTileIndex]);
                curObject = WWObjectFactory.Instantiate(objData);
            }
        }
        public static List <Coordinate> CreateTerrainFromImage(Texture2D heightmap)
        {
            var coordinates = new List <Coordinate>();
            var maxHeight   = 10;

            for (var x = 0; x < heightmap.width; x++)
            {
                for (var y = 0; y < heightmap.height; y++)
                {
                    var height = (int)(heightmap.GetPixel(x, y).r *maxHeight);
                    var c      = new Coordinate(x, height, y);
                    coordinates.Add(c);

                    var wwTransform = new WWTransform(c, 0);

                    WWObjectData parentData = WWObjectFactory.CreateNew(wwTransform, "white");
                    WWObject     parentObj  = WWObjectFactory.Instantiate(parentData);
                    ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(parentObj);


                    while (height > 0)
                    {
                        height--;
                        c = new Coordinate(x, height, y);
                        coordinates.Add(c);
                        wwTransform = new WWTransform(c, 0);

                        WWObjectData childData = WWObjectFactory.CreateNew(wwTransform, "white");

                        WWObject childObj = WWObjectFactory.Instantiate(childData);
                        ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(childObj);

                        var children = new List <WWObject>();
                        children.Add(childObj);
                        parentObj.AddChildren(children);
                        parentObj = childObj;
                    }
                }
            }
            return(coordinates);
        }
Beispiel #13
0
        private WWObject PlaceObject(Vector3 position)
        {
            List <int> possibleConfigurations =
                BuilderAlgorithms.GetPossibleRotations(position, GetResourceTag());

            if (possibleConfigurations.Count == 0)
            {
                return(null);
            }
            int theRot = possibleConfigurations[0];

            if (possibleConfigurations.Contains(curRotation))
            {
                theRot = curRotation;
            }
            Coordinate   coordRotated = CoordinateHelper.UnityCoordToWWCoord(position);
            var          wwTransform  = new WWTransform(coordRotated, theRot);
            WWObjectData objData      = WWObjectFactory.CreateNew(wwTransform, GetResourceTag());
            WWObject     go           = WWObjectFactory.Instantiate(objData);

            return(go);
        }
        private void Start()
        {
            ResourceLoader.LoadResources();

            for (var i = 0; i < 5; i++)
            {
                WWObjectData objData = WWObjectFactory.CreateNew(new WWTransform(new Coordinate(i, i, i), 0),
                                                                 "ww_basic_assets_Tile_Grass");
                WWObject go = WWObjectFactory.Instantiate(objData);
                ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(go);
            }

            for (var i = 0; i < 5; i++)
            {
                WWObjectData objData =
                    WWObjectFactory.CreateNew(new WWTransform(new Coordinate(i, i + 1, i), 0),
                                              "ww_basic_assets_Tile_Arch");
                WWObject go = WWObjectFactory.Instantiate(objData);
                ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(go);
            }

            for (var i = 0; i < 5; i++)
            {
                WWObjectData objData =
                    WWObjectFactory.CreateNew(new WWTransform(new Coordinate(i, i + 2, i), 0),
                                              "ww_basic_assets_Tile_FloorBrick");
                WWObject go = WWObjectFactory.Instantiate(objData);
                ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(go);
            }

            for (var i = 0; i < 5; i++)
            {
                WWObjectData objData =
                    WWObjectFactory.CreateNew(new WWTransform(new Coordinate(i, i + 2, i), 0),
                                              "ww_basic_assets_blueCube");
                WWObject go = WWObjectFactory.Instantiate(objData);
                ManagerRegistry.Instance.GetAnInstance <SceneGraphManager>().Add(go);
            }
        }