Es müssen nun die in Sim.idl definierten Attributstypen auf Ihre
Bedeutsamkeit für Bewegung und Fressen hin untersucht werden. Hier ein
Auszug aus der Datei:
//Sim.idl ... /** all external known attribute types of objects */ enum AttrType { Kind, Size, Visibility , Armor, Attack, Reserve, Fitness, Sugar, Carbohydrate, Protein, Weight, Water }; /** datatype for attribute values */ typedef double AttrValue; /** datatype for attribute */ struct Attr { AttrType Type; AttrValue Value; }; typedef sequence<Attr> AttrList; ...Es wird nun zwischen festen und veränderlichen Attributen unterschieden: Attribute wie Kind und Size sind sicherlich fest, während z.B. die Nahrungswerte sich während des Lebenszyklus eines Insekts ständig ändern. Bei den veränderlichen Attributen wird noch einmal zwischen primären und abgeleiteten Attributen unterschieden, wobei die Attribute Sugar, Carbohydrate, Protein und Water primär sind und Weight und Fitness sich aus den anderen Attributen ableiten. setAttrib-Methoden sind damit nur für die 4 primären Nahrungswert-Attribute erlaubt, während die abgeleiteten Attribute lediglich fertig berechnete Vereinfachungen darstellen. Die jeweils für verschiedene Aspekte, z.B. Bewegung (Mover) oder Essen (Eater), notwendigen Modifikationen und Berechnungen der Attribute, die nicht mit der Kommunikation mit anderen Objekten verwoben sind, werden wo immer möglich in entsprechende Berechnungsobjekte ausgelagert. Diese sind im Folgenden:
Name | Funktion | zugehöriges process... |
kooperiert mit: | ||
Eater | Essen | tryEat() |
Fighter | Kämpfen | tryAttack() |
Holder | halten und bewegen anderer Objekte | tryHold() |
Looker | Beobachten anderer Objekte | getAttr() |
Mover | eigene Bewegung | Physical::Thing |
Observer | Benachrichtigung bei spezifizierten | self->getAttr() |
Attributsänderungen |