Exemplo n.º 1
0
  static {
    metas = new ObjectSet<>();
    META = new ObjectMap<>();
    PMETA = new ObjectMap<>();
    METATABLES = new ObjectMap<>();
    GLOBAL_METATABLE = new ObjectMap<>();
    EMPTY_METATABLE = new LuaTable();

    // Metamethods implementation for all LuaObjectValues.

    GLOBAL_METATABLE.put(
        LuaValue.EQ.tojstring(),
        LuaUtil.asFunction(
            vargs -> {
              if (vargs.isnil(2)) {
                // We'll still get called for nil. Automagically return false for nil.
                return LuaValue.valueOf(false);
              }

              // obj1, us, is guaranteed to be an object value
              LuaObjectValue<? super Object> obj1 = (LuaObjectValue<? super Object>) vargs.arg(1);
              LuaValue obj2 = vargs.arg(2);

              if (obj2 instanceof LuaObjectValue) {
                return LuaValue.valueOf(
                    obj1.getObject() == ((LuaObjectValue<? super Object>) obj2).getObject());
              }

              return LuaValue.valueOf(false);
            }));

    loadMeta(LuaAudioDataMeta.class);
    loadMeta(LuaAudioMeta.class);
    loadMeta(LuaAudioPlayableMeta.class);
    loadMeta(LuaColliderMeta.class);
    loadMeta(LuaColorMeta.class);
    loadMeta(LuaDestructibleMeta.class);
    loadMeta(LuaEnvironmentMeta.class);
    loadMeta(LuaEventListenerMeta.class);
    loadMeta(LuaFontMeta.class);
    loadMeta(LuaIdentifiableMeta.class);
    loadMeta(LuaInputDataMeta.class);
    loadMeta(LuaLayerableMeta.class);
    loadMeta(LuaMusicMeta.class);
    loadMeta(LuaOverworldControllerMeta.class);
    loadMeta(LuaPositionableMeta.class);
    loadMeta(LuaPressDataMeta.class);
    loadMeta(LuaProcessableMeta.class);
    loadMeta(LuaRenderableMeta.class);
    loadMeta(LuaSchedulerMeta.class);
    loadMeta(LuaSoundDataMeta.class);
    loadMeta(LuaSoundMeta.class);
    loadMeta(LuaSpriteMeta.class);
    loadMeta(LuaSubsystemMeta.class);
    loadMeta(LuaTextComponentMeta.class);
    loadMeta(LuaTextMeta.class);
    loadMeta(LuaTextStyleMeta.class);
    loadMeta(LuaTransformMeta.class);
    loadMeta(LuaUIComponentMeta.class);
    loadMeta(LuaUIControllerMeta.class);
    loadMeta(LuaUIObjectMeta.class);
    loadMeta(LuaWorldObjectMeta.class);
    loadMeta(new LuaWorldRoomMeta(Undertailor.getInstance()));

    log.info("Finished loading lua object metadata");
    log.info("Primary types list: ");
    Lua.PMETA
        .values()
        .forEach(
            meta -> {
              log.info(meta.getClass().getSimpleName());
            });
  }