home *** CD-ROM | disk | FTP | other *** search
/ Game Level Design / GLDesign.bin / Software / UnrealEngine2Runtime / UE2Runtime-22262001_Demo.exe / Engine / Classes / Inventory.uc < prev    next >
Text File  |  2003-06-23  |  9KB  |  330 lines

  1. //=============================================================================
  2. // Inventory
  3. //
  4. // Inventory is the parent class of all actors that can be carried by other actors.  
  5. // Inventory items are placed in the holding actor's inventory chain, a linked list 
  6. // of inventory actors.  Each inventory class knows what pickup can spawn it (its 
  7. // PickupClass).  When tossed out (using the DropFrom() function), inventory items 
  8. // replace themselves with an actor of their Pickup class.
  9. //
  10. //=============================================================================
  11. class Inventory extends Actor
  12.     abstract
  13.     native
  14.     nativereplication;
  15.  
  16. #exec Texture Import File=Textures\Inventry.pcx Name=S_Inventory Mips=Off MASKED=1
  17.  
  18. //-----------------------------------------------------------------------------
  19.  
  20. var     byte            InventoryGroup;     // The weapon/inventory set, 0-9.
  21. var     byte            GroupOffset;        // position within inventory group. (used by prevweapon and nextweapon)                 
  22. var     bool             bDisplayableInv;    // Item displayed in HUD.
  23. var     bool            bTossedOut;            // true if weapon/inventory was tossed out (so players can't cheat w/ weaponstay)
  24. var     class<Pickup>  PickupClass;        // what class of pickup is associated with this inventory item
  25. var() travel int    Charge;                // Charge (for example, armor remaining if an armor)
  26.  
  27. //-----------------------------------------------------------------------------
  28. // Rendering information.
  29.  
  30. // Player view rendering info.
  31. var(FirstPerson)     vector      PlayerViewOffset;   // Offset from view center.
  32. var(FirstPerson)    rotator     PlayerViewPivot;    // additive rotation offset for tweaks
  33. var() bool bDrawingFirstPerson;
  34. var     float         BobDamping;         // how much to damp view bob
  35.  
  36. // 3rd person mesh.
  37. var actor     ThirdPersonActor;
  38. var class<InventoryAttachment> AttachmentClass;
  39.  
  40. //-----------------------------------------------------------------------------
  41. // HUD graphics.
  42.  
  43. var     Material Icon;
  44. var     Material StatusIcon;         // Icon used with ammo/charge/power count on HUD.
  45. var     localized string     ItemName;
  46.  
  47. // Network replication.
  48. replication
  49. {
  50.     // Things the server should send to the client.
  51.     reliable if( bNetOwner && bNetDirty && (Role==ROLE_Authority) )
  52.         Charge,ThirdPersonActor;
  53. }
  54.  
  55. simulated function AttachToPawn(Pawn P)
  56. {
  57.     local name BoneName;
  58.  
  59.     if ( ThirdPersonActor == None )
  60.     {
  61.         ThirdPersonActor = Spawn(AttachmentClass,Owner);
  62.         InventoryAttachment(ThirdPersonActor).InitFor(self);
  63.     }
  64.     BoneName = P.GetWeaponBoneFor(self);
  65.     if ( BoneName == '' )
  66.     {
  67.         ThirdPersonActor.SetLocation(P.Location);
  68.         ThirdPersonActor.SetBase(P);
  69.     }
  70.     else
  71.         P.AttachToBone(ThirdPersonActor,BoneName);
  72. }
  73.  
  74. /* UpdateRelative()
  75. For tweaking weapon positioning.  Pass in a new relativerotation, and use the weapon editactor
  76. properties sheet to modify the relativelocation
  77. */
  78. exec function updaterelative(int pitch, int yaw, int roll)
  79. {
  80.     local rotator NewRot;
  81.  
  82.     NewRot.Pitch = pitch;
  83.     NewRot.Yaw = yaw;
  84.     NewRot.Roll = roll;
  85.     ThirdPersonActor.SetRelativeLocation(ThirdPersonActor.Default.RelativeLocation);
  86.     ThirdPersonActor.SetRelativeRotation(NewRot);
  87. }
  88.  
  89. simulated function DetachFromPawn(Pawn P)
  90. {
  91.     if ( ThirdPersonActor != None )
  92.     {
  93.         ThirdPersonActor.Destroy();
  94.         ThirdPersonActor = None;
  95.     }
  96. }
  97.  
  98. /* RenderOverlays() - Draw first person view of inventory
  99. Most Inventory actors are never rendered.  The common exception is Weapon actors.  
  100. Inventory actors may be rendered in the first person view of the player holding them
  101. using the RenderOverlays() function.  
  102. */
  103. simulated event RenderOverlays( canvas Canvas )
  104. {
  105.     if ( (Instigator == None) || (Instigator.Controller == None))
  106.         return;
  107.     SetLocation( Instigator.Location + Instigator.CalcDrawOffset(self) );
  108.     SetRotation( Instigator.GetViewRotation() );
  109.     Canvas.DrawActor(self, false);
  110. }
  111.  
  112. simulated function String GetHumanReadableName()
  113. {
  114.     if ( ItemName == "" )
  115.         ItemName = GetItemName(string(Class));
  116.  
  117.     return ItemName;
  118. }
  119.  
  120. function PickupFunction(Pawn Other);
  121.  
  122. //=============================================================================
  123. // AI inventory functions.
  124. simulated function Weapon RecommendWeapon( out float rating )
  125. {
  126.     if ( inventory != None )
  127.         return inventory.RecommendWeapon(rating);
  128.     else
  129.     {
  130.         rating = -1;
  131.         return None;
  132.     }
  133. }
  134.  
  135. //=============================================================================
  136. // Inventory travelling across servers.
  137.  
  138. //
  139. // Called after a travelling inventory item has been accepted into a level.
  140. //
  141. event TravelPreAccept()
  142. {
  143.     Super.TravelPreAccept();
  144.     GiveTo( Pawn(Owner) );
  145. }
  146.  
  147. function TravelPostAccept()
  148. {
  149.     Super.TravelPostAccept();
  150.     PickupFunction(Pawn(Owner));
  151. }
  152.  
  153. //=============================================================================
  154. // General inventory functions.
  155.  
  156. //
  157. // Called by engine when destroyed.
  158. //
  159. function Destroyed()
  160. {
  161.     // Remove from owner's inventory.
  162.     if( Pawn(Owner)!=None )
  163.         Pawn(Owner).DeleteInventory( Self );
  164.     if ( ThirdPersonActor != None )
  165.         ThirdPersonActor.Destroy();
  166. }
  167.  
  168. //
  169. // Give this inventory item to a pawn.
  170. //
  171. function GiveTo( pawn Other )
  172. {
  173.     Instigator = Other;
  174.     if ( Other.AddInventory( Self ) )
  175.     GotoState('');
  176.     else
  177.         Destroy();
  178. }
  179.  
  180. //
  181. // Function which lets existing items in a pawn's inventory
  182. // prevent the pawn from picking something up. Return true to abort pickup
  183. // or if item handles pickup, otherwise keep going through inventory list.
  184. //
  185. function bool HandlePickupQuery( pickup Item )
  186. {
  187.     if ( Item.InventoryType == Class )
  188.         return true;
  189.     if ( Inventory == None )
  190.         return false;
  191.  
  192.     return Inventory.HandlePickupQuery(Item);
  193. }
  194.  
  195. //
  196. // Select first activatable powerup.
  197. //
  198. function Powerups SelectNext()
  199. {
  200.     if ( Inventory != None )
  201.         return Inventory.SelectNext();
  202.     else
  203.         return None;
  204. }
  205.  
  206. //
  207. // Toss this item out.
  208. //
  209. function DropFrom(vector StartLocation)
  210. {
  211.     local Pickup P;
  212.  
  213.     if ( Instigator != None )
  214.     {
  215.         DetachFromPawn(Instigator);    
  216.         Instigator.DeleteInventory(self);
  217.     }    
  218.     SetDefaultDisplayProperties();
  219.     Instigator = None;
  220.     StopAnimating();
  221.     GotoState('');
  222.  
  223.     P = spawn(PickupClass,,,StartLocation);
  224.     if ( P == None )
  225.     {
  226.         destroy();
  227.         return;
  228.     }
  229.     P.InitDroppedPickupFor(self);
  230.     P.Velocity = Velocity;
  231.     Velocity = vect(0,0,0);
  232. }
  233.  
  234. //=============================================================================
  235. // Using.
  236.  
  237. function Use( float Value );
  238.  
  239. //=============================================================================
  240. // Weapon functions.
  241.  
  242. // Find a weapon in inventory that has an Inventory Group matching F.
  243.  
  244. simulated function Weapon WeaponChange( byte F, bool bSilent )
  245. {
  246.     if( Inventory == None)
  247.         return None;
  248.     else
  249.         return Inventory.WeaponChange( F, bSilent );
  250. }
  251.  
  252. // Find the previous weapon (using the Inventory group)
  253. simulated function Weapon PrevWeapon(Weapon CurrentChoice, Weapon CurrentWeapon)
  254. {
  255.     if ( Inventory == None )
  256.         return CurrentChoice;
  257.     else
  258.         return Inventory.PrevWeapon(CurrentChoice,CurrentWeapon);
  259. }
  260.  
  261. // Find the next weapon (using the Inventory group)
  262. simulated function Weapon NextWeapon(Weapon CurrentChoice, Weapon CurrentWeapon)
  263. {
  264.     if ( Inventory == None )
  265.         return CurrentChoice;
  266.     else
  267.         return Inventory.NextWeapon(CurrentChoice,CurrentWeapon);
  268. }
  269.  
  270. //=============================================================================
  271. // Armor functions.
  272.  
  273. //
  274. // Return the best armor to use.
  275. //
  276. function armor PrioritizeArmor( int Damage, class<DamageType> DamageType, vector HitLocation )
  277. {
  278.     local Armor FirstArmor;
  279.  
  280.     if ( Inventory != None )
  281.         FirstArmor = Inventory.PrioritizeArmor(Damage, DamageType, HitLocation);
  282.     else
  283.         FirstArmor = None;
  284.  
  285.     return FirstArmor;
  286. }
  287.  
  288. //
  289. // Used to inform inventory when owner event occurs (for example jumping or weapon change)
  290. //
  291. function OwnerEvent(name EventName)
  292. {
  293.     if( Inventory != None )
  294.         Inventory.OwnerEvent(EventName);
  295. }
  296.  
  297. // used to ask inventory if it needs to affect its owners display properties
  298. function SetOwnerDisplay()
  299. {
  300.     if( Inventory != None )
  301.         Inventory.SetOwnerDisplay();
  302. }
  303.  
  304. static function string StaticItemName()
  305. {
  306.     return Default.ItemName;
  307. }
  308.  
  309.  
  310. defaultproperties
  311. {
  312.     bOnlyDirtyReplication=true
  313.     bOnlyRelevantToOwner=true
  314.      AttachmentClass=class'InventoryAttachment'
  315.      BobDamping=0.960000
  316.      bTravel=True
  317.      DrawType=DT_None
  318.      AmbientGlow=0
  319.      RemoteRole=ROLE_SimulatedProxy
  320.      NetPriority=1.4
  321.      bOnlyOwnerSee=true
  322.      bHidden=true
  323.      bClientAnim=true
  324.      Physics=PHYS_None
  325.      bReplicateMovement=false
  326.      bAcceptsProjectors=True
  327.      bDrawingFirstPerson=false
  328. }
  329.  
  330.