예제 #1
0
    public void StartDeconstructionPreparation()
    {
        if (WorkingCharacter != null)
        {
            WorkingCharacter.InterruptActivity();
            WorkingCharacter = null;
        }

        ProductionStarted = false;
        Halted            = true;
        jobReservation    = null;
        InputStorage.StartDeconstructionPreparation();
        preparingForDeconstruction = true;
    }
예제 #2
0
    public bool Work(float deltaTime, Character workingCharacter)
    {
        if (ProductionStarted == false &&
            (InputStorage.AreRequirementsMet == false || OutputStorage.IsEmpty == false))
        {
            return(false);
        }

        if (WorkingCharacter != null && WorkingCharacter != workingCharacter)
        {
            return(false);
        }

        jobReservation = null;

        if (ProductionStarted == false)
        {
            if (RemainingProductionCycles == 0)
            {
                WorkingCharacter.WorkFinished();
                WorkingCharacter = null;
                return(false);
            }

            if (Consume())
            {
                ProductionStarted  = true;
                productionTimeLeft = productionTime;
                WorkingCharacter   = workingCharacter;
                timeWithoutWork    = 0;
                return(true);
            }
            else
            {
                return(false);
            }
        }
        else
        {
            productionTimeLeft -= deltaTime;
            WorkingCharacter    = workingCharacter;
            timeWithoutWork     = 0;

            if (productionTimeLeft <= 0)
            {
                if (Produce())
                {
                    ProductionStarted          = false;
                    RemainingProductionCycles -= 1;
                    workingCharacter.WorkFinished();

                    if (IsNaturalDeposit)
                    {
                        GameManager.Instance.World.RemoveNaturalDepositReservations(workingCharacter);
                    }

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(true);
            }
        }
    }