Colobot Forum - International Colobot Community

Full Version: Komenda factory oczami Level Designerów
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Możnaby ulepszyć factory o kilka dodatkowych funkcji takie jak: wytrzymałość bota czy szybkość nagrzewania silnika robota.
Coś takiego
Code:
item.factory(cat,health,cooling,speed,customname);

Cat - Kategoria
Health - wytrzymałość (dolmyśnie 100)
cooling - szybkość nagrzewania silnika odrzutowego (domyślnie 100);
speed - szybkość poruszania się robota (domyślnie 100);
customname - Nazwa wyprodukowanego robota w cudzysłowiu.
1. Na pewno nie do .factory() bo wtedy każdy program będzie mógł to zmieniać, jeśli już to do produce()
2. To dopiero w ramach implementowania MissionControllera, czyli po refaktoringu CBota, czyli po alpha-0.2.0
Uważam, że pakowanie multum parametrów do funkcji to kiepski pomysł. Kto to wszystko zapamięta? Jeśli coś to podać tablicę par klucz-wartość.
Może coś takiego? Nie wykracza poza możliwości CBOTa, chociaż zapewne jest zbyt obiektowe jak na jego strukturalną naturę. Takie opcje powinny być dostępne tylko dla MissionControllera IMHO, można też wtedy ustalić większe granice wartości (oczywiście powinny być ustawione w taki sposób, aby nie bugować silnika... 2 razy większa szybkość dla jednego bota już może być zabójcza, gdy zwiększy się dodatkowo szybkość symulacji, ale nie wiem).




Code:
// klasa istniejaca w grze, uproszczony przyklad jej interfejsu
class AbstractBot
{
   private float health;
   private float cooling;
   private float speed;
   private int category;
   private string name;

   private static int count = 0;

   public void Bot(int category)
   {
       this.category = category;
       this.health = 1.0f;
       this.cooling = 1.0f;
       this.speed = 1.0f;
       this.name = "Bot" + count;
       count += 1;
   }

   // Bardziej szczegolowe konstruktory

   // Gettery i settery
   // ...
   public setSpeed(float newSpeed)
   {
       this.speed = Clamp(newSpeed, 0.0f, 1.0f);
   }
   // ...
}

...

object botFactory = radar(BotFactory);
AbstractBot bot = new AbstractBot(WingedGrabber);
bot.setSpeed(2.0f); // chcialoby sie, cheaterze! :P
botFactory.factory(bot);
Drobna uwaga na szybko.

Jeśli już mówimy o MissionControllerze, to proponowałbym zmianę jego nazwy na LevelController. Obecna nazwa jest myląca, sugeruje bowiem że jest używany tylko w misjach bądź gorzej - może sugerować, że jest elementem fabularnym kojarzącym się z Centrum Kontroli Misji na przykład.
Plan miałem taki jak to opisał @Simbax, tylko bez getterów/setterów. Wraz z wprowadzeniem tego do MissionControllera będzie można używać tego do dynamicznego generowania obiektów na mapie (pamiętacie projekt randomowych reliefów na swobodnej?). Dlatego też czekam z tym do refaktoringu CBota, w tej chwili robienie rzeczy typu nowe klasy i dostęp do nich w kodzie to masakra.

@Raptor W sumie racja, ale pomyśli się o tym jak będziemy nieco bliżej jego implementacji.