home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 58 / pcpp58b_TRIBES.iso / Tribes / base / scripts.vol / observer.cs < prev    next >
Encoding:
Text File  |  1998-12-16  |  5.0 KB  |  174 lines

  1. $GuiModeCommand    = 2;
  2. $LastControlObject = 0;
  3.  
  4. function Observer::triggerDown(%client)
  5. {
  6. }
  7.  
  8. function Observer::orbitObjectDeleted(%cl)
  9. {
  10. }
  11.  
  12. function Observer::leaveMissionArea(%cl)
  13. {
  14. }
  15.  
  16. function Observer::enterMissionArea(%cl)
  17. {
  18. }
  19.  
  20. function Observer::triggerUp(%client)
  21. {
  22.    if(%client.observerMode == "dead")
  23.    {
  24.       if(%client.dieTime + 2 < getSimTime())
  25.       {
  26.          if(Game::playerSpawn(%client, true))
  27.          {
  28.             %client.observerMode = "";
  29.             Observer::checkObserved(%client);
  30.          }
  31.       }
  32.    }
  33.    else if(%client.observerMode == "observerOrbit")
  34.       Observer::nextObservable(%client);
  35.    else if(%client.observerMode == "observerFly")
  36.    {
  37.       %camSpawn = Game::pickObserverSpawn(%client);
  38.       Observer::setFlyMode(%client, GameBase::getPosition(%camSpawn), 
  39.           GameBase::getRotation(%camSpawn), true, true);
  40.    }
  41.    else if(%client.observerMode == "justJoined")
  42.    {
  43.       %client.observerMode = "";
  44.       Game::playerSpawn(%client, false);
  45.    }
  46. }
  47.  
  48. function Observer::jump(%client)
  49. {
  50.    if(%client.observerMode == "observerFly")
  51.    {
  52.       %client.observerMode = "observerOrbit";
  53.       %client.observerTarget = %client;
  54.       Observer::nextObservable(%client);
  55.    }
  56.    else if(%client.observerMode == "observerOrbit")
  57.    {
  58.       %client.observerTarget = "";
  59.       %client.observerMode = "observerFly";
  60.  
  61.       %camSpawn = Game::pickObserverSpawn(%client);
  62.       Observer::setFlyMode(%client, GameBase::getPosition(%camSpawn), 
  63.           GameBase::getRotation(%camSpawn), true, true);
  64.    }
  65. }
  66.  
  67. function Observer::isObserver(%clientId)
  68. {
  69.    return %clientId.observerMode == "observerOrbit" || %clientId.observerMode == "observerFly";
  70. }
  71.  
  72. function Observer::enterObserverMode(%clientId)
  73. {
  74.    if(%clientId.observerMode == "observerOrbit" || %clientId.observerMode == "observerFly")
  75.       return false;
  76.    Client::clearItemShopping(%clientId);
  77.    %player = Client::getOwnedObject(%clientId);
  78.    if(%player != -1 && getObjectType(%player) == "Player" && !Player::isDead(%player)) {
  79.         playNextAnim(%clientId);
  80.        Player::kill(%clientId);
  81.     }
  82.    Client::setOwnedObject(%clientId, -1);
  83.    Client::setControlObject(%clientId, Client::getObserverCamera(%clientId));
  84.    %clientId.observerMode = "observerOrbit";
  85.    GameBase::setTeam(%clientId, -1);
  86.    Observer::jump(%clientId);
  87.    remotePlayMode(%clientId);
  88.    return true;
  89. }
  90.  
  91. function Observer::checkObserved(%client)
  92. {
  93.    // this function loops through all the clients and checks
  94.    // if anyone was observing %client... if so, it updates that
  95.    // observation to reflect the new %client owned object.
  96.  
  97.    for(%cl = Client::getFirst(); %cl != -1; %cl = Client::getNext(%cl))
  98.    {
  99.       if(%cl.observerTarget == %client)
  100.       {
  101.          if(%cl.observerMode == "observerOrbit")
  102.              Observer::setOrbitObject(%cl, %client, 5, 5, 5);
  103.          else if(%cl.observerMode == "commander")
  104.               Observer::setOrbitObject(%cl, %client, -3, -3, -3);
  105.       }
  106.    }
  107. }
  108.  
  109. function Observer::nextObservable(%client)
  110. {
  111.    %lastObserved = %client.observerTarget;
  112.    %nextObserved = Client::getNext(%lastObserved);
  113.    %ct = 128;  // just in case
  114.    while(%ct--)
  115.    {
  116.       if(%nextObserved == -1)
  117.       {
  118.          %nextObserved = Client::getFirst();
  119.          continue;
  120.       }
  121.       %owned = Client::getOwnedObject(%nextObserved);
  122.       if(%nextObserved == %lastObserved && %owned == -1)
  123.       {
  124.          Observer::jump(%client);
  125.          return;
  126.       }
  127.       if(%owned == -1)
  128.       {
  129.          %nextObserved = Client::getNext(%nextObserved);
  130.          continue;
  131.       }
  132.        Observer::setOrbitObject(%client, %nextObserved, 5, 5, 5);
  133.       bottomprint(%client, "<jc>Observing " @ Client::getName(%nextObserved), 5);
  134.       %client.observerTarget = %nextObserved;
  135.       return;
  136.    }
  137.    Observer::jump(%client);
  138. }
  139.  
  140. function Observer::prevObservable(%client)
  141. {
  142. }
  143.  
  144. function remoteSCOM(%clientId, %observeId)
  145. {
  146.    if (%observeId != -1)
  147.    {
  148.       if (Client::getTeam(%clientId) == Client::getTeam(%observeId) &&
  149.          (%clientId.observerMode == "" || %clientId.observerMode == "commander") && Client::getGuiMode(%clientId) == $GuiModeCommand)
  150.       {
  151.          Client::limitCommandBandwidth(%clientId, true);
  152.          if(%clientId.observerMode != "commander")
  153.          {
  154.             %clientId.observerMode = "commander";
  155.              %clientId.lastControlObject = Client::getControlObject(%clientId);
  156.          }
  157.           Client::setControlObject(%clientId, Client::getObserverCamera(%clientId));
  158.            Observer::setOrbitObject(%clientId, %observeId, -3, -3, -3);
  159.          %clientId.observerTarget = %observeId;
  160.          Observer::setDamageObject(%clientId, %clientId);
  161.       }
  162.    }
  163.    else
  164.    {
  165.       Client::limitCommandBandwidth(%clientId, false);
  166.       if(%clientId.observerMode == "commander")
  167.       {
  168.          Client::setControlObject(%clientId, %clientId.lastControlObject);
  169.            %clientId.lastControlObject = "";
  170.          %clientId.observerMode = "";
  171.          %clientId.observerTarget = "";
  172.        }
  173.    }
  174. }