Advertisement
ijontichy

....bezier.c

Mar 6th, 2014
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.38 KB | None | 0 0
  1. int coords[9][3];  // For the bezier drawing
  2.  
  3. script MEDIGUN_DRAWBEZIER (int source, int target, int typearg) clientside
  4. {
  5.     int i, dist, distPerc, drawDist;
  6.     int beamActor;
  7.  
  8.     int type = leftShort(typearg);
  9.     int isterm = rightShort(typearg) & 4;
  10.     int ismech = rightShort(typearg) & 2;
  11.     int disarm = rightShort(typearg) & 1;
  12.  
  13.     /*
  14.     Print(s:"Source (", d:source, s:"): ", d:ThingCount(0, source),
  15.         s:"\nTarget (", d:target, s:"): ", d:ThingCount(0, target));
  16.     */
  17.  
  18.     switch (type)
  19.     {
  20.       case TYPE_MEDIGUN: beamActor = "MedigunBeam"; break;
  21.       case TYPE_REPAIRGUN: beamActor = "RepairBeam"; break;
  22.       case TYPE_ADVREPAIRGUN: beamActor = "AdvRepairBeam"; break;
  23.       case TYPE_BOMBSQUADGUN: beamActor = "BombSquadBeam"; break;
  24.     }
  25.  
  26.     SetActivator(source);
  27.  
  28.     int pln = PlayerNumber();
  29.     int team = GetPlayerInfo(pln, PLAYERINFO_TEAM);
  30.  
  31.     coords[0][0] = GetActorX(source); coords[0][1] = GetActorY(source); coords[0][2] = GetActorZ(source) + 32.0;
  32.     coords[1][0] = GetActorX(target); coords[1][1] = GetActorY(target); coords[1][2] = GetActorZ(target);
  33.  
  34.     if (isterm) { coords[1][2] += 16.0; }
  35.     else if (disarm) { coords[1][2] += 4.0; }
  36.     else if (ismech) { coords[1][2] += 64.0; }
  37.     else { coords[1][2] += 32.0; }
  38.  
  39.  
  40.     dist = magnitudeThree(ftoi(coords[0][0] - coords[1][0]),
  41.                           ftoi(coords[0][1] - coords[1][1]),
  42.                           ftoi(coords[0][2] - coords[1][2]));
  43.  
  44.     coords[2][0] = GetActorX(source) + (FixedMul(cos(GetActorAngle(source)),  cos(GetActorPitch(source)) ) ) * dist;
  45.     coords[2][1] = GetActorY(source) + (FixedMul(sin(GetActorAngle(source)), cos(GetActorPitch(source)) ) ) * dist;
  46.     coords[2][2] = GetActorZ(source) + (-sin(GetActorPitch(source)) * dist);
  47.  
  48.     coords[3][0] = coords[2][0] - coords[0][0];
  49.     coords[3][1] = coords[2][1] - coords[0][1];
  50.     coords[3][2] = coords[2][2] - coords[0][2];
  51.  
  52.     coords[4][0] = coords[2][0] - coords[1][0];
  53.     coords[4][1] = coords[2][1] - coords[1][1];
  54.     coords[4][2] = coords[2][2] - coords[1][2];
  55.  
  56.     mediBeamLength[pln] = min(mediBeamLength[pln] + 10, MEDIGUN_MAXDIST);
  57.    
  58.     drawDist = min(mediBeamLength[pln], dist);
  59.  
  60.     if (drawDist == dist) { mediBeamLength[pln] = MEDIGUN_MAXDIST; }
  61.  
  62.     for (i = 12; i <= drawDist; i += 12)
  63.     {
  64.         if (i < 24) { continue; }
  65.         distPerc = FixedDiv(itof(i), itof(dist));
  66.  
  67.         coords[5][0] = coords[0][0] + FixedMul(coords[3][0], distPerc);
  68.         coords[5][1] = coords[0][1] + FixedMul(coords[3][1], distPerc);
  69.         coords[5][2] = coords[0][2] + FixedMul(coords[3][2], distPerc);
  70.  
  71.         coords[6][0] = coords[1][0] + FixedMul(coords[4][0], 1.0-distPerc);
  72.         coords[6][1] = coords[1][1] + FixedMul(coords[4][1], 1.0-distPerc);
  73.         coords[6][2] = coords[1][2] + FixedMul(coords[4][2], 1.0-distPerc);
  74.  
  75.         coords[7][0] = coords[6][0] - coords[5][0];
  76.         coords[7][1] = coords[6][1] - coords[5][1];
  77.         coords[7][2] = coords[6][2] - coords[5][2];
  78.  
  79.         coords[8][0] = coords[5][0] + FixedMul(coords[7][0], distPerc);
  80.         coords[8][1] = coords[5][1] + FixedMul(coords[7][1], distPerc);
  81.         coords[8][2] = coords[5][2] + FixedMul(coords[7][2], distPerc);
  82.  
  83.         //Spawn("MedigunBeam3", coords[5][0], coords[5][1], coords[5][2]);
  84.         //Spawn("MedigunBeam2", coords[6][0], coords[6][1], coords[6][2]);
  85.         Spawn(beamActor, coords[8][0], coords[8][1], coords[8][2]);
  86.         //Delay(4);
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement