public void addActor(BaseActor actor) {
    actors.put(actor.getId(), actor);
    actor.setScene(this);

    SceneLayer layer = getLayer(actor.getLayer());

    if (layer == null) { // fallback for compatibility
      layer = new SceneLayer();
      layer.setId(actor.getLayer());
      layers.add(layer);
    }

    layer.add(actor);
  }
  @SuppressWarnings("unchecked")
  @Override
  public void read(Json json, JsonValue jsonData) {
    layers = json.readValue("layers", ArrayList.class, SceneLayer.class, jsonData);
    id = json.readValue("id", String.class, jsonData);
    state = json.readValue("state", String.class, jsonData);
    verbManager = json.readValue("verbs", VerbManager.class, jsonData);

    actors = json.readValue("actors", HashMap.class, BaseActor.class, jsonData);
    player = json.readValue("player", String.class, jsonData);

    for (BaseActor actor : actors.values()) {
      actor.setScene(this);

      SceneLayer layer = getLayer(actor.getLayer());
      layer.add(actor);
    }

    orderLayersByZIndex();

    backgroundAtlas = json.readValue("backgroundAtlas", String.class, jsonData);
    backgroundRegionId = json.readValue("backgroundRegionId", String.class, jsonData);
    lightMapAtlas = json.readValue("lightMapAtlas", String.class, jsonData);
    lightMapRegionId = json.readValue("lightMapRegionId", String.class, jsonData);

    musicFilename = json.readValue("musicFilename", String.class, jsonData);
    loopMusic = json.readValue("loopMusic", Boolean.class, jsonData);
    initialMusicDelay = json.readValue("initialMusicDelay", Float.class, jsonData);
    repeatMusicDelay = json.readValue("repeatMusicDelay", Float.class, jsonData);

    isPlayingSer = json.readValue("isPlaying", Boolean.class, jsonData);
    musicPosSer = json.readValue("musicPos", Float.class, jsonData);

    camera = json.readValue("camera", SceneCamera.class, jsonData);
    String followActorId = json.readValue("followActor", String.class, jsonData);

    setCameraFollowActor((SpriteActor) actors.get(followActorId));

    depthVector = json.readValue("depthVector", Vector2.class, jsonData);
    polygonalNavGraph = json.readValue("polygonalNavGraph", PolygonalNavGraph.class, jsonData);
  }
  public void removeActor(BaseActor a) {

    if (player != null && a.getId().equals(player)) {
      player = null;
    }

    BaseActor r = actors.remove(a.getId());

    if (r == null) {
      EngineLogger.error("Removing actor from scene: Actor not found");
      return;
    }

    SceneLayer layer = getLayer(a.getLayer());
    layer.getActors().remove(a);

    if (a instanceof ObstacleActor && polygonalNavGraph != null)
      polygonalNavGraph.removeDinamicObstacle(a.getBBox());

    a.setScene(null);
  }