Skip to content

TypeScript for the API #133

@Josef37

Description

@Josef37

I wrote type definitions for the API, but didn't know where to make them accessible...

So for anyone searching online, here you go:
https://gist.github.com/Josef37/e075b6a005a47d146c7e7ab9ed7ae893

Here's the full file in case the link doesn't work for any reason...
/**
 * Main interface.
 *
 * Can be used like this:
 * ```
 * const solution: Solution = {
 *   init: (elevators, floors) => {
 *     // Here be code...
 *   },
 *   update: (dt, elevators, floors) => {
 *     // Here be more code...
 *   },
 * };
 * ```
 * Make sure to only copy starting at `{`.
 */
interface Solution {
  init: (elevators: Elevator[], floors: Floor[]) => void;
  update: (dt: number, elevators: Elevator[], floors: Floor[]) => void;
}

interface Elevator {
  /**
   * Queue the elevator to go to specified floor number.
   * If you specify true as second argument, the elevator will go to that floor directly, and then go to any other queued floors.
   */
  goToFloor(floor: number, forceNow?: boolean): void;

  /**
   * Clear the destination queue and stop the elevator if it is moving.
   * Note that you normally don't need to stop elevators - it is intended for advanced solutions with in-transit rescheduling logic.
   * Also, note that the elevator will probably not stop at a floor, so passengers will not get out.
   */
  stop(): void;

  /**
   * Gets the floor number that the elevator currently is on.
   */
  currentFloor(): number;

  /**
   * Gets or sets the going up indicator, which will affect passenger behaviour when stopping at floors.
   */
  goingUpIndicator(): boolean;
  goingUpIndicator(state: boolean): Elevator;

  /**
   * Gets or sets the going down indicator, which will affect passenger behaviour when stopping at floors.
   */
  goingDownIndicator(): boolean;
  goingDownIndicator(state: boolean): Elevator;

  /**
   * Gets the maximum number of passengers that can occupy the elevator at the same time.
   */
  maxPassengerCount(): number;

  /**
   * Gets the load factor of the elevator. 0 means empty, 1 means full. Varies with passenger weights, which vary - not an exact measure.
   */
  loadFactor(): number;

  /**
   * Gets the direction the elevator is currently going to move toward. Can be \"up\", \"down\" or \"stopped\".
   */
  destinationDirection(): "up" | "down" | "stopped";

  /**
   * The current destination queue, meaning the floor numbers the elevator is scheduled to go to.
   * Can be modified and emptied if desired. Note that you need to call checkDestinationQueue() for the change to take effect immediately.
   */
  destinationQueue: number[];

  /**
   * Checks the destination queue for any new destinations to go to.
   * Note that you only need to call this if you modify the destination queue explicitly.
   */
  checkDestinationQueue(): void;

  /**
   * Gets the currently pressed floor numbers as an array.
   */
  getPressedFloors(): number[];

  /**
   * Triggered when the elevator has completed all its tasks and is not doing anything.
   */
  on(event: "idle", callback: () => void): Elevator;
  /**
   * Triggered when a passenger has pressed a button inside the elevator.
   */
  on(
    event: "floor_button_pressed",
    callback: (floorNum: number) => void
  ): Elevator;
  /**
   * Triggered slightly before the elevator will pass a floor. A good time to decide whether to stop at that floor.
   * Note that this event is not triggered for the destination floor. Direction is either "up" or "down".
   */
  on(
    event: "passing_floor",
    callback: (floorNum: number, direction: "up" | "down") => void
  ): Elevator;
  /**
   * Triggered when the elevator has arrived at a floor.
   */
  on(event: "stopped_at_floor", callback: (floorNum: number) => void): Elevator;
}

interface Floor {
  /**
   * Gets the floor number of the floor object.
   */
  floorNum(): number;

  /**
   * Triggered when someone has pressed the up button at a floor.
   * Note that passengers will press the button again if they fail to enter an elevator.
   */
  on(event: "up_button_pressed", callback: () => void): Floor;

  /**
   * Triggered when someone has pressed the down button at a floor.
   * Note that passengers will press the button again if they fail to enter an elevator.
   */
  on(event: "down_button_pressed", callback: () => void): Floor;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions