コード例 #1
0
 public void ProjectileDataOnCollision(coProjectileData datablock, coProjectile projectile, coShapeBase shapebase, string fad, Point3F pos, string normal)
 {
     // Apply damage to the object all shape base objects
     if (datablock["directDamage"].AsFloat() > 0)
     {
         if ((console.getTypeMask(shapebase) & (uint)SceneObjectTypesAsUint.ShapeBaseObjectType) == (uint)SceneObjectTypesAsUint.ShapeBaseObjectType)
         {
             ShapeBaseDamage(shapebase, projectile.ID, pos, datablock["directDamage"].AsFloat(), datablock["damageType"]);
         }
     }
 }
コード例 #2
0
        public string RocketLauncherImageOnAltFire(coItem thisobj, coPlayer obj, string slot)
        {
            int currentAmmo = ShapeBaseShapeBaseGetInventory(obj, (thisobj["ammo"]));

            if (currentAmmo < thisobj["loadCount"].AsInt())
            {
                thisobj["loadCount"] = currentAmmo.AsString();
            }
            coProjectile projectile = null;

            for (int shotCount = 0; shotCount < thisobj["loadCount"].AsInt(); shotCount++)
            {
                // Decrement inventory ammo. The image's ammo state is updated
                // automatically by the ammo inventory hooks.
                ShapeBaseShapeBaseDecInventory(obj, (thisobj["ammo"]), 1);
                // We fire our weapon using the straight ahead aiming point of the gun
                // We'll need to "skew" the projectile a little bit.  We start by getting
                // the straight ahead aiming point of the gun
                Point3F    vec    = obj.getMuzzleVector(slot.AsInt());
                Random     r      = new Random();
                TransformF matrix = new TransformF();
                matrix.MPosition.x = (float)((r.NextDouble() - .5) * 2 * Math.PI * 0.008);
                matrix.MPosition.y = (float)((r.NextDouble() - .5) * 2 * Math.PI * 0.008);
                matrix.MPosition.z = (float)((r.NextDouble() - .5) * 2 * Math.PI * 0.008);
                TransformF mat = math.MatrixCreateFromEuler(matrix);

                // Which we'll use to alter the projectile's initial vector with
                TransformF muzzleVector = math.MatrixMulVector(mat, vec);

                // Get the player's velocity, we'll then add it to that of the projectile
                TransformF objectVelocity = new TransformF(obj.getVelocity());

                muzzleVector   = muzzleVector.vectorScale(thisobj["projectile.muzzleVelocity"].AsFloat());
                objectVelocity = objectVelocity.vectorScale(thisobj["projectile.velInheritFactor"].AsFloat());
                TransformF muzzleVelocity = muzzleVector + objectVelocity;

                Torque_Class_Helper tch = new Torque_Class_Helper(thisobj["projectileType"], "");
                tch.Props.Add("dataBlock", thisobj["projectile"]);
                tch.Props.Add("initialVelocity", '"' + muzzleVelocity.ToString() + '"');
                tch.Props.Add("initialPosition", '"' + obj.getMuzzlePoint(slot.AsInt()).AsString() + '"');
                tch.Props.Add("sourceObject", obj);
                tch.Props.Add("sourceSlot", slot);
                tch.Props.Add("client", obj["client"]);


                projectile = tch.Create();
                ((coSimSet)"MissionCleanup").pushToBack(projectile);
            }
            return(projectile);
        }
コード例 #3
0
        public void ProjectileDataOnExplode(coProjectileData data, coProjectile proj, Point3F position, string mod)
        {
            // Damage objects within the projectiles damage radius
            float radius = data["damageRadius"].AsFloat();

            if (radius <= 0)
            {
                return;
            }
            string damageType   = data["damageType"];
            float  areaImpulse  = data["areaImpulse"].AsFloat();
            float  radiusDamage = data["radiusDamage"].AsFloat();

            RadiusDamage((coPlayer)proj.ID, position, radius, radiusDamage, damageType, areaImpulse);
        }
コード例 #4
0
        public void WeaponImageOnFire(coScriptObject thisobj, coPlayer obj, int slot)
        {
            if (!((coItem)thisobj["projectile"]).isObject())
            {
                console.error("WeaponImage::onFire() - Invalid projectile datablock");
                return;
            }
            // Decrement inventory ammo. The image's ammo state is updated
            // automatically by the ammo inventory hooks.

            if (!thisobj["infiniteAmmo"].AsBool())
            {
                ShapeBaseShapeBaseDecInventory(obj, thisobj["ammo"], 1);
            }

            // Get the player's velocity, we'll then add it to that of the projectile
            int numProjectiles = thisobj["projectileNum"].AsInt();

            if (numProjectiles == 0)
            {
                numProjectiles = 1;
            }
            TransformF muzzleVector = new TransformF();

            for (int i = 0; i < numProjectiles; i++)
            {
                if (thisobj["projectileSpread"].AsBool())
                {
                    // We'll need to "skew" this projectile a little bit.  We start by
                    // getting the straight ahead aiming point of the gun
                    Point3F vec = obj.getMuzzleVector(slot);
                    // Then we'll create a spread matrix by randomly generating x, y, and z
                    // points in a circle
                    Random     r      = new Random();
                    TransformF matrix = new TransformF();
                    matrix.MPosition.x = (float)((r.NextDouble() - .5) * 2 * Math.PI * thisobj["projectileSpread"].AsFloat());
                    matrix.MPosition.y = (float)((r.NextDouble() - .5) * 2 * Math.PI * thisobj["projectileSpread"].AsFloat());
                    matrix.MPosition.z = (float)((r.NextDouble() - .5) * 2 * Math.PI * thisobj["projectileSpread"].AsFloat());
                    TransformF mat = math.MatrixCreateFromEuler(matrix);

                    muzzleVector = math.MatrixMulVector(mat, vec);
                }
                else
                {
                    muzzleVector = new TransformF(obj.getMuzzleVector(slot));
                }
                Point3F objectVelocity = obj.getVelocity();

                muzzleVector = muzzleVector.vectorScale(thisobj["projectile.muzzleVelocity"].AsFloat());


                objectVelocity = objectVelocity.vectorScale(thisobj["projectile.velInheritFactor"].AsFloat());

                Point3F muzzleVelocity = muzzleVector.MPosition + objectVelocity;

                Torque_Class_Helper tch = new Torque_Class_Helper(thisobj["projectileType"]);
                tch.Props.Add("dataBlock", thisobj["projectile"]);
                tch.Props.Add("initialVelocity", '"' + muzzleVelocity.AsString() + '"');
                tch.Props.Add("initialPosition", '"' + obj.getMuzzlePoint(slot).AsString() + '"');
                tch.Props.Add("sourceObject", obj);
                tch.Props.Add("sourceSlot", slot.AsString());
                tch.Props.Add("client", obj["client"]);
                tch.Props.Add("sourceClass", obj.getClassName());

                coProjectile projectile = tch.Create();

                ((coSimSet)"MissionCleanup").pushToBack(projectile);
            }
        }