TArray<FLuaValue> ULuaReflectionState::MetaMethodIndex(TArray<FLuaValue> LuaArgs) { TArray<FLuaValue> ReturnValues; UObject* Object = LuaArgs[0].Object; FString Key = LuaArgs[1].ToString(); if (!Object) { return ReturnValues; } if (Object->IsA<UClass>()) { return ReturnValues; } if (LuaFunctionsMap.Contains(Key)) { ReturnValues.Add(LuaFunctionsMap[Key]); return ReturnValues; } ELuaReflectionType ReflectionType = ELuaReflectionType::Unknown; ULuaBlueprintFunctionLibrary::GetLuaReflectionType(Object, Key, ReflectionType); if (ReflectionType == ELuaReflectionType::Property) { ReturnValues.Add(GetLuaValueFromProperty(Object, Key)); } else if (ReflectionType == ELuaReflectionType::Function) { ReturnValues.Add(FLuaValue::FunctionOfObject(Object, FName(Key))); } return ReturnValues; } TArray<FLuaValue> ULuaReflectionState::MetaMethodNewIndex(TArray<FLuaValue> LuaArgs) { TArray<FLuaValue> ReturnValues; UObject* Object = LuaArgs[0].Object; FString Key = LuaArgs[1].ToString(); FLuaValue Value = LuaArgs[2]; if (!Object) { return ReturnValues; } if (Object->IsA<UClass>()) { return ReturnValues; } ELuaReflectionType ReflectionType = ELuaReflectionType::Unknown; ULuaBlueprintFunctionLibrary::GetLuaReflectionType(Object, Key, ReflectionType); if (ReflectionType == ELuaReflectionType::Property) { SetPropertyFromLuaValue(Object, Key, Value); } return ReturnValues; } TArray<FLuaValue> ULuaReflectionState::MetaMethodEq(TArray<FLuaValue> LuaArgs) { TArray<FLuaValue> ReturnValues; UObject* Object = LuaArgs[0].Object; UObject* OtherObject = LuaArgs[1].Object; if (!Object || !OtherObject) { ReturnValues.Add(FLuaValue(false)); } else { ReturnValues.Add(FLuaValue(Object == OtherObject)); } return ReturnValues; }