package isoworldremote;

//Describes a very basic material structure for the map embark
option optimize_for = LITE_RUNTIME;

// Plugin: isoworldremote

enum BasicMaterial {
    AIR = 0;
    OTHER = 1;
    INORGANIC = 2;
    LIQUID = 3;
    PLANT = 4;
    WOOD = 5;
};

enum LiquidType {
    ICE = 0;
    WATER = 1;
    MAGMA = 2;
}

enum BasicShape {
    NONE = 0;
    OPEN = 1;
    WALL = 3;
    FLOOR = 4;
    RAMP_UP = 5;
    RAMP_DOWN = 6;
}

message ColorDefinition {
    required int32 red = 1;
    required int32 green = 2;
    required int32 blue = 3;
}

message EmbarkTileLayer {
    repeated BasicMaterial mat_type_table = 4 [packed=true];
    repeated int32 mat_subtype_table = 5 [packed=true];
    repeated BasicShape tile_shape_table = 6 [packed=true];
    repeated ColorDefinition tile_color_table = 7;
}

message EmbarkTile {
    required int32 world_x = 1;
    required int32 world_y = 2;
    required sint32 world_z = 3;
    repeated EmbarkTileLayer tile_layer = 4;
    optional int32 current_year = 5;
    optional int32 current_season = 6;
    optional bool is_valid = 7;
}

// RPC GetEmbarkTile : TileRequest -> EmbarkTile
message TileRequest {
    optional int32 want_x = 1;
    optional int32 want_y = 2;
}

message MapRequest {
    optional string save_folder = 1;
}

// RPC GetEmbarkInfo : MapRequest -> MapReply
message MapReply {
    required bool available = 1;
    optional int32 region_x = 2;
    optional int32 region_y = 3;
    optional int32 region_size_x = 4;
    optional int32 region_size_y = 5;
    optional int32 current_year = 6;
    optional int32 current_season = 7;
}

// RPC GetRawNames : MapRequest -> RawNames
message RawNames {
    required bool available = 1;
    repeated string inorganic = 2;
    repeated string organic = 3;
}