コード例 #1
0
        /// <summary>
        /// Applies force to the held obstacle, if necessary.
        /// </summary>
        protected void ApplyForceToObstacle()
        {
            Vector3 currentDistance      = HookingData.HookedObstacle.GetPosition() - transform.position;
            var     forceCalculator      = ForceCalculator.GetInstance();
            Vector3 glovePositionalForce = forceCalculator.GlovePositionalForce(currentDistance, HookingData.HookingRefDistance, Strength);
            Vector3 gloveRotationalForce = forceCalculator.GloveRotationalForce(HookingData.HookingRefDistance, GameConstants.PlayerRotationRefVector, transform.rotation, Strength);

            Vector3 dampeningForce = forceCalculator.DampeningForce(HookingData.HookedObstacle.GetVelocity(), _dampeningFactor, Strength);

            Vector3 totalForce = glovePositionalForce + gloveRotationalForce;

            totalForce += dampeningForce;
            totalForce *= Time.deltaTime;
            HookingData.HookedObstacle.ApplyForce(totalForce);
        }
コード例 #2
0
    public Vector2 CalculateForce(
        PlanetController planet,
        ForceCalculator forceCalculator
        )
    {
        Vector2 acceleration =
            Vector2.zero;

        Visit(node => {
            bool shouldContinue = false;
            if (node.IsLeaf)
            {
                if (node.HasPlanets)
                {
                    acceleration +=
                        forceCalculator(planet, node.Planet);
                }
            }
            else
            {
                float size =
                    node.Size;
                float distance =
                    Vector2.Distance(
                        planet.Position,
                        node.Position
                        );

                shouldContinue = size / distance >= Theta;
                if (!shouldContinue)
                {
                    acceleration +=
                        forceCalculator(planet, node);
                }
            }

            return(shouldContinue);
        });

        return(acceleration);
    }
コード例 #3
0
 void Start()
 {
     forceScript  = GetComponent <ForceCalculator>();
     vectorScript = GetComponent <GroundModifier>();
     projector    = projectorObj.GetComponent <Projector>();
 }