コード例 #1
0
    private static void __Instantiate__UnityEngineGameObject__UnityEngineGameObject(IUdonHeap heap, uint[] parameterAddresses)
    {
        GameObject original = heap.GetHeapVariable <GameObject>(parameterAddresses[0]);
        GameObject clone    = Object.Instantiate(original);

        heap.SetHeapVariable(parameterAddresses[1], clone);
    }
コード例 #2
0
        private void __Instantiate__UnityEngineGameObject__UnityEngineGameObject(IUdonHeap heap, uint[] parameterAddresses)
        {
            GameObject original = heap.GetHeapVariable <GameObject>(parameterAddresses[0]);

            #if !UDON_DISABLE_SECURITY
            _blacklist.FilterBlacklisted(ref original);
            #endif

            GameObject clone = Object.Instantiate(original);
            heap.SetHeapVariable(parameterAddresses[1], clone);
        }
        private AssemblyArgumentReferenceError CheckArgumentValues(IUdonHeap heap, List <uint> stack, string assembly, string arguments, out string detail)
        {
            var desiredArgs = arguments.Trim('_').Split('_');
            var phrases     = Regex.Split(assembly, "__");
            var args        = phrases[2].Split('_');
            // 引数の構造的に最後の型一致が求める引数になる Physics.*Cast の引数構造がある前提
            var hit = Array.LastIndexOf(args, desiredArgs[0]);

            if (desiredArgs.Length == 2)
            {
                // *Cast は 2引数セットで揃っている
                if (args[hit + 1] == desiredArgs[1])
                {
                    // 見つかった
                    var maxDistance = heap.GetHeapVariable <float>(stack[hit]);   // distance
                    var layerMask   = heap.GetHeapVariable <int>(stack[hit + 1]); // layermask
                    if (maxDistance > _maxDistance)
                    {
                        // MaxDistanceエラー
                        detail = maxDistance.ToString(CultureInfo.InvariantCulture);
                        return(AssemblyArgumentReferenceError.MaxDistanceError);
                    }

                    if (layerMask != _layerMask)
                    {
                        // layerMaskエラー
                        detail = layerMask.ToString();
                        return(AssemblyArgumentReferenceError.LayerMaskError);
                    }
                }
                else
                {
                    // 引数エラー
                    detail = "";
                    return(AssemblyArgumentReferenceError.InvalidArguments);
                }
            }
            else
            {
                // LineCastの場合のみ
                var layerMask = heap.GetHeapVariable <int>(stack[hit]); // layermask
                if (layerMask != _layerMask)
                {
                    // layerMaskエラー
                    detail = layerMask.ToString();
                    return(AssemblyArgumentReferenceError.LayerMaskError);
                }
            }

            // 何もない
            detail = "";
            return(AssemblyArgumentReferenceError.NoErrors);
        }
コード例 #4
0
            public UdonHeapValueStorage(IUdonHeap heap, IUdonSymbolTable symbolTable, string symbolKey)
            {
                this.heap = heap;

                bool isValid = symbolTable.TryGetAddressFromSymbol(symbolKey, out symbolAddress) &&
                               heap.GetHeapVariableType(symbolAddress) == typeof(T) &&
                               heap.TryGetHeapVariable <T>(symbolAddress, out var validityCheckPlaceholder);

                if (!isValid)
                {
                    symbolAddress = 0xFFFFFFFF;
                }
            }
コード例 #5
0
            public UdonHeapValueStorage(IUdonHeap heap, IUdonSymbolTable symbolTable, string symbolKey)
            {
                this.heap = heap;

                bool isValid = symbolTable.TryGetAddressFromSymbol(UdonSharpUtils.UnmanglePropertyFieldName(symbolKey), out symbolAddress) &&
                               heap.GetHeapVariableType(symbolAddress) == typeof(T) &&
                               heap.TryGetHeapVariable <T>(symbolAddress, out _);

                if (!isValid)
                {
                    symbolAddress = 0xFFFFFFFF;
                }
            }
コード例 #6
0
        // ReSharper disable once RedundantAssignment
        protected override void DeserializeImplementation(ref UdonProgram value, IDataReader reader)
        {
            reader.ReadString(out string instructionSetIdentifier);
            reader.ReadInt32(out int instructionSetVersion);
            byte[]                 byteCode          = _byteArrayReaderWriter.ReadValue(reader);
            IUdonHeap              heap              = _udonHeapReaderWriter.ReadValue(reader);
            IUdonSymbolTable       entryPoints       = _udonSymbolTableReaderWriter.ReadValue(reader);
            IUdonSymbolTable       symbolTable       = _udonSymbolTableReaderWriter.ReadValue(reader);
            IUdonSyncMetadataTable syncMetadataTable = _udonSyncMetadataTableReaderWriter.ReadValue(reader);

            value = new UdonProgram(instructionSetIdentifier, instructionSetVersion, byteCode, heap, entryPoints, symbolTable, syncMetadataTable);

            RegisterReferenceID(value, reader);
            InvokeOnDeserializingCallbacks(ref value, reader.Context);
        }
コード例 #7
0
        private void __Instantiate__UnityEngineGameObject__UnityEngineGameObject(IUdonHeap heap, Span <uint> parameterAddresses)
        {
            GameObject original = heap.GetHeapVariable <GameObject>(parameterAddresses[0]);

            #if !UDON_DISABLE_SECURITY
            _blacklist.FilterBlacklisted(ref original);
            #endif

            GameObject clone = Object.Instantiate(original);
            foreach (UdonBehaviour udonBehaviour in clone.GetComponentsInChildren <UdonBehaviour>(true))
            {
                UdonManager.Instance.RegisterUdonBehaviour(udonBehaviour);
            }

            heap.SetHeapVariable(parameterAddresses[1], clone);
        }