Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int coords[9][3]; // For the bezier drawing
- script MEDIGUN_DRAWBEZIER (int source, int target, int typearg) clientside
- {
- int i, dist, distPerc, drawDist;
- int beamActor;
- int type = leftShort(typearg);
- int isterm = rightShort(typearg) & 4;
- int ismech = rightShort(typearg) & 2;
- int disarm = rightShort(typearg) & 1;
- /*
- Print(s:"Source (", d:source, s:"): ", d:ThingCount(0, source),
- s:"\nTarget (", d:target, s:"): ", d:ThingCount(0, target));
- */
- switch (type)
- {
- case TYPE_MEDIGUN: beamActor = "MedigunBeam"; break;
- case TYPE_REPAIRGUN: beamActor = "RepairBeam"; break;
- case TYPE_ADVREPAIRGUN: beamActor = "AdvRepairBeam"; break;
- case TYPE_BOMBSQUADGUN: beamActor = "BombSquadBeam"; break;
- }
- SetActivator(source);
- int pln = PlayerNumber();
- int team = GetPlayerInfo(pln, PLAYERINFO_TEAM);
- coords[0][0] = GetActorX(source); coords[0][1] = GetActorY(source); coords[0][2] = GetActorZ(source) + 32.0;
- coords[1][0] = GetActorX(target); coords[1][1] = GetActorY(target); coords[1][2] = GetActorZ(target);
- if (isterm) { coords[1][2] += 16.0; }
- else if (disarm) { coords[1][2] += 4.0; }
- else if (ismech) { coords[1][2] += 64.0; }
- else { coords[1][2] += 32.0; }
- dist = magnitudeThree(ftoi(coords[0][0] - coords[1][0]),
- ftoi(coords[0][1] - coords[1][1]),
- ftoi(coords[0][2] - coords[1][2]));
- coords[2][0] = GetActorX(source) + (FixedMul(cos(GetActorAngle(source)), cos(GetActorPitch(source)) ) ) * dist;
- coords[2][1] = GetActorY(source) + (FixedMul(sin(GetActorAngle(source)), cos(GetActorPitch(source)) ) ) * dist;
- coords[2][2] = GetActorZ(source) + (-sin(GetActorPitch(source)) * dist);
- coords[3][0] = coords[2][0] - coords[0][0];
- coords[3][1] = coords[2][1] - coords[0][1];
- coords[3][2] = coords[2][2] - coords[0][2];
- coords[4][0] = coords[2][0] - coords[1][0];
- coords[4][1] = coords[2][1] - coords[1][1];
- coords[4][2] = coords[2][2] - coords[1][2];
- mediBeamLength[pln] = min(mediBeamLength[pln] + 10, MEDIGUN_MAXDIST);
- drawDist = min(mediBeamLength[pln], dist);
- if (drawDist == dist) { mediBeamLength[pln] = MEDIGUN_MAXDIST; }
- for (i = 12; i <= drawDist; i += 12)
- {
- if (i < 24) { continue; }
- distPerc = FixedDiv(itof(i), itof(dist));
- coords[5][0] = coords[0][0] + FixedMul(coords[3][0], distPerc);
- coords[5][1] = coords[0][1] + FixedMul(coords[3][1], distPerc);
- coords[5][2] = coords[0][2] + FixedMul(coords[3][2], distPerc);
- coords[6][0] = coords[1][0] + FixedMul(coords[4][0], 1.0-distPerc);
- coords[6][1] = coords[1][1] + FixedMul(coords[4][1], 1.0-distPerc);
- coords[6][2] = coords[1][2] + FixedMul(coords[4][2], 1.0-distPerc);
- coords[7][0] = coords[6][0] - coords[5][0];
- coords[7][1] = coords[6][1] - coords[5][1];
- coords[7][2] = coords[6][2] - coords[5][2];
- coords[8][0] = coords[5][0] + FixedMul(coords[7][0], distPerc);
- coords[8][1] = coords[5][1] + FixedMul(coords[7][1], distPerc);
- coords[8][2] = coords[5][2] + FixedMul(coords[7][2], distPerc);
- //Spawn("MedigunBeam3", coords[5][0], coords[5][1], coords[5][2]);
- //Spawn("MedigunBeam2", coords[6][0], coords[6][1], coords[6][2]);
- Spawn(beamActor, coords[8][0], coords[8][1], coords[8][2]);
- //Delay(4);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement