Example #1
0
        /// <summary>
        /// Returns a random triangle within the navmesh.
        /// </summary>
        /// <returns></returns>
        public AimNavMeshTriangle GetRandomTriangle()
        {
            if (aimNavMeshTriangles.Count > 0)
            {
                int randomIndex = AimRandom.RandomRange(0, aimNavMeshTriangles.Count);
                return(aimNavMeshTriangles[randomIndex]);
            }

            return(new AimNavMeshTriangle());
        }
Example #2
0
        public void Flock()
        {
            float noisiness = 0.5f;

            UpdateFriendAgents();

            float randomSeperation = (float)AimRandom.RandomRange(-2.0f, 2.0f);
            float randomAlign      = (float)AimRandom.RandomRange(-1.0f, 1.0f);
            float randomCohesion   = (float)AimRandom.RandomRange(-1.0f, 1.0f);

            vec3 alignForce      = CalculateAlign() * randomAlign;
            vec3 seperationForce = CalculateSeperate() * randomSeperation;
            vec3 cohesion        = CalculateCohesion() * randomCohesion;

            m_moveForce = alignForce + seperationForce + cohesion + (CalculateNoise() * noisiness);

            if (glm.length(m_moveForce) > 0)
            {
                m_moveForce = glm.normalize(m_moveForce) * m_maxForce;
            }

            ApplyForce(m_moveForce);
        }
Example #3
0
        /// <summary>
        /// Generates a random point within the navmesh.
        /// </summary>
        /// <returns></returns>
        public vec3 RandomPoint()
        {
            AimNavMeshTriangle randomTriangle = GetRandomTriangle();

            float r1 = AimRandom.RandomRange(0.0f, 1.0f);
            float r2 = AimRandom.RandomRange(0.0f, 1.0f);

            if ((r1 + r2) > 1.0f)
            {
                r1 = 1.0f - r1;
                r2 = 1.0f - r2;
            }

            float r3 = 1 - r1 - r2;

            float x = (r1 * randomTriangle.v1.x) + (r2 * randomTriangle.v2.x) + (r3 * randomTriangle.v3.x);
            float y = (r1 * randomTriangle.v1.y) + (r2 * randomTriangle.v2.y) + (r3 * randomTriangle.v3.y);
            float z = (r1 * randomTriangle.v1.z) + (r2 * randomTriangle.v2.z) + (r3 * randomTriangle.v3.z);

            vec3 p = new vec3(x, y, z);

            return(p);
        }
Example #4
0
 private vec3 CalculateNoise()
 {
     return(new vec3((float)AimRandom.RandomRange(-20, 20.0),
                     (float)AimRandom.RandomRange(-5, 5),
                     (float)AimRandom.RandomRange(-20, 20.0)));
 }