public static Entity Spawn(Vector3I position, Blob config, EntityUniverseFacade universe)
        {
            var entity = new Entity(universe.AllocateNewEntityId(), false, KindCode, true);

            var blob = BlobAllocator.Blob(true);

            blob.SetString("kind", KindCode);
            blob.FetchBlob("position").SetVector3D(position.ToTileCenterVector3D());
            blob.FetchBlob("location").SetVector3I(position);
            blob.FetchBlob("velocity").SetVector3D(Vector3D.Zero);
            blob.SetString("tile", config.GetString("tile"));

            entity.Construct(blob, universe);

            universe.AddEntity(entity);


            //var itemBlob = BlobAllocator.Blob(true);
            //itemBlob.SetString("kind", "staxel.item.Placer");
            //itemBlob.SetString("tile", config.GetString("tile"));
            //var item = GameContext.ItemDatabase.SpawnItem(itemBlob, null);
            //if (item == Item.NullItem) {
            //    return entity;
            //}

            //if (entity.Inventory == null) {
            //    var inventory = new EntityInventory(entity);
            //    entity.GetType().GetProperty("Inventory").GetSetMethod(true).Invoke(entity, new[] { inventory });
            //    var inventoryBlob = BlobAllocator.Blob(true);
            //    inventoryBlob.SetLong("index", 0);
            //    inventoryBlob.SetLong("swapIndex", 0);
            //    inventoryBlob.SetLong("revision", 0);
            //    entity.Inventory.RestoreFrom(inventoryBlob);
            //}

            //if (entity.Collections == null) {
            //    var collections = new EntityCollections(entity);
            //    entity.GetType().GetProperty("Collections").GetSetMethod(true).Invoke(entity, new[] { collections });
            //    var collectionBlob = BlobAllocator.Blob(true);
            //    collectionBlob.SetLong("version", 2L);
            //    collectionBlob.FetchBlob("items");
            //    collectionBlob.SetLong("count", 0L);
            //    entity.Collections.RestoreFrom(collectionBlob);
            //}

            //entity.Inventory.SetActiveIndex(0);
            //entity.Inventory.GiveItem(new ItemStack(item, 1));

            return(entity);
        }
        public static Entity Spawn(EntityUniverseFacade facade, Tile tile, Vector3I location)
        {
            var entity = new Entity(facade.AllocateNewEntityId(), false, KindCode, true);
            var blob   = BlobAllocator.Blob(true);

            blob.SetString(nameof(tile), tile.Configuration.Code);
            blob.FetchBlob(nameof(location)).SetVector3I(location);
            blob.SetLong("variant", tile.Variant());
            blob.FetchBlob("position").SetVector3D(location.ToTileCenterVector3D());
            blob.FetchBlob("velocity").SetVector3D(Vector3D.Zero);
            entity.Construct(blob, facade);
            Blob.Deallocate(ref blob);
            facade.AddEntity(entity);
            return(entity);
        }
        public static Entity Spawn(Vector3I position, EntityUniverseFacade universe, Entity owner)
        {
            var entity = new Entity(universe.AllocateNewEntityId(), false, KindCode, true);

            var blob = BlobAllocator.Blob(true);

            blob.SetString("kind", KindCode);
            blob.FetchBlob("position").SetVector3D(position.ToTileCenterVector3D());
            blob.FetchBlob("location").SetVector3I(position);
            blob.SetLong("owner", owner.Id.Id);

            entity.Construct(blob, universe);

            universe.AddEntity(entity);

            return(entity);
        }
        public static Entity Spawn(Vector3I position, Blob config, EntityUniverseFacade universe)
        {
            var entity = new Entity(universe.AllocateNewEntityId(), false, KindCode, true);

            var blob = BlobAllocator.Blob(true);

            blob.SetString("kind", KindCode);
            blob.FetchBlob("position").SetVector3D(position.ToTileCenterVector3D());
            blob.FetchBlob("location").SetVector3I(position);
            blob.FetchBlob("velocity").SetVector3D(Vector3D.Zero);
            blob.FetchBlob("config").MergeFrom(config);

            entity.Construct(blob, universe);

            universe.AddEntity(entity);

            return(entity);
        }
        public static Entity Spawn(Vector3I position, EntityUniverseFacade universe, string owner, string uid, string bot = "nimbusfox.worldedit.entity.bot")
        {
            var entity = new Entity(universe.AllocateNewEntityId(), false, bot, true);

            var blob = BlobAllocator.Blob(true);

            blob.SetString("kind", bot);
            blob.FetchBlob("position").SetVector3D(position.ToTileCenterVector3D());
            blob.FetchBlob("location").SetVector3I(position);
            blob.SetString("owner", owner);
            blob.SetString("uid", uid);

            entity.Construct(blob, universe);

            universe.AddEntity(entity);

            return(entity);
        }
Example #6
0
        public static bool AnyInnerCableEntitiesInTile(this EntityUniverseFacade facade, Vector3I location, out Lyst <Entity> entities)
        {
            var output = false;

            var outputEntities = new Lyst <Entity>();

            facade.ForAllEntitiesInRange(location.ToTileCenterVector3D(), 1F, entity => {
                if (entity.Logic is InnerCableTileEntityLogic logic)
                {
                    if (logic.Location == location)
                    {
                        output = true;
                        outputEntities.Add(entity);
                    }
                }
            });

            entities = outputEntities;

            return(output);
        }