Initial commit
This commit is contained in:
118
Torque/SDK/example/demo/server/scripts/weapon.cs
Normal file
118
Torque/SDK/example/demo/server/scripts/weapon.cs
Normal file
@@ -0,0 +1,118 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (C) GarageGames.com, Inc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// This file contains Weapon and Ammo Class/"namespace" helper methods
|
||||
// as well as hooks into the inventory system. These functions are not
|
||||
// attached to a specific C++ class or datablock, but define a set of
|
||||
// methods which are part of dynamic namespaces "class". The Items
|
||||
// include these namespaces into their scope using the ItemData and
|
||||
// ItemImageData "className" variable.
|
||||
|
||||
// All ShapeBase images are mounted into one of 8 slots on a shape.
|
||||
// This weapon system assumes all primary weapons are mounted into
|
||||
// this specified slot:
|
||||
$WeaponSlot = 0;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Audio profiles
|
||||
|
||||
datablock AudioProfile(WeaponUseSound)
|
||||
{
|
||||
filename = "~/data/sound/weapon_switch.ogg";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(WeaponPickupSound)
|
||||
{
|
||||
filename = "~/data/sound/weapon_pickup.ogg";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AmmoPickupSound)
|
||||
{
|
||||
filename = "~/data/sound/ammo_pickup.ogg";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Weapon Class
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function Weapon::onUse(%data,%obj)
|
||||
{
|
||||
// Default behavoir for all weapons is to mount it into the
|
||||
// this object's weapon slot, which is currently assumed
|
||||
// to be slot 0
|
||||
if (%obj.getMountedImage($WeaponSlot) != %data.image.getId()) {
|
||||
serverPlay3D(WeaponUseSound,%obj.getTransform());
|
||||
%obj.mountImage(%data.image, $WeaponSlot);
|
||||
if (%obj.client)
|
||||
messageClient(%obj.client, 'MsgWeaponUsed', '\c0Weapon selected');
|
||||
}
|
||||
}
|
||||
|
||||
function Weapon::onPickup(%this, %obj, %shape, %amount)
|
||||
{
|
||||
// The parent Item method performs the actual pickup.
|
||||
// For player's we automatically use the weapon if the
|
||||
// player does not already have one in hand.
|
||||
if (Parent::onPickup(%this, %obj, %shape, %amount)) {
|
||||
serverPlay3D(WeaponPickupSound,%obj.getTransform());
|
||||
if (%shape.getClassName() $= "Player" &&
|
||||
%shape.getMountedImage($WeaponSlot) == 0) {
|
||||
%shape.use(%this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Weapon::onInventory(%this,%obj,%amount)
|
||||
{
|
||||
// Weapon inventory has changed, make sure there are no weapons
|
||||
// of this type mounted if there are none left in inventory.
|
||||
if (!%amount && (%slot = %obj.getMountSlot(%this.image)) != -1)
|
||||
%obj.unmountImage(%slot);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Weapon Image Class
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function WeaponImage::onMount(%this,%obj,%slot)
|
||||
{
|
||||
// Images assume a false ammo state on load. We need to
|
||||
// set the state according to the current inventory.
|
||||
if (%obj.getInventory(%this.ammo))
|
||||
%obj.setImageAmmo(%slot,true);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Ammmo Class
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function Ammo::onPickup(%this, %obj, %shape, %amount)
|
||||
{
|
||||
// The parent Item method performs the actual pickup.
|
||||
if (Parent::onPickup(%this, %obj, %shape, %amount)) {
|
||||
serverPlay3D(AmmoPickupSound,%obj.getTransform());
|
||||
}
|
||||
}
|
||||
|
||||
function Ammo::onInventory(%this,%obj,%amount)
|
||||
{
|
||||
// The ammo inventory state has changed, we need to update any
|
||||
// mounted images using this ammo to reflect the new state.
|
||||
for (%i = 0; %i < 8; %i++) {
|
||||
if ((%image = %obj.getMountedImage(%i)) > 0)
|
||||
if (isObject(%image.ammo) && %image.ammo.getId() == %this.getId())
|
||||
%obj.setImageAmmo(%i,%amount != 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user