Ejemplo n.º 1
0
        public override void Refresh()
        {
            // ALLOWED COMBOS

            /*
             * m v = v
             * v m = v
             * m m = m
             */

            // Are none of the inputs connected? In that case, it's all default
            if (NoInputsConnected())
            {
                inputs[0].SetValueTypeAndDefault(ValueType.VTv4m4x4);
                inputs[1].SetValueTypeAndDefault(ValueType.VTv4m4x4);
                output.SetValueTypeAndDefault(ValueType.VTv4m4x4);
            }


            //if( !inputs[0].node.InputsConnected() )
            //	return;

            bool aCon = inputs[0].IsConnected();
            bool bCon = inputs[1].IsConnected();

            bool oneConnected = aCon != bCon;


            if (aCon && bCon)
            {
                ValueType aType = inputs[0].inputCon.valueType;
                ValueType bType = inputs[1].inputCon.valueType;

                if (aType == ValueType.VTv4 && bType == ValueType.VTm4x4)
                {
                    inputs[0].SetValueTypeAndDefault(ValueType.VTv4m4x4);
                    inputs[1].SetValueTypeAndDefault(ValueType.VTm4x4);
                    output.SetValueTypeAndDefault(ValueType.VTv4);
                }
                else if (aType == ValueType.VTm4x4 && bType == ValueType.VTv4)
                {
                    inputs[0].SetValueTypeAndDefault(ValueType.VTm4x4);
                    inputs[1].SetValueTypeAndDefault(ValueType.VTv4m4x4);
                    output.SetValueTypeAndDefault(ValueType.VTv4);
                }
                else if (aType == ValueType.VTm4x4 && bType == ValueType.VTm4x4)
                {
                    inputs[0].SetValueTypeAndDefault(ValueType.VTv4m4x4);
                    inputs[1].SetValueTypeAndDefault(ValueType.VTv4m4x4);
                    output.SetValueTypeAndDefault(ValueType.VTm4x4);
                }
                else
                {
                    Debug.LogError("Invalid input in Matrix multiply");
                    inputs[0].Disconnect();
                    output.SetValueTypeAndDefault(ValueType.VTv4m4x4);
                }
            }
            else if (oneConnected)
            {
                SF_NodeConnector connected   = aCon ? inputs[0] : inputs[1];
                SF_NodeConnector unconnected = aCon ? inputs[1] : inputs[0];

                ValueType conType = connected.valueType;

                if (conType == ValueType.VTv4)
                {
                    unconnected.SetValueTypeAndDefault(ValueType.VTm4x4);
                    output.SetValueTypeAndDefault(ValueType.VTv4);
                }
                else
                {
                    unconnected.SetValueTypeAndDefault(ValueType.VTv4m4x4);
                    output.SetValueTypeAndDefault(ValueType.VTv4m4x4);
                }
            }
            else
            {
                inputs[0].SetValueTypeAndDefault(ValueType.VTv4m4x4);
                inputs[1].SetValueTypeAndDefault(ValueType.VTv4m4x4);
                output.SetValueTypeAndDefault(ValueType.VTv4m4x4);
            }
        }