MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / DrawVisBlastRing

Function DrawVisBlastRing

Descent3/viseffect.cpp:991–1080  ·  view source on GitHub ↗

Draws a blast ring vis effect

Source from the content-addressed store, hash-verified

989
990// Draws a blast ring vis effect
991void DrawVisBlastRing(vis_effect *vis) {
992 vector inner_vecs[30], outer_vecs[30];
993 g3Point inner_points[30], outer_points[30];
994 float lifenorm = (vis->lifetime - vis->lifeleft) / vis->lifetime;
995 float cur_size = lifenorm * vis->size;
996 int i;
997 g3Point *pntlist[4];
998 matrix orient;
999 vector fvec;
1000
1001 if (vis->flags & VF_REVERSE) {
1002 lifenorm = 1 - lifenorm;
1003 cur_size = lifenorm * vis->size;
1004 }
1005
1006 if (vis->flags & VF_PLANAR)
1007 fvec = vis->end_pos;
1008 else {
1009 fvec = Viewer_object->pos - vis->pos;
1010 vm_NormalizeVectorFast(&fvec);
1011 }
1012
1013 if (vm_GetMagnitudeFast(&fvec) < .5)
1014 return;
1015 vm_VectorToMatrix(&orient, &fvec, NULL, NULL);
1016
1017 int num_segments = 20;
1018
1019 int ring_increment = 65536 / num_segments;
1020 int ring_angle = 0;
1021
1022 if (lifenorm > 1.0)
1023 lifenorm = 1.0;
1024
1025 rend_SetAlphaType(AT_SATURATE_TEXTURE_VERTEX);
1026 rend_SetOverlayType(OT_NONE);
1027 rend_SetTextureType(TT_LINEAR);
1028 rend_SetLighting(LS_NONE);
1029 rend_SetZBias(-1.0);
1030 rend_SetZBufferWriteMask(0);
1031
1032 ring_angle = 0;
1033
1034 for (i = 0; i < num_segments; i++, ring_angle += ring_increment) {
1035 float ring_sin = FixSin(ring_angle);
1036 float ring_cos = FixCos(ring_angle);
1037
1038 inner_vecs[i] = orient.rvec * (ring_cos * (cur_size / 2));
1039 inner_vecs[i] += orient.uvec * (ring_sin * (cur_size / 2));
1040 inner_vecs[i] += vis->pos;
1041
1042 outer_vecs[i] = orient.rvec * (ring_cos * cur_size);
1043 outer_vecs[i] += orient.uvec * (ring_sin * cur_size);
1044 outer_vecs[i] += vis->pos;
1045
1046 g3_RotatePoint(&inner_points[i], &inner_vecs[i]);
1047 g3_RotatePoint(&outer_points[i], &outer_vecs[i]);
1048 outer_points[i].p3_flags |= PF_UV | PF_RGBA;

Callers 1

DrawVisEffectFunction · 0.85

Calls 13

vm_NormalizeVectorFastFunction · 0.85
g3_RotatePointFunction · 0.85
g3_DrawPolyFunction · 0.85
vm_GetMagnitudeFastFunction · 0.50
vm_VectorToMatrixFunction · 0.50
rend_SetAlphaTypeFunction · 0.50
rend_SetOverlayTypeFunction · 0.50
rend_SetTextureTypeFunction · 0.50
rend_SetLightingFunction · 0.50
rend_SetZBiasFunction · 0.50
rend_SetZBufferWriteMaskFunction · 0.50
FixSinFunction · 0.50

Tested by

no test coverage detected