Esempio n. 1
0
        protected override void OnUpdate(TimeSlice time)
        {
            base.OnUpdate(time);

            var targetPosition = this.targetPosition;

            if (null != target)
            {
                targetPosition.x += target.transform.position.x;
                targetPosition.y += target.transform.position.y;
            }

            var degreeAngle = AngleUtils.Vector2ToDegreeAngle(new Vector2(targetPosition.x - transform.position.x, targetPosition.y - transform.position.y));

            rotationObject.transform.eulerAngles = new Vector3(0, 0, -degreeAngle);

            switch (layoutType)
            {
            case LayoutType.None:
                break;
            }

            if (cutoffDistance > 0)
            {
                if (null == parentObject)
                {
                    Debug.Log("Error. Parent object required for cutoff");
                    return;
                }

                var distance = AngleUtils.Distance(parentObject.transform.position, targetPosition);
                Cutoff(distance <= cutoffDistance);
            }
        }
        public void OnInputMove(InputAction.CallbackContext context)
        {
            if (!CanMove())
            {
                return;
            }
            if (null == node || null == boardRunner)
            {
                return;
            }

            //Debug.Log("Input Move: " + context.ToString());
            var axisVector = context.ReadValue <Vector2>();

            var distance = AngleUtils.Distance(Vector2.zero, axisVector);

            if (distance <= deadZone)
            {
                return;
            }

            var angle     = AngleUtils.Vector2ToDegreeAngle(axisVector);
            var direction = MapUtils.DegreeAngleToMapDirection(angle, axisLimit);

            var moveResult = boardRunner.MovePiece(node.piece, direction, moveTime);

            OnMoveResult(node, direction, moveResult);
        }
Esempio n. 3
0
        protected virtual void Update()
        {
            switch (stateMachine.State)
            {
            case StateType.Arrived:
                return;
            }

            var node = GetComponent <Node2D>();

            if (null == node)
            {
                return;
            }

            var distanceToTarget = AngleUtils.Distance(new Vector2(transform.position.x, transform.position.y), waypoint);

            if (distanceToTarget <= arriveDistance)
            {
                stateMachine.State = StateType.Arrived;
                node.Velocity      = Vector2.zero;
                return;
            }

            var degreeAngle = AngleUtils.Vector2ToDegreeAngle(new Vector2(waypoint.x - transform.position.x, waypoint.y - transform.position.y));

            node.Velocity = AngleUtils.DegreeAngleToVector2(degreeAngle, velocity);

            switch (orientType)
            {
            case OrientType.Rotate:
                node.RotationDegreeAngle = degreeAngle;
                break;
            }
        }
        public void OnInputMove(InputAction.CallbackContext context)
        {
            if (null == node)
            {
                return;
            }

            // Don't use Node2D Velocity (it is constant). Use rigidbody velocity, which decays
            // This results in more fluid movement
            node.VelocityType = Node2D.MoveType.None;

            //Debug.Log("Input Move: " + context.ToString());

            var angleAxisLimiter = new AngleAxisLimiter2D(axisLimit);
            var rigidbody        = node.GetComponent <Rigidbody2D>();

            var axisVector = context.ReadValue <Vector2>();
            var angle      = AngleUtils.Vector2ToDegreeAngle(axisVector);
            var distance   = AngleUtils.Distance(Vector2.zero, axisVector);

            if (distance <= deadZone)
            {
                rigidbody.velocity = Vector2.zero;
                return;
            }

            var factor             = (distance - deadZone) / (1.0f - deadZone);
            var interpolatedFactor = interpolate.Transform(factor);
            var moveSpeed          = minMoveSpeed + ((maxMoveSpeed - minMoveSpeed) * interpolatedFactor);

            var limitedAngle = angleAxisLimiter.LimitAngle(angle);
            var velocity     = AngleUtils.DegreeAngleToVector2(limitedAngle, moveSpeed);

            rigidbody.velocity = velocity;
        }
Esempio n. 5
0
        protected virtual void OnTriggerStay2D(Collider2D collider)
        {
            var colliderObject      = collider.gameObject;
            var colliderWorldCenter = colliderObject.transform.position;
            var thisWorldCenter     = transform.position;

            var distance = AngleUtils.Distance(colliderWorldCenter, thisWorldCenter);

            //Debug.Log("Trigger Gravity collider: " + colliderWorldCenter.ToString() + " well: " + thisWorldCenter.ToString() + " Distance: " + distance.ToString());

            if (distance > radius)
            {
                return;
            }

            // Avoid divide by zero
            if (distance == 0 || radius == 0)
            {
                return;
            }

            var rigidbody = colliderObject.GetComponent <Rigidbody2D>();

            if (null == rigidbody)
            {
                return;
            }

            var mass1 = rigidbody.mass;
            var mass2 = gravityMass;

            // Linear force
            var force = minForce + (maxForce - minForce) * (distance / radius);

            switch (forceType)
            {
            case ForceType.InverseSquareMass:
                force = (mass1 * mass2) / (distance * distance);
                break;

            case ForceType.Linear:
                break;
            }

            // Clamp force to prevent strange values near center and weak value at edge
            force = Mathf.Max(minForce, MathF.Min(maxForce, force));

            var vectorToWell = new Vector2(thisWorldCenter.x - colliderWorldCenter.x, thisWorldCenter.y - colliderWorldCenter.y);

            //Debug.Log("Vector to well: " + vectorToWell.ToString() + " Force: " + force.ToString());

            vectorToWell.Normalize();
            var forceVector = vectorToWell * force;

            //Debug.Log("Force Vector: " + forceVector.ToString());

            rigidbody.AddForce(forceVector);
        }