c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] Basic-Interpreter für den Bot

Absender: Timo Sandmann
Datum: Mi, 20.10.2010 10:55:20
In-reply-to: <096FD558C4D20046A1BABE72DFF0C6C33D48170389@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <096FD558C4D20046A1BABE72DFF0C6C33B3ED5A41C@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx><CE1FB7FF-4A39-47CE-80F6-316DD3A2D068@xxxxxxxxxxxxxxx><20100826195514.307630@xxxxxxx> <9FC1FC43-9D8F-4DF1-A899-DD2305A89771@xxxxxxxxxxxxxxx> <9DD5454FB74E49BABC1EAF57CD9B8505@FrankPC> <D077FF81-B44C-43D6-B5AE-DC12B2BE6714@xxxxxxxxxxxxxxx> <09576064-BE2C-42E1-96DA-ABACB3B3E4F6@xxxxxxxxxxxxxxx> <20101013181942.290030@xxxxxxx> <EFA41A8A-EFD0-42D4-A75A-798D1EE8B024@xxxxxxxxxxxxxxx> <096FD558C4D20046A1BABE72DFF0C6C33D480BB960@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <684B0001-B07F-4684-A8EE-FF7983C6FBE0@xxxxxxxxxxxxxxx> <096FD558C4D20046A1BABE72DFF0C6C33D480BBA80@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <76B4A7B2-81A9-4B95-8E25-B844559AE7E4@xxxxxxxxxxxxxxx> <20101015194527.14260@xxxxxxx> <C691C4C1-2C4D-4B76-9179-209CCEE69DEA@xxxxxxxxxxxxxxx> <8D82B88E-1DB8-47F2-9BE2-C68EAA6C284E@xxxxxxxxxxxxxxx> <096FD558C4D20046A1BABE72DFF0C6C33D481700C8@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <104916B9-7DC3-4B11-B85E-B6F6D498CD3B@xxxxxxxxxxxxxxx> <096FD558C4D20046A1BABE72DFF0C6C33D48170318@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <096FD558C4D20046A1BABE72DFF0C6C33D48170389@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>


Hallo Frank,

also mir ist die ganze Sache aufgefallen, weil der Wandfolger eben öfters anhält, jedenfalls wenn BEHAVIOUR_AVOID_COL_AVAILABLE aus ist. 

Ah, mit einem anderen Verhaltensdatensatz könnte das funktionieren, aber in bot_wait_statement() wird BLOCK_BEHAVIOUR(data, delay); aufgerufen und data wird in bot_ubasic_behaviour(Behaviour_t * caller) mit data = caller; auf den Datensatz des uBasic-Verhaltens gesetzt, also blockiert das uBasic-Verhalten. 
Eine Möglichkeit wäre, wenn man das delay-Verhalten mit activateBehaviour() startet anstatt BLOCK_BEHAVIOUR zu benutzen. Oder bot_wait_statement() merkt sich die aktuelle Zeit und das Verhalten prüft selbst, ob die Wartezeit abgelaufen ist. 

Gruß,
Timo


Am 20.10.2010 um 10:35 schrieb Menzel, Frank IT-OS:
> Ach so, jetzt verstehe ich was Du meinst.
> 
> Der Verhaltensdatensatz des uBasic-Verhaltens ist ein anderer als der, mit dem die Verhalten selbst aufgerufen werden. Damit wird das aufrufende Verhalten nicht blockiert und sofort nach Start eines Verhaltens/Routine die Kontrolle wieder an das uBasic-Verhalten selbst zurückgegeben. D.h. dass das Wait-Verhalten zwar gestartet wurde aber die Kontrolle gleich danach zurückgegeben wurde und eben damit nicht blockierend wirkt. Und solange die Zeit nicht um ist, das Verhalten also aktiv, bleiben die Speedwerte erhalten.
> 
> Man könnte sicher ein Verhalten schreiben, welches eine gewisse Zeit die Speedwerte erhält.
> Ich wollte aber kein blockierendes Wait sondern eben die Kontrolle darüber vom uBasic-Verhalten, um in dieser Zeit auch etwas zu tun (Auch wenn es jetzt nur die Kontrolle auf Aktivität dieses Verhaltens ist und das Setzen der alten Speedwerte).
> 
> Gruß, Frank
> 
> 
> -----Original Message-----
> From: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of Menzel, Frank IT-OS
> Sent: Wednesday, October 20, 2010 10:07 AM
> To: Entwicklung rund um den c't-bot
> Subject: Re: [ct-bot] Basic-Interpreter für den Bot
> 
> Hallo Timo,
> wie der Basic-Wandfolger zeigt, funktioniert's so, er dreht solange bis die Zeit um ist...
> Aber viele Wege führen nach Rom...
> 
> Gruß, Frank