about summary refs log tree commit diff stats
path: root/src/logger.h
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-04-10 19:10:21 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-04-10 19:10:21 -0400
commit1e8a9a8e42fa9d57f8d3bc02a025887a9706af75 (patch)
tree702180b08d9acb51ece8d934f780bd898661cb56 /src/logger.h
parentb5756da583f4592b6299614a4a45b996c091b71c (diff)
downloadlingo-ap-tracker-1e8a9a8e42fa9d57f8d3bc02a025887a9706af75.tar.gz
lingo-ap-tracker-1e8a9a8e42fa9d57f8d3bc02a025887a9706af75.tar.bz2
lingo-ap-tracker-1e8a9a8e42fa9d57f8d3bc02a025887a9706af75.zip
Increased minimum cmake version
Diffstat (limited to 'src/logger.h')
0 files changed, 0 insertions, 0 deletions
11 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
require 'set'
require 'yaml'

configpath = ARGV[0]
idspath = ARGV[1]
outputpath = ARGV[2]

CLASSIFICATION_NORMAL = 1
CLASSIFICATION_REDUCED = 2
CLASSIFICATION_INSANITY = 4

panel_to_id = {}
door_groups = {}
warp_groups = {}

panel_output = []
door_ids_by_item_id = {}
painting_ids_by_item_id = {}
warp_ids_by_item_id = {}
panel_ids_by_location_id = {}
classification_by_location_id = {}
sunwarps = Array.new(12) {Hash.new}
mentioned_doors = Set[]
mentioned_paintings = Set[]
mentioned_warps = Set[]
painting_output = {}
items_by_progressive_id = {}

ids_config = YAML.load_file(idspath)

config = YAML.load_file(configpath)
config.each do |room_name, room_data|
  if room_data.include? "panels"
    room_data["panels"].each do |panel_name, panel|
      location_id = ids_config["panels"][room_name][panel_name]

      full_name = "#{room_name} - #{panel_name}"
      panel_to_id[full_name] = panel["id"]

      ret = {}
      ret["id"] = "\"#{panel["id"]}\""
      ret["loc"] = location_id
      if panel.include? "colors"
        if panel["colors"].kind_of? String
          ret["color"] = "[\"#{panel["colors"]}\"]"
        else
          ret["color"] = "[\"" + panel["colors"].join("\",\"") + "\"]"
        end
      else
        ret["color"] = "[\"white\"]"
      end
      ret["tag"] = "\"#{panel["tag"]}\""
      if panel.include? "subtag"
        ret["subtag"] = "\"#{panel["subtag"]}\""
      end
      if panel.include? "link"
        ret["link"] = "\"#{panel["link"]}\""
      end
      if panel.include? "copy_to_sign"
        copytos = []
        if panel["copy_to_sign"].kind_of? String
          copytos = [panel["copy_to_sign"]]
        else
          copytos = panel["copy_to_sign"]
        end
        ret["copy_to_sign"] = "[\"" + copytos.join("\",\"") + "\"]"
      end
      if panel.include? "achievement"
        ret["achievement"] = "\"#{panel["achievement"]}\""
      end
      if panel.include? "hunt" and panel["hunt"]
        ret["hunt"] = "true"
      end
      panel_output << ret

      panel_ids_by_location_id[location_id] = [panel["id"]]

      classification_by_location_id[location_id] ||= 0
      classification_by_location_id[location_id] += CLASSIFICATION_INSANITY

      if panel.include? "check" and panel["check"]
        classification_by_location_id[location_id] += CLASSIFICATION_NORMAL

        unless panel.include? "exclude_reduce" and panel["exclude_reduce"]
          classification_by_location_id[location_id] += CLASSIFICATION_REDUCED
        end
      end
    end
  end

  if room_data.include? "paintings"
    room_data["paintings"].each do |painting|
      painting_output[painting["id"]] = painting
    end
  end

  if room_data.include? "sunwarps"
    room_data["sunwarps"].each do |sunwarp|
      index = sunwarp["dots"] - 1
      if sunwarp["direction"] == "exit" then
        index += 6
      end
      sunwarps[index] = sunwarp
    end
  end

  if room_data.include? "progression"
    room_data["progression"].each do |progressive_item_name, progression|
      progressive_id = ids_config["progression"][progressive_item_name]
      items_by_progressive_id[progressive_id] = []

      progression.each do |item|
        item_room_name = (item.kind_of? Hash) ? item["room"] : room_name
        item_item_name = (item.kind_of? Hash) ? item["door"] : item

        items_by_progressive_id[progressive_id] << ids_config["doors"][item_room_name][item_item_name]["item"]
      end
    end
  end
end

config.each do |room_name, room_data|
  if room_data.include? "doors"
    room_data["doors"].each do |door_name, door|
      full_name = "#{room_name} - #{door_name}"

      if not (door.include? "skip_location" and door["skip_location"]) and
         not (door.include? "event" and door["event"]) and
         door.include? "panels" then

        location_id = ids_config["doors"][room_name][door_name]["location"]

        panel_ids_by_location_id[location_id] = door["panels"].map do |panel_identifier|
          other_name = ""
          if panel_identifier.kind_of? String
            other_name = "#{room_name} - #{panel_identifier}"
          else
            other_name = "#{panel_identifier["room"]} - #{panel_identifier["panel"]}"
          end
          panel_to_id[other_name]
        end

        classification_by_location_id[location_id] ||= 0
        classification_by_location_id[location_id] += CLASSIFICATION_NORMAL

        if door.include? "include_reduce" and door["include_reduce"]
          classification_by_location_id[location_id] += CLASSIFICATION_REDUCED
        end
      end

      if not (door.include? "skip_item" and door["skip_item"]) and
         not (door.include? "event" and door["event"]) then

        item_id = ids_config["doors"][room_name][door_name]["item"]

        if door.include? "id"
          internal_door_ids = []
          if door["id"].kind_of? String
            internal_door_ids = [door["id"]]
          else
            internal_door_ids = door["id"]
          end
          
          if door.include? "door_group"
            door_groups[door["door_group"]] ||= Set[]
            door_groups[door["door_group"]].merge(internal_door_ids)
          end

          door_ids_by_item_id[item_id] = internal_door_ids
          mentioned_doors.merge(internal_door_ids)
        end

        if door.include? "painting_id"
          internal_painting_ids = []
          if door["painting_id"].kind_of? String
            internal_painting_ids = [door["painting_id"]]
          else
            internal_painting_ids = door["painting_id"]
          end

          painting_ids_by_item_id[item_id] = internal_painting_ids
          mentioned_paintings.merge(internal_painting_ids)
        end

        if door.include? "warp_id"
          internal_warp_ids = []
          if door["warp_id"].kind_of? String
            internal_warp_ids = [door["warp_id"]]
          else
            internal_warp_ids = door["warp_id"]
          end

          if door.include? "door_group"
            warp_groups[door["door_group"]] ||= Set[]
            warp_groups[door["door_group"]].merge(internal_warp_ids)
          end

          warp_ids_by_item_id[item_id] = internal_warp_ids
          mentioned_warps.merge(internal_warp_ids)
        end
      end
    end
  end
end

door_groups.each do |group_name, door_ids|
  item_id = ids_config["door_groups"][group_name]
  door_ids_by_item_id[item_id] = door_ids.to_a
end

warp_groups.each do |group_name, warp_ids|
  item_id = ids_config["door_groups"][group_name]
  warp_ids_by_item_id[item_id] = warp_ids.to_a
end

File.open(outputpath, "w") do |f|
  f.write "extends Node\n\nvar panels = ["
  f.write(panel_output.map do |panel|
    "{" + panel.to_a.map do |element|
      "\"#{element[0]}\":#{element[1]}"
    end.join(",") + "}"
  end.join(","))
  f.write "]\nvar door_ids_by_item_id = {"
  f.write(door_ids_by_item_id.map do |item_id, door_ids|
    "#{item_id}:[" + door_ids.map do |door_id|
      "\"#{door_id}\""
    end.join(",") + "]"
  end.join(","))
  f.write "}\nvar painting_ids_by_item_id = {"
  f.write(painting_ids_by_item_id.map do |item_id, painting_ids|
    "#{item_id}:[" + painting_ids.map do |painting_id|
      "\"#{painting_id}\""
    end.join(",") + "]"
  end.join(","))
  f.write "}\nvar warp_ids_by_item_id = {"
  f.write(warp_ids_by_item_id.map do |item_id, warp_ids|
    "#{item_id}:[" + warp_ids.map do |warp_id|
      "\"#{warp_id}\""
    end.join(",") + "]"
  end.join(","))
  f.write "}\nvar panel_ids_by_location_id = {"
  f.write(panel_ids_by_location_id.map do |location_id, panel_ids|
    "#{location_id}:[" + panel_ids.map do |panel_id|
      "\"#{panel_id}\""
    end.join(",") + "]"
  end.join(","))
  f.write "}\nvar mentioned_doors = ["
  f.write(mentioned_doors.map do |door_id|
    "\"#{door_id}\""
  end.join(","))
  f.write "]\nvar mentioned_paintings = ["
  f.write(mentioned_paintings.map do |painting_id|
    "\"#{painting_id}\""
  end.join(","))
  f.write "]\nvar mentioned_warps = ["
  f.write(mentioned_warps.map do |warp_id|
    "\"#{warp_id}\""
  end.join(","))
  f.write "]\nvar paintings = {"
  f.write(painting_output.map do |painting_id, painting|
    "\"#{painting_id}\":{\"orientation\":\"#{painting["orientation"]}\",\"move\":#{painting.include? "move" and painting["move"]}}"
  end.join(","))
  f.write "}\nvar classification_by_location_id = {"
  f.write(classification_by_location_id.map do |location_id, classification|
    "#{location_id}:#{classification}"
  end.join(","))
  f.write "}\nvar sunwarps = ["
  f.write(sunwarps.map do |sunwarp|
    "{\"orientation\":\"#{sunwarp["orientation"]}\",\"entrance_indicator_pos\":#{sunwarp["entrance_indicator_pos"].to_s}}"
  end.join(","))
  f.write "]\nvar items_by_progressive_id = {"
  f.write(items_by_progressive_id.map do |item_id, progression_ids|
    "#{item_id}:[" + progression_ids.map(&:to_s).join(",") + "]"
  end.join(","))
  f.write "}"
end