# Food and plants decay, and vanish after a few months
=begin

deterioratefood
===============
Somewhere between a "mod" and a "fps booster", with a small impact on
vanilla gameplay.

With this script running, all food and plants wear out and disappear
after several months. Barrels and stockpiles will keep them from
rotting, but it won't keep them from decaying. No more sitting on a
hundred years worth of food. No more keeping barrels of pig tails
sitting around until you decide to use them. Either use it, eat it,
or lose it. Seeds, are excluded from this, if you aren't planning on
using your pig tails, hold onto the seeds for a rainy day.

This script is...pretty far reaching. However, almost all long
running forts I've had end up sitting on thousands and thousands of
food items. Several thousand cooked meals, three thousand plump
helmets, just as many fish and meat. It gets pretty absurd. And your
FPS doesn't like it.

Usage: ``deterioratefood (start|stop)``

=end

class DeteriorateFood

    def initialize
    end

    def process
        return false unless @running

        items = [df.world.items.other[:FISH],
                 df.world.items.other[:FISH_RAW],
                 df.world.items.other[:EGG],
                 df.world.items.other[:CHEESE],
                 df.world.items.other[:PLANT],
                 df.world.items.other[:PLANT_GROWTH],
                 df.world.items.other[:FOOD]]

        items.each { |type|
            type.each { |i|
                i.wear_timer += 1
                if (i.wear_timer > 24 + rand(8))
                    i.wear_timer = 0
                    i.wear += 1
                end
                if (i.wear > 3)
                    i.flags.garbage_collect = true
                end
            }
        }


    end

    def start
        @onupdate = df.onupdate_register('deterioratefood', 1200, 1200) { process }
        @running = true

        puts "Deterioration of food commencing..."

    end

    def stop
        df.onupdate_unregister(@onupdate)
        @running = false
    end

    def status
        @running ? 'Running.' : 'Stopped.'
    end

end

case $script_args[0]
when 'start'
    if ($DeteriorateFood)
        $DeteriorateFood.stop
    end

    $DeteriorateFood = DeteriorateFood.new
    $DeteriorateFood.start

when 'end', 'stop'
    $DeteriorateFood.stop

else
    if $DeteriorateFood
        puts $DeteriorateFood.status
    else
        puts 'Not loaded.'
    end
end