Exemple #1
0
    public static bool IsBlockPoweredUp(Vector3i _blockPos, int _clrIdx)
    {
        WorldBase world = GameManager.Instance.World;

        if (world.IsRemote())
        {
            //Use HasActivePower power instead since directly powering blocks doesnt work on servers.
            return(BlockHydroponicFarmPower.HasActivePower(world, _clrIdx, _blockPos));
        }
        TileEntityPowered tileEntityPowered = (TileEntityPowered)GameManager.Instance.World.GetTileEntity(_clrIdx, _blockPos);

        if (tileEntityPowered != null)
        {
            if (tileEntityPowered.IsPowered)
            {
                DebugMsg("Block Power Is On");
                return(true);
            }
        }
        if (BlockHydroponicFarmPower.IsSpRemotePowerAllowed(_blockPos))
        {
            DebugMsg("No direct power found, checking for remote power");
            return(BlockHydroponicFarmPower.HasActivePower(world, _clrIdx, _blockPos));
        }
        DebugMsg("Block Power Is Off");
        return(false);
    }
    public override string GetActivationText(WorldBase _world, BlockValue _blockValue, int _clrIdx, Vector3i _blockPos, EntityAlive _entityFocusing)
    {
        string useString       = Localization.Get("useWorkstation", string.Empty);
        string workstationName = Localization.Get("hydroponicFarmPower", string.Empty);

        Vector3i powerBlockPos = _blockPos;

        powerBlockPos.y -= 1;
        if (BlockHydroponicFarmPower.IsBlockPoweredUp(powerBlockPos, _clrIdx))
        {
            return(useString + " " + workstationName);
        }
        return(useString + " " + workstationName + " (**UNPOWERED**)");
    }
    void Update()
    {
        if (workstationBlockRenderers == null)
        {
            GetWorkstationBlockRenderers();
        }

        curIsPowered = BlockHydroponicFarmPower.IsBlockPoweredUp(blockPos, cIdx);
        if (curIsPowered != isPowered)
        {
            isPowered = curIsPowered;
            if (isPowered)
            {
                light[0].intensity = 1;
                foreach (Renderer rend in powerBlockRenderers)
                {
                    rend.material.EnableKeyword("_EMISSION");
                    rend.material.SetColor("_EmissionColor", new Color(1, 1, 1));
                }
                if (workstationBlockRenderers != null)
                {
                    foreach (Renderer rend in workstationBlockRenderers)
                    {
                        rend.material.EnableKeyword("_EMISSION");
                        rend.material.SetColor("_EmissionColor", new Color(1, 1, 1));
                    }
                }
            }
            else
            {
                light[0].intensity = 0;
                foreach (Renderer rend in powerBlockRenderers)
                {
                    rend.material.EnableKeyword("_EMISSION");
                    rend.material.SetColor("_EmissionColor", new Color(0, 0, 0));
                }
                if (workstationBlockRenderers != null)
                {
                    foreach (Renderer rend in workstationBlockRenderers)
                    {
                        rend.material.EnableKeyword("_EMISSION");
                        rend.material.SetColor("_EmissionColor", new Color(0, 0, 0));
                    }
                }
            }
        }
    }
Exemple #4
0
    public static bool IsHydroponicFarmPowered(TileEntityWorkstation tew)
    {
        Vector3i powerBlockPos = tew.ToWorldPos();

        powerBlockPos.y -= 1;
        BlockValue powerBlockValue = GameManager.Instance.World.GetBlock(powerBlockPos);
        Block      powerBlock      = Block.list[powerBlockValue.type];

        bool isPowered = false;

        if (powerBlock.GetBlockName() == "hydroponicFarmPower")
        {
            // Is Power block powered
            Chunk chunk = (Chunk)GameManager.Instance.World.GetChunkFromWorldPos(powerBlockPos);
            isPowered = BlockHydroponicFarmPower.IsBlockPoweredUp(powerBlockPos, chunk.ClrIdx);

            // Halt crafting UI
            EntityPlayerLocal player   = GameManager.Instance.World.GetPrimaryPlayer();
            LocalPlayerUI     playerUI = player.PlayerUI;
            BlockValue        block    = GameManager.Instance.World.GetBlock(tew.ToWorldPos());
            string            text     = string.Format("workstation_{0}", Block.list[block.type].GetBlockName());
            if (playerUI.windowManager.Contains(text))
            {
                XUiC_WorkstationWindowGroup workstationWindowGroup = ((XUiC_WorkstationWindowGroup)((XUiWindowGroup)playerUI.windowManager.GetWindow(text)).Controller);
                if (workstationWindowGroup.WorkstationData != null && workstationWindowGroup.WorkstationData.TileEntity == tew)
                {
                    // The name of the XUiC_CraftingQueue field of XUiC_WorkstationWindowGroup is obfuscated so we find it by type to call it.
                    XUiC_CraftingQueue craftingQueue = null;
                    var listOfFieldNames             = typeof(XUiC_WorkstationWindowGroup).GetFields();
                    foreach (FieldInfo fieldInfo in listOfFieldNames)
                    {
                        FieldInfo field = null;
                        if (fieldInfo.FieldType == typeof(XUiC_CraftingQueue))
                        {
                            field = fieldInfo;
                        }
                        if (field != null)
                        {
                            craftingQueue = (XUiC_CraftingQueue)field.GetValue(workstationWindowGroup);
                        }
                    }

                    if (craftingQueue != null)
                    {
                        if (!isPowered)
                        {
                            //workstationWindowGroup.FNW.HaltCrafting();
                            craftingQueue.HaltCrafting();
                        }
                        else
                        {
                            //workstationWindowGroup.FNW.ResumeCrafting();
                            craftingQueue.ResumeCrafting();
                        }
                    }
                }
            }

            TileEntityWorkstationPatchFunctions.ChangePlantIfNeeded(tew);
            return(isPowered);
        }

        return(true);
    }