Downloads containing ArtificialArrow.asc

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Jazz of the JungleFeatured Download Violet CLM Single player 8.9 Download file

File preview

  1. #pragma require "ArtificialArrow.asc"
  2.  
  3. namespace ArtificialArrow {
  4.         class SortableDistance {
  5.                 float distance;
  6.                 uint index;
  7.                 SortableDistance(){}
  8.                 SortableDistance(float d, uint i) { distance = d; index = i; }
  9.                 int opCmp(const SortableDistance &in other) const {
  10.                         return int(distance - other.distance);
  11.                 }
  12.         }
  13.  
  14.         int ArrowTimer = 0;
  15.         const uint ArrowSprite = jjAnimations[jjAnimSets[ANIM::FLAG]];
  16.        
  17.         void DrawArrow(const array<int> &in targets, const jjPLAYER@ player, SPRITE::Mode spriteMode, uint8 spriteParam, int maxDistance = -1) {
  18.                 if (targets.length != 0 && (targets.length & 1) == 0 && player !is null) {
  19.                         if (ArrowTimer > jjGameTicks + 70*4)
  20.                                 ArrowTimer = jjGameTicks;
  21.                         else if (ArrowTimer < jjGameTicks) {
  22.                                 if (ArrowTimer + 64 >= jjGameTicks) {
  23.                                         const int px = int(player.xPos), py = int(player.yPos);
  24.                                         array<SortableDistance> distances;
  25.                                         for (uint i = 0; i < targets.length; i += 2) {
  26.                                                 const float deltaX = abs(px - targets[i]);
  27.                                                 const float deltaY = abs(py - targets[i+1]);
  28.                                                 distances.insertLast(SortableDistance(deltaX * deltaX + deltaY * deltaY, i));
  29.                                         }
  30.                                         int target = -1;
  31.                                         distances.sortAsc();
  32.                                         if (maxDistance < 0 || distances[0].distance > maxDistance)
  33.                                                 target = distances[0].index;
  34.                                         if (target >= 0) {
  35.                                                 const int angle = int(atan2(
  36.                                                         py - targets[target+1],
  37.                                                         targets[target] - px
  38.                                                 ) * -512.0 * 0.318309886142228);
  39.                                                 const float scale = (112 - (jjSin((jjGameTicks - ArrowTimer) << 3) * -64)) / 128.f;
  40.                                                 jjDrawRotatedSpriteFromCurFrame(
  41.                                                         player.xPos + jjCos(angle) * 32, player.yPos + jjSin(angle) * 32,
  42.                                                         ArrowSprite, 970 - angle, scale, scale, spriteMode,spriteParam, 4, 4, player.playerID
  43.                                                 );
  44.                                         }
  45.                                 } else {
  46.                                         ArrowTimer = jjGameTicks + 70*3;
  47.                                 }
  48.                         }
  49.                 }
  50.         }
  51. }