예제 #1
0
        public void OrthonormalBasisTest()
        {
            var p = new CSP();

            p.MaxSteps = 10000000;
            var v1 = new Vector3Variable("v1", p, box);
            var v2 = new Vector3Variable("v2", p, box);
            var v3 = new Vector3Variable("v3", p, box);

            v1.Magnitude.MustEqual(1);
            v2.Magnitude.MustEqual(1);
            v3.Magnitude.MustEqual(1);
            v1.MustBePerpendicular(v2);
            v2.MustBePerpendicular(v3);
            v3.MustBePerpendicular(v1);

            for (int count = 0; count < 10; count++)
            {
                p.NewSolution();
                double magnitude = Math.Sqrt(v1.X * v1.X + v1.Y * v1.Y + v1.Z * v1.Z);
                Assert.IsTrue(MathUtil.NearlyEqual(magnitude, 1), "Magnitude not unity; was: " + magnitude);
                double dotProduct = v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z;
                Assert.IsTrue(MathUtil.NearlyEqual(dotProduct, 0), "Dot product not zero; was: " + dotProduct);

                magnitude = Math.Sqrt(v2.X * v2.X + v2.Y * v2.Y + v2.Z * v2.Z);
                Assert.IsTrue(MathUtil.NearlyEqual(magnitude, 1), "Magnitude not unity; was: " + magnitude);
                dotProduct = v2.X * v3.X + v2.Y * v3.Y + v2.Z * v3.Z;
                Assert.IsTrue(MathUtil.NearlyEqual(dotProduct, 0), "Dot product not zero; was: " + dotProduct);

                magnitude = Math.Sqrt(v3.X * v3.X + v3.Y * v3.Y + v3.Z * v3.Z);
                Assert.IsTrue(MathUtil.NearlyEqual(magnitude, 1), "Magnitude not unity; was: " + magnitude);
                dotProduct = v3.X * v1.X + v3.Y * v1.Y + v3.Z * v1.Z;
                Assert.IsTrue(MathUtil.NearlyEqual(dotProduct, 0), "Dot product not zero; was: " + dotProduct);
            }
        }
예제 #2
0
    private object ApplyProjectHorizontal(List <object> args)
    {
        if (args.Count != 4)
        {
            throw new ArgumentException("projectHorizontal requires 4 arguments: target, cameraLocation, opticAxis, focalLength");
        }
        var target         = args[0] as Vector3Variable;
        var cameraPosition = args[1] as Vector3Variable;
        var opticAxis      = args[2] as Vector3Variable;
        var focalLength    = args[3] as FloatVariable;

        if (target == null || cameraPosition == null || opticAxis == null || focalLength == null)
        {
            throw new ArgumentException("Invalid argument type in call to Project(Vector3, Vector3, Vector3, float)");
        }

        var offset = target - cameraPosition;
        var depth  = Vector3Variable.Dot(opticAxis, offset);

        // Axis must be a unit vector
        opticAxis.Magnitude.MustEqual(1);
        // Target must be at least 1mm in front of the camera
        depth.MustBeContainedIn(new Interval(0.001, double.PositiveInfinity));

        var yProjection = focalLength * offset.Y / depth;
        var xProjection = focalLength * (offset.X * opticAxis.Z - offset.Z * opticAxis.X) / depth;

        return(new Vector3Variable(xProjection, yProjection, FloatVariable.Constant(CSP, 1)));
    }
예제 #3
0
 // Use this for initialization
 void Start()
 {
     rigidBody = GetComponent <Rigidbody>();
     this.rigidBody.AddRelativeForce(new Vector3(velocity, 0, 0));
     isAnchored = false;
     distance   = (Vector3Variable)ScriptableObject.CreateInstance("Vector3Variable");
 }
예제 #4
0
    private void AddValueToList(FieldInfo f)
    {
        IBaseVariable variable = null;

        if (f.FieldType.ToString() == "System.String")
        {
            variable = new StringVariable();
        }
        else if (f.FieldType.ToString() == "System.Int32")
        {
            variable = new IntegerVariable();
        }
        else if (f.FieldType.ToString() == "System.Single")
        {
            variable = new FloatVariable();
        }
        else if (f.FieldType.ToString() == "System.Boolean")
        {
            variable = new BooleanVariable();
        }
        else if (f.FieldType.ToString() == "System.String[]")
        {
            variable = new StringVariableArray();
        }
        else if (f.FieldType.ToString() == "System.Int32[]")
        {
            variable = new IntegerVariableArray();
        }
        else if (f.FieldType.ToString() == "System.Single[]")
        {
            variable = new FloatVariableArray();
        }
        else if (f.FieldType.ToString() == "System.Boolean[]")
        {
            variable = new BooleanVariableArray();
        }
        else if (f.FieldType.ToString() == "UnityEngine.Vector2")
        {
            variable = new Vector2Variable();
        }
        else if (f.FieldType.ToString() == "UnityEngine.Vector3")
        {
            variable = new Vector3Variable();
        }
        else if (f.FieldType.ToString() == "UnityEngine.Vector2[]")
        {
            variable = new Vector2VariableArray();
        }
        else if (f.FieldType.ToString() == "UnityEngine.Vector3[]")
        {
            variable = new Vector3VariableArray();
        }
        if (variable != null)
        {
            variable.value = f.GetValue(this);
            ListValue.Add((string)f.Name, variable);
        }
    }
    public void SetTarget(Vector3Variable target)
    {
        if (_targetVariable != null)
        {
            _targetVariable.OnValueChange -= UpdatePosition;
        }

        _targetVariable = target;
        _targetVariable.OnValueChange += UpdatePosition;
    }
예제 #6
0
        public override void OnInspectorGUI()
        {
            DrawDefaultInspector();

            Vector3Variable myScript = (Vector3Variable)target;

            if (GUILayout.Button("Invoke"))
            {
                myScript.ValueChangedEvent.Invoke();
            }
        }
예제 #7
0
 /// <summary>
 /// Assign either the Left or Right variable depending on the Hand that is selected
 /// </summary>
 void CheckHand()
 {
     if (Hand == Hand.LEFT)
     {
         thumbPosition     = LeftThumbPosition;
         touchpadIsPressed = LeftTouchpadIsPressed;
     }
     else
     {
         thumbPosition     = RightThumbPosition;
         touchpadIsPressed = RightTouchpadIsPressed;
     }
 }
예제 #8
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        Vector3Variable vector3Variable = (Vector3Variable)target;

        if (Application.isPlaying)
        {
            vector3Variable.RuntimeValue = EditorGUILayout.Vector3Field("Runtime Value", vector3Variable.RuntimeValue);
        }
        else
        {
            GUILayout.Label("Runtime Value: " + vector3Variable.RuntimeValue.ToString());
        }
    }
예제 #9
0
        public void UnitVectorTest()
        {
            var p = new CSP();
            var v = new Vector3Variable("v", p, box);

            v.Magnitude.MustEqual(1);

            for (int count = 0; count < 1000; count++)
            {
                p.NewSolution();
                double magnitude = Math.Sqrt(v.X * v.X + v.Y * v.Y + v.Z * v.Z);
                Assert.IsTrue(MathUtil.NearlyEqual(magnitude, 1), "Magnitude not unity; was: " + magnitude);
            }
        }
예제 #10
0
        public void DotProductOneVectorFixedTest()
        {
            var p       = new CSP();
            var eX      = new Vector3Variable("eX", p, 1, 0, 0);
            var unknown = new Vector3Variable("unknown", p, box);
            var dot     = Vector3Variable.Dot(eX, unknown);

            dot.MustEqual(0);

            for (int count = 0; count < 1000; count++)
            {
                p.NewSolution();
                Assert.IsTrue(MathUtil.NearlyEqual(unknown.X.UniqueValue, 0));
            }
        }
예제 #11
0
        public void DotProductTest()
        {
            var p   = new CSP();
            var v1  = new Vector3Variable("v1", p, box);
            var v2  = new Vector3Variable("v2", p, box);
            var dot = Vector3Variable.Dot(v1, v2);

            dot.MustEqual(0);

            for (int count = 0; count < 1000; count++)
            {
                p.NewSolution();
                double dotProduct = v1.X.UniqueValue * v2.X.UniqueValue + v1.Y.UniqueValue * v2.Y.UniqueValue + v1.Z.UniqueValue * v2.Z.UniqueValue;
                Assert.IsTrue(MathUtil.NearlyEqual(dotProduct, 0), "Dot product not zero; was: " + dotProduct);
            }
        }
예제 #12
0
        /// <summary>
        /// Set an Vector3Variable with the given tag.
        /// </summary>
        /// <param name="tag"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public void SetVector3(string tag, Vector3 value)
        {
            foreach (var variable in Vector3Variables)
            {
                if (variable.Tag == tag)
                {
                    variable.Value = value;
                    return;
                }
            }
            //Not found
            var newVariable = new Vector3Variable();

            newVariable.Tag   = tag;
            newVariable.Value = value;
            Vector3Variables.Add(newVariable);
        }
예제 #13
0
        private void Update()
        {
            if (normalized == null)
            {
                normalized = new FloatVariable();
            }

            if (value == null)
            {
                value = new Vector3Variable();
            }

            value.runtimeValue.x = curveX.Evaluate(normalized);
            value.runtimeValue.y = curveY.Evaluate(normalized);
            value.runtimeValue.z = curveZ.Evaluate(normalized);

            transform.localScale = value.runtimeValue;
        }
예제 #14
0
    IEnumerator sendCardToPlatformingUI()
    {
        Vector3 originalPosition = transform.position;
        float   originalScale    = transform.localScale.x;

        Vector3Variable targetPosition = null;

        switch (card.Ability)
        {
        case Ability.Dash:
            targetPosition = DashMeterLocation;
            break;

        case Ability.Glide:
            targetPosition = GlideMeterLocation;
            break;

        case Ability.ExtraJump:
            targetPosition = ExtraJumpMeterLocation;
            break;

        case Ability.SuperJump:
            targetPosition = SuperJumpMeterLocation;
            break;
        }

        ToPlatformingUITransition.FlashFromTo(0, 1);

        while (ToPlatformingUITransition.Transitioning)
        {
            float t = ToPlatformingUITransition.Value;

            transform.position   = Vector3.Lerp(originalPosition, targetPosition.Value, t);
            transform.localScale = Vector3.one * Mathf.Lerp(originalScale, ToPlatformingUITargetScale, t);

            yield return(null);
        }

        PlayerAbilityCharges[card.Ability]++;
        destroyCard();
    }
예제 #15
0
        public void EditorSetVariableData(Vector3Variable global, Vector3VariableInstanced instanced, Vector3 constant,
                                          AssignmentType type, IDTokenHolder tokenHolder)
        {
            _assignmentType = type;
            EditorSetTokenHolder(tokenHolder);

            switch (type)
            {
            case AssignmentType.Constant:
                _constantValue = constant;
                break;

            case AssignmentType.GlobalVariable:
                _globalVariable = global;
                break;

            case AssignmentType.PersonalVariable:
                _instancedVariable = instanced;
                break;
            }
        }
 public void SetValue(Vector3Variable value)
 {
     Value = value.Value;
 }
예제 #17
0
 public void ModValue(Vector3Variable amount)
 {
     value += amount.value;
 }
예제 #18
0
 public void SetValue(Vector3Variable v)
 {
     value = v.value;
 }
예제 #19
0
 public void InitManual(Vector2 camOffset, bool useSmoothDamp, Vector2 value, Vector3Variable playerPos)
 {
     Init(camOffset, useSmoothDamp, value);
     this.playerPos = playerPos;
     GameInput.BindEvent(GameEventType.NextRoom, room => ToNextRoom(GameManager.GetBoundsFromRoom(room).ToBounds()));
 }
예제 #20
0
        public void SetupHealthBar(AtomBaseVariable enemyData)
        {
            var enemyDataCollection = (AtomCollection)enemyData;
            var healthBar           = Instantiate(_healthBarPrefab).GetComponent <HealthBar>();

            healthBar.transform.SetParent(transform);

            IntVariable               health   = default;
            Vector3Variable           position = default;
            Action <Vector3>          positionChangedHandler = default;
            Action <AtomBaseVariable> varAddedHandler        = (AtomBaseVariable baseVar) =>
            {
                switch (baseVar.Id)
                {
                case "Health":
                    var healthVar = (IntVariable)baseVar;
                    health = healthVar;
                    healthBar.InitialHealth.Value = healthVar.InitialValue;
                    healthVar.Changed.Register(healthBar.HealthChanged);
                    break;

                case "Position":
                    var positionVar = (Vector3Variable)baseVar;
                    position = positionVar;
                    positionChangedHandler = (pos) =>
                    {
                        Vector2 viewportPos  = Camera.main.WorldToViewportPoint(pos);
                        Vector2 healthBarPos = new Vector2(
                            (viewportPos.x * _canvasRectTransform.sizeDelta.x) - (_canvasRectTransform.sizeDelta.x * 0.5f),
                            (viewportPos.y * _canvasRectTransform.sizeDelta.y) - (_canvasRectTransform.sizeDelta.y * 0.5f) + 38f
                            );
                        healthBar.GetComponent <RectTransform>().anchoredPosition = healthBarPos;
                    };
                    positionVar.Changed.Register(positionChangedHandler);
                    break;
                }
            };

            Action <AtomBaseVariable> varRemovedHandler = (AtomBaseVariable baseVar) =>
            {
                switch (baseVar.Id)
                {
                case "Health":
                    var healthVar = (IntVariable)baseVar;
                    healthVar.Changed.Unregister(healthBar.HealthChanged);
                    break;

                case "Position":
                    var positionVar = (Vector3Variable)baseVar;
                    positionVar.Changed.Unregister(positionChangedHandler);
                    break;
                }
            };

            enemyDataCollection.Added.Register(varAddedHandler);
            enemyDataCollection.Removed.Register(varRemovedHandler);

            Action <AtomBaseVariable> enemyDataRemovedHandler = default;

            enemyDataRemovedHandler = (enemyDataToBeRemoved) =>
            {
                if (enemyDataToBeRemoved == enemyData)
                {
                    enemyDataCollection.Added.Unregister(varAddedHandler);
                    enemyDataCollection.Removed.Unregister(varRemovedHandler);
                    _enemies.Removed.Unregister(enemyDataRemovedHandler);

                    if (healthBar != null && healthBar.gameObject != null)
                    {
                        if (health != null)
                        {
                            health.Changed.Unregister(healthBar.HealthChanged);
                        }
                        else if (position != null)
                        {
                            position.Changed.Unregister(positionChangedHandler);
                        }

                        Destroy(healthBar.gameObject);
                    }
                }
            };
            _enemies.Removed.Register(enemyDataRemovedHandler);
        }
예제 #21
0
 public void SetValue(Vector3Variable para)
 {
     value = para.value;
 }
예제 #22
0
 public void SendPlayerVRPosToOthers(Vector3Variable playerVRPosition) => photonView.RPC("SendVector3", RpcTarget.Others, playerVRPosition.Value);
예제 #23
0
    public void PopulateContainer()
    {
        TriggerVariables.Clear();
        BoolVariables.Clear();
        IntVariables.Clear();
        FloatVariables.Clear();
        Vector2Variables.Clear();
        Vector3Variables.Clear();
        QuaternionVariables.Clear();
        TimerVariables.Clear();

        foreach (var propertyPath in AssetDatabaseUtils.GetAssetRelativePaths(FolderPath, IncludeSubdirectories))
        {
            TriggerVariable assetAsTrigger =
                AssetDatabase.LoadAssetAtPath(propertyPath, typeof(TriggerVariable)) as TriggerVariable;
            if (assetAsTrigger != null)
            {
                TriggerVariables.Add(assetAsTrigger);
                continue;
            }

            BoolVariable assetAsBool =
                AssetDatabase.LoadAssetAtPath(propertyPath, typeof(BoolVariable)) as BoolVariable;
            if (assetAsBool != null)
            {
                BoolVariables.Add(assetAsBool);
                continue;
            }

            IntVariable assetAsInt =
                AssetDatabase.LoadAssetAtPath(propertyPath, typeof(IntVariable)) as IntVariable;
            if (assetAsInt != null)
            {
                IntVariables.Add(assetAsInt);
                continue;
            }

            FloatVariable assetAsFloat =
                AssetDatabase.LoadAssetAtPath(propertyPath, typeof(FloatVariable)) as FloatVariable;
            if (assetAsFloat != null)
            {
                FloatVariables.Add(assetAsFloat);
                continue;
            }

            Vector2Variable assetAsVector2 =
                AssetDatabase.LoadAssetAtPath(propertyPath, typeof(Vector2Variable)) as Vector2Variable;
            if (assetAsVector2 != null)
            {
                Vector2Variables.Add(assetAsVector2);
                continue;
            }

            Vector3Variable assetAsVector3 =
                AssetDatabase.LoadAssetAtPath(propertyPath, typeof(Vector3Variable)) as Vector3Variable;
            if (assetAsVector3 != null)
            {
                Vector3Variables.Add(assetAsVector3);
                continue;
            }

            QuaternionVariable assetAsQuaternion =
                AssetDatabase.LoadAssetAtPath(propertyPath, typeof(QuaternionVariable)) as QuaternionVariable;
            if (assetAsQuaternion != null)
            {
                QuaternionVariables.Add(assetAsQuaternion);
                continue;
            }

            TimerVariable assetAsTimer =
                AssetDatabase.LoadAssetAtPath(propertyPath, typeof(TimerVariable)) as TimerVariable;
            if (assetAsTimer != null)
            {
                TimerVariables.Add(assetAsTimer);
                continue;
            }

            FunctionVariable assetAsFunction =
                AssetDatabase.LoadAssetAtPath(propertyPath, typeof(TimerVariable)) as FunctionVariable;
            if (assetAsFunction != null)
            {
                FunctionVariables.Add(assetAsFunction);
                continue;
            }
        }
        Debug.Log($"{TriggerVariables.Count} Triggers" +
                  $" | {BoolVariables.Count} Bools" +
                  $" | {IntVariables.Count} Ints" +
                  $" | {FloatVariables.Count} Floats" +
                  $" | {Vector2Variables.Count} Vector2s" +
                  $" | {Vector3Variables.Count} Vector3s" +
                  $" | {QuaternionVariables.Count} Quaternions" +
                  $" | {TimerVariables.Count} Timers" +
                  $" | {FunctionVariables.Count} Functions");
    }
예제 #24
0
 public void AddForce(Vector3Variable force)
 {
     Sleep = false;
     //_velocity1
     _currentForce += force;
 }
예제 #25
0
 public Vector3Data(Vector3 v)
 {
     vector3Val = v;
     vector3Ref = null;
 }
 public void ApplyChange(Vector3Variable amount)
 {
     Value += amount.Value;
 }
예제 #27
0
 public void SetDefaultValue(Vector3Variable value)
 {
     defaultValue = value.currentValue;
 }
예제 #28
0
 public void SetValue(Vector3Variable value)
 {
     CurrentValue = value.CurrentValue;
 }
예제 #29
0
 public void SetVector(Vector3Variable _vector)
 {
     value = _vector.Value;
 }
예제 #30
0
 private void MakeVector3Variable(CSP csp)
 {
     this.mVector3Variable = new Vector3Variable(VariableName, csp, new BoundingBox(new Interval(Min, Max), new Interval(MinY, MaxY), new Interval(MinZ, MaxZ)));
 }