-------------------------------------------------------------------------- Generate nodes --------------------------------------------------------------------------
| 1062 | // Generate nodes |
| 1063 | //-------------------------------------------------------------------------- |
| 1064 | void LightningBolt::NodeManager::generateNodes() |
| 1065 | { |
| 1066 | F32 overallDist = VectorF( endPoint - startPoint ).magnitudeSafe(); |
| 1067 | F32 minDistBetweenNodes = overallDist / (numNodes-1); |
| 1068 | F32 maxDistBetweenNodes = minDistBetweenNodes / mCos( maxAngle * M_PI_F / 180.0f ); |
| 1069 | |
| 1070 | VectorF mainLineDir = endPoint - startPoint; |
| 1071 | mainLineDir.normalizeSafe(); |
| 1072 | |
| 1073 | for( U32 i=0; i<numNodes; i++ ) |
| 1074 | { |
| 1075 | Node node; |
| 1076 | |
| 1077 | if( i == 0 ) |
| 1078 | { |
| 1079 | node.point = startPoint; |
| 1080 | node.dirToMainLine = mainLineDir; |
| 1081 | nodeList[i] = node; |
| 1082 | continue; |
| 1083 | } |
| 1084 | if( i == numNodes - 1 ) |
| 1085 | { |
| 1086 | node.point = endPoint; |
| 1087 | nodeList[i] = node; |
| 1088 | break; |
| 1089 | } |
| 1090 | |
| 1091 | Node lastNode = nodeList[i-1]; |
| 1092 | |
| 1093 | F32 segmentLength = gRandGen.randF( minDistBetweenNodes, maxDistBetweenNodes ); |
| 1094 | VectorF segmentDir = MathUtils::randomDir( lastNode.dirToMainLine, 0, maxAngle ); |
| 1095 | node.point = lastNode.point + segmentDir * segmentLength; |
| 1096 | |
| 1097 | node.dirToMainLine = endPoint - node.point; |
| 1098 | node.dirToMainLine.normalizeSafe(); |
| 1099 | nodeList[i] = node; |
| 1100 | } |
| 1101 | } |
| 1102 | |
| 1103 | |
| 1104 | //-------------------------------------------------------------------------- |
no test coverage detected