From 6354f0d85ce38a5450142b2bc775e49f0abfc7b8 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Thu, 3 Dec 2020 06:17:43 +0100
Subject: [PATCH] Add BottleDeposit thing that spawns MusicPlayers for returned
 Bottles.

---
 plomrogue/tasks.py  | 12 ++++++++++++
 plomrogue/things.py | 26 +++++++++++++++++++++++++-
 rogue_chat.py       |  4 +++-
 3 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/plomrogue/tasks.py b/plomrogue/tasks.py
index eca9400..423758d 100644
--- a/plomrogue/tasks.py
+++ b/plomrogue/tasks.py
@@ -103,8 +103,20 @@ class Task_DROP(Task):
     def check(self):
         if not self.thing.carrying:
             raise PlayError('nothing to drop')
+        if self.thing.carrying.type_ == 'Bottle' and self.thing.carrying.full:
+            for t in [t for t in self.thing.game.things
+                      if t.type_ == 'BottleDeposit'
+                      and t.position == self.thing.position]:
+                raise PlayError('cannot drop full bottle into bottle deposit')
 
     def do(self):
+        if self.thing.carrying.type_ == 'Bottle' and not self.thing.carrying.full:
+            for t in [t for t in self.thing.game.things
+                      if t.type_ == 'BottleDeposit'
+                      and t.position == self.thing.position]:
+                t.accept()
+                self.thing.game.things.remove(self.thing.carrying)
+                break
         self.thing.carrying = None
 
 
diff --git a/plomrogue/things.py b/plomrogue/things.py
index 67a3807..30cd2bf 100644
--- a/plomrogue/things.py
+++ b/plomrogue/things.py
@@ -158,7 +158,6 @@ class Thing_MusicPlayer(Thing):
     symbol_hint = 'R'
     commandable = True
     portable = True
-    playlist = []
     repeat = True
     next_song_start = datetime.datetime.now()
     playlist_index = 0
@@ -167,6 +166,7 @@ class Thing_MusicPlayer(Thing):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.next_song_start = datetime.datetime.now()
+        self.playlist = []
 
     def proceed(self):
         if (not self.playing) or len(self.playlist) == 0:
@@ -250,6 +250,30 @@ class Thing_MusicPlayer(Thing):
 
 
 
+class Thing_BottleDeposit(Thing):
+    bottle_counter = 0
+    symbol_hint = 'O'
+
+    def proceed(self):
+        if self.bottle_counter >= 3:
+            self.bottle_counter = 0
+            t = self.game.thing_types['MusicPlayer'](self.game,
+                                                     position=self.position)
+            self.game.things += [t]
+            self.sound('BOTTLE DEPOSITOR',
+                       'here is a gift as a reward for ecological consciousness –'
+                       'use "command thing" on it to learn more!')
+            self.game.changed = True
+
+    def accept(self):
+        self.bottle_counter += 1
+        self.sound('BOTTLE DEPOSITOR',
+                   'thanks for this empty bottle – deposit %s more for a gift!' %
+                   (3 - self.bottle_counter))
+
+
+
+
 class ThingAnimate(Thing):
     blocking = True
     drunk = 0
diff --git a/rogue_chat.py b/rogue_chat.py
index cb3080d..4509d33 100755
--- a/rogue_chat.py
+++ b/rogue_chat.py
@@ -19,7 +19,8 @@ from plomrogue.tasks import (Task_WAIT, Task_MOVE, Task_WRITE, Task_PICK_UP,
 from plomrogue.things import (Thing_Player, Thing_Item, Thing_ItemSpawner,
                               Thing_SpawnPoint, Thing_SpawnPointSpawner,
                               Thing_Door, Thing_DoorSpawner, Thing_Bottle,
-                              Thing_BottleSpawner, Thing_MusicPlayer)
+                              Thing_BottleSpawner, Thing_BottleDeposit,
+                              Thing_MusicPlayer)
 
 from plomrogue.config import config
 game = Game(config['savefile'])
@@ -73,6 +74,7 @@ game.register_thing_type(Thing_Door)
 game.register_thing_type(Thing_DoorSpawner)
 game.register_thing_type(Thing_Bottle)
 game.register_thing_type(Thing_BottleSpawner)
+game.register_thing_type(Thing_BottleDeposit)
 game.register_thing_type(Thing_MusicPlayer)
 game.read_savefile()
 game.io.start_loop()
-- 
2.30.2