Example #1
0
        public override Vector3 DoUpdate()
        {
            velocity = base.DoUpdate();

            var circleCentre = Vector3.Normalize(velocity) * circleDistance;

            if (isDrawGizmo)
            {
                GizmosManager.DrawCircle(circleLineRenderer, circleCentre, circleRadius, circleColor);
            }
            else
            {
                GizmosManager.StopDraw(circleLineRenderer);
            }

            wanderAngle += Random.Range(-angleChangeRange, angleChangeRange);

            velocity += circleCentre + Vector3.Normalize(SetAngle(Vector3.one, wanderAngle)) * circleRadius;

            if (isDrawGizmo)
            {
                GizmosManager.DrawLine(angleLineRenderer, circleCentre, velocity, angleColor, 1);
            }
            else
            {
                GizmosManager.StopDraw(angleLineRenderer);
            }

            velocity = TruncateFromSpeedAndForce(velocity);

            if (isDrawGizmo)
            {
                GizmosManager.DrawLine(velocityLineRenderer, velocity, velocityLineColor, playerManager.drawVelosityGizmoKoef);
            }
            else
            {
                GizmosManager.StopDraw(velocityLineRenderer);
            }

            return(velocity);
        }
        private Vector3 CollisionAvoidance(Vector3 playerPosition, Vector3 velocity, List <Obstacle> obstacles, float maxAvoidForce = 1)
        {
            velocity = Vector3.Normalize(velocity);

            var mostThreatening = FindMostThreateningObstacle(playerPosition, velocity * MaxSeeAhead, obstacles);

            if (mostThreatening != null)
            {
                var avoidance = Vector3.Normalize(CropByY(mostThreatening.transform.position - playerPosition, 0)) * -maxAvoidForce;
                if (isDrawGizmo)
                {
                    GizmosManager.DrawCircle(circleLineRenderer, CropByY(mostThreatening.transform.position, -.5f) - playerPosition, mostThreatening.radius, circleLineRendererColor);
                    GizmosManager.DrawLine(collisionAvoidanceLineRenderer, avoidance.normalized * maxAvoidForce, collisionAvoidanceLineRendererColor, maxAvoidForce);
                }
                return(avoidance);
            }
            GizmosManager.StopDraw(circleLineRenderer);
            GizmosManager.StopDraw(collisionAvoidanceLineRenderer);

            return(Vector3.zero);
        }
Example #3
0
        public override Vector3 DoUpdate()
        {
            velocity = base.DoUpdate();

            follovingPosition = velocity.normalized * -DistanceToFollow;

            if (isDrawGizmo)
            {
                GizmosManager.DrawLine(FollowLine, follovingPosition, FollowLineColor, 1);
                GizmosManager.DrawCircle(LeaderCircle, Vector3.zero, LeaderSightRadius, LeaderCircleColor);
                GizmosManager.DrawCircle(LeaderAheadCircle, velocity * LeaderAhead, LeaderSightRadius, LeaderAheadCircleColor);
            }
            else
            {
                GizmosManager.StopDraw(FollowLine);
                GizmosManager.StopDraw(LeaderCircle);
                GizmosManager.StopDraw(LeaderAheadCircle);
            }

            follovingPosition += playerTransform.position;

            var currentDistance = Vector3.Distance(playerManager.targetTransform.position, playerTransform.position);

            if (currentDistance < slowingRadius)
            {
                velocity *= (currentDistance / slowingRadius);
            }

            if (isDrawGizmo)
            {
                GizmosManager.DrawLine(velocityLineRenderer, velocity, velocityLineColor, playerManager.drawVelosityGizmoKoef);
            }
            else
            {
                GizmosManager.StopDraw(velocityLineRenderer);
            }

            return(velocity);
        }