private void Awake() { if (!TryGetComponent(out TileComponent) && InheritParent && !ForceTemplate) { TileComponent = GetComponentInParent <DataBlockComponent>(); } // if (TileComponent?.TextureLoaded ?? false && !ForceTemplate) // return; Data = TileComponent?.DataBlock; if (DefaultMaterial == null) { DefaultMaterial = (Material)Instantiate(Resources.Load("Materials/Object Material")); } if (Data == null || ForceTemplate) { Data = ApplyTileData(); // try to apply templated data } if (Data == null) { return; // outright failure } textures = Data.GetReferences(AssetType.Texture); // get referenced textures if (Data.GetParameterByName("FLOOR", out _)) // floors { CreateFloor(); } else if (Data.GetParameterByName("WALL", out _)) // walls { CreateWall(); } else if (Data.GetParameterByName("FillTexture", out var parameter)) // generic fill texture parameter info { ApplyTextureMaterial(GetComponent <Renderer>(), int.Parse(parameter.Value)); } else { ApplyTextureMaterial(GetComponentInChildren <Renderer>(), 0); } if (TileComponent != null) { TileComponent.TextureLoaded = true; } Loaded = true; }
/// <summary> /// Creates the object without any additional scripts from the given block info /// </summary> /// <param name="block"></param> /// <returns></returns> public static GameObject CreateKrabbyQuestObject(LevelDataBlock block, int X = 0, int Y = 0, Material ApplyMaterial = default) { Debug.Log("Creating object " + block.Name); void applyLevelBlock(GameObject obj) { var blockComponent = obj.AddComponent <DataBlockComponent>(); blockComponent.DataBlock = block; blockComponent.WorldTileX = X; blockComponent.WorldTileY = Y; blockComponent.Parent = obj; } GameObject returnVal = default; BlockParameter parameter = default; if (block.GetParameterByName("FLOOR", out parameter)) { returnVal = Instantiate(ResourceLoad("Objects/GroundTileObject")); // create a floor } else if (block.GetParameterByName("WALL", out parameter)) { switch (parameter.Value) { case "Low": returnVal = Instantiate(ResourceLoad("Objects/LowWallObject")); break; case "Medium": returnVal = Instantiate(ResourceLoad("Objects/MidWallObject")); break; case "High": returnVal = Instantiate(ResourceLoad("Objects/HighWallObject")); break; } } else if (block.GetParameterByName("Prefab", out parameter)) { var prefab = ResourceLoad("Objects/" + parameter.Value); if (prefab != null) { returnVal = Instantiate(prefab); var loader = returnVal.GetComponentInChildren <ModelLoader>(); if (loader != null) { loader.ApplyMaterial = ApplyMaterial; } } } else if (block.GetParameterByName("ServiceObject", out _)) { switch (block.BlockLayer) { case BlockLayers.Decoration: returnVal = Instantiate(ResourceLoad("Objects/AnonymousObject")); break; case BlockLayers.Integral: returnVal = Instantiate(ResourceLoad("Objects/AnonymousIntegralObject")); break; } } else if (block.Name?.Contains("THROWER") ?? false) { returnVal = Instantiate(ResourceLoad("Objects/TentacleCannon")); } else if (block.Name?.StartsWith("SPROUT") ?? false) { returnVal = Instantiate(ResourceLoad("Objects/TentacleSpike")); } else if (block.HasModel || block.GetParameterByName("ApplyTemplater", out _)) { returnVal = Instantiate(ResourceLoad("Objects/EmptyObject")); var loader = returnVal.AddComponent <ModelLoader>(); loader.ApplyMaterial = ApplyMaterial; } if (returnVal == null) { return(null); } returnVal.name = block.Name; applyLevelBlock(returnVal); return(returnVal); }