Esempio n. 1
0
 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);
    }