private void ConfigureAltColisonTileForNoColision(IObjectAlterCollisionTile tile)
 {
     tile.SetDisablePlayerMelee(true);
     if (!ALLOW_PROJECTILES_TO_HIT_CARRIED_OBJECTS)
     {
         tile.SetDisableProjectileHit(true);
     }
     tile.SetDisableCollisionTargetObjects(true);
     tile.SetDisabledCategoryBits(0xFFFF);
     tile.SetDisabledMaskBits(0xFFFF);
     tile.SetDisabledAboveBits(0xFFFF);
     tile.CustomId       = this.id;
     this.altColisonTile = tile;
 }
 public void DropObject()
 {
     if (this.pickedObject == null)
     {
         this.isCarrying = false;
         return;
     }
     this.lastUse = Game.TotalElapsedGameTime;
     pickedObject.SetBodyType(BodyType.Dynamic);
     this.altColisonTile.RemoveTargetObject(this.pickedObject);
     this.altColisonTile.Destroy();
     this.altColisonTile = null;
     this.pickedObject   = null;
 }
    public void UpdatePickupObjectPos()
    {
        if (this.pickedObject == null)
        {
            this.isCarrying = false;
            return;
        }

        //Game.WriteToConsole(pickedObject.GetMass().ToString());

        if (this.pickedObject.IsRemoved)
        {
            this.altColisonTile.RemoveTargetObject(this.pickedObject);
            this.altColisonTile.Destroy();
            this.altColisonTile = null;
            DropObject();
            this.isCarrying = false;
            return;
        }

        if (this.controller.IsCrouching)
        {
            this.pickedObject.SetWorldPosition(this.controller.GetWorldPosition() +
                                               new Vector2(this.controller.FacingDirection *
                                                           this.pickedObjectWidth * 2.5f, this.pickedObjectHeight / 2));
        }
        else
        {
            this.pickedObject.SetWorldPosition(this.controller.GetWorldPosition() +
                                               new Vector2(this.controller.FacingDirection *
                                                           this.pickedObjectWidth * 2.5f, this.pickedObjectHeight * 1.3f));
        }
        this.pickedObject.SetLinearVelocity(Vector2.Zero);
        this.pickedObject.SetAngle(0f);
        this.isCarrying = true;
        this.pickedObject.SetBodyType(BodyType.Static);

        //IObject[] test = this.altColisonTile.GetTargetObjects();
        //Game.WriteToConsole(this.altColisonTile.GetDisabledMaskBits().ToString());
        //Game.WriteToConsole(test[0].Name);
    }
Esempio n. 4
0
            public TTurret(int id, Vector2 position, int dir, PlayerTeam team)
            {
                Id   = id;
                Team = team;
                if (dir < 0)
                {
                    MainBlockAngle = (float)Math.PI / 2;
                    DefaultAngle   = (float)Math.PI;
                }
                else
                {
                    MainBlockAngle = (float)Math.PI / 2;
                    DefaultAngle   = 0;
                }
                IObject leftLeg  = null;
                IObject rightLeg = null;
                IObject hull2    = null;
                IObject hull3    = null;
                IObject hull4    = null;

                if (Id < 4)
                {
                    leftLeg  = GlobalGame.CreateObject("Duct00C_D", position + new Vector2(-3, -9), 1.2f);
                    rightLeg = GlobalGame.CreateObject("Duct00C_D", position + new Vector2(3, -9), -1.2f);
                    leftLeg.SetMass(leftLeg.GetMass() * 20);
                    rightLeg.SetMass(rightLeg.GetMass() * 20);
                }
                else if (Id == 4 || Id == 5 || Id == 6 || Id == 7)
                {
                    RotationLimit = 0;
                    Hull          = GlobalGame.CreateObject("BgMetal08H", position + new Vector2(-4, 4), (float)Math.PI / 2);
                    hull2         = GlobalGame.CreateObject("BgMetal08H", position + new Vector2(4, 4), 0);
                    hull3         = GlobalGame.CreateObject("BgMetal08H", position + new Vector2(4, -4), -(float)Math.PI / 2);
                    hull4         = GlobalGame.CreateObject("BgMetal08H", position + new Vector2(-4, -4), -(float)Math.PI);
                    hull2.SetBodyType(BodyType.Dynamic);
                    hull3.SetBodyType(BodyType.Dynamic);
                    hull4.SetBodyType(BodyType.Dynamic);
                }
                else if (Id == 6 || Id == 7)
                {
                    RotationLimit = 0;
                    Hull          = GlobalGame.CreateObject("BgMetal08H", position + new Vector2(-4, 4), (float)Math.PI / 2);
                    hull2         = GlobalGame.CreateObject("BgMetal08H", position + new Vector2(4, 4), 0);
                    hull3         = GlobalGame.CreateObject("BgMetal08H", position + new Vector2(4, -4), -(float)Math.PI / 2);
                    hull4         = GlobalGame.CreateObject("BgMetal08H", position + new Vector2(-4, -4), -(float)Math.PI);
                    hull2.SetBodyType(BodyType.Dynamic);
                    hull3.SetBodyType(BodyType.Dynamic);
                    hull4.SetBodyType(BodyType.Dynamic);
                }


                if (Id == 6 || Id == 7)
                {
                    MainBlock = GlobalGame.CreateObject("CrabCan00", position, -(float)Math.PI / 2 * dir);
                }
                else
                {
                    MainBlock = GlobalGame.CreateObject("Computer00", position, -(float)Math.PI / 2 * dir);
                }

                MainBlock.SetHealth(1000);

                if (Id >= 4)
                {
                    IObjectAlterCollisionTile collisionDisabler = (IObjectAlterCollisionTile)GlobalGame.CreateObject("AlterCollisionTile", position);
                    collisionDisabler.SetDisableCollisionTargetObjects(true);
                    collisionDisabler.SetDisableProjectileHit(false);
                    collisionDisabler.AddTargetObject(MainBlock);
                    IObject[] platforms = GlobalGame.GetObjectsByName(new string[] { "MetalPlat01A", "Lift00C", "Lift00B", "MetalPlat00G", "Elevator02B", "InvisiblePlatform", "MetalPlat01F" });
                    for (int i = 0; i < platforms.Length; ++i)
                    {
                        collisionDisabler.AddTargetObject(platforms[i]);
                    }
                }
                IObject antenna = GlobalGame.CreateObject("BgAntenna00B", position + new Vector2(-2 * dir, 9));

                antenna.SetBodyType(BodyType.Dynamic);
                antenna.SetMass(0.0000001f);
                IObjectWeldJoint bodyJoint = (IObjectWeldJoint)GlobalGame.CreateObject("WeldJoint", position);
                IObjectWeldJoint hullJoint = (IObjectWeldJoint)GlobalGame.CreateObject("WeldJoint", position);

                if (Id < 4)
                {
                    hullJoint.AddTargetObject(leftLeg);
                    hullJoint.AddTargetObject(rightLeg);
                    OtherObjects.Add(leftLeg);
                    OtherObjects.Add(rightLeg);
                }
                else if (Id == 4 || Id == 5 || Id == 6 || Id == 7)
                {
                    hullJoint.AddTargetObject(Hull);
                    hullJoint.AddTargetObject(hull2);
                    hullJoint.AddTargetObject(hull3);
                    hullJoint.AddTargetObject(hull4);
                    OtherObjects.Add(Hull);
                    OtherObjects.Add(hull2);
                    OtherObjects.Add(hull3);
                    OtherObjects.Add(hull4);
                }
                bodyJoint.AddTargetObject(MainBlock);
                bodyJoint.AddTargetObject(antenna);
                bodyJoint.SetPlatformCollision(WeldJointPlatformCollision.PerObject);
                OtherObjects.Add(antenna);
                OtherObjects.Add(bodyJoint);
                OtherObjects.Add(hullJoint);
                DamagedObjects.Add(MainBlock);
                if (Id == 4 || Id == 5)
                {
                    HackingProtection = true;
                    EnableMovement    = true;
                    PathSize          = 2;
                    Speed             = 3;
                    RotationSpeed     = 3f;
                    DamageFactor      = 1f;
                    DroneMinDistance  = 5 * 8;
                }
                else if (Id == 6)
                {
                    HackingProtection = false;
                    EnableMovement    = true;
                    PathSize          = 2;
                    Speed             = 4;
                    RotationSpeed     = 2f;
                    DamageFactor      = 1.5f;
                    DroneMinDistance  = 4 * 8;
                }
                else if (Id == 7)
                {
                    HackingProtection = false;
                    EnableMovement    = true;
                    PathSize          = 2;
                    Speed             = 4;
                    RotationSpeed     = 2f;
                    DamageFactor      = 1f;
                    DroneMinDistance  = 4 * 8;
                }

                if (id == 0)
                {
                    Name = "Light Turret";
                }
                else if (id == 1)
                {
                    Name = "Rocket Turret";
                }
                else if (id == 2)
                {
                    Name = "Heavy Turret";
                }
                else if (id == 3)
                {
                    Name = "Sniper Turret";
                }
                else if (id == 4)
                {
                    Name = "Assault Drone";
                }
                else if (id == 5)
                {
                    Name = "Fire Drone";
                }
                else if (id == 6)
                {
                    Name = "Tazer Drone";
                }
                else if (id == 7)
                {
                    Name = "Melee Drone";
                }
                if (id == 1 || id == 2)
                { //@0:5B=8F0
                    IObject gun2 = GlobalGame.CreateObject("BgBarberPole00", position + new Vector2(dir, -2), (float)Math.PI / 2);
                    IObject gun1 = GlobalGame.CreateObject("BgBarberPole00", position + new Vector2(dir, 3), (float)Math.PI / 2);
                    gun1.SetBodyType(BodyType.Dynamic);
                    gun2.SetBodyType(BodyType.Dynamic);
                    gun1.SetMass(0.0000001f);
                    gun2.SetMass(0.0000001f);
                    bodyJoint.AddTargetObject(gun1);
                    bodyJoint.AddTargetObject(gun2);
                    OtherObjects.Add(gun1);
                    OtherObjects.Add(gun2);
                    TTurretWeapon weapon = new TTurretWeapon
                    {
                        BulletType    = (int)ProjectileItem.BAZOOKA,
                        Sound         = "Bazooka",
                        ReloadingTime = 200
                    };
                    if (id == 2)
                    {
                        weapon.Ammo = 4;
                    }
                    else
                    {
                        weapon.Ammo            = 6;
                        weapon.SuppressiveFire = true;
                        weapon.MaxFireDelay    = 1;
                        weapon.MaxBulletCount  = 1;
                    }
                    weapon.Scatter = 0;
                    WeaponList.Add(weapon);
                }
                if (id == 0 || id == 2 || id == 4)
                { //?C;5<5B
                    IObject gun00 = GlobalGame.CreateObject("BgPipe02A", position + new Vector2(8 * dir, 0));
                    IObject gun01 = GlobalGame.CreateObject("BgPipe02B", position + new Vector2(14 * dir, 0));
                    IObject gun10 = GlobalGame.CreateObject("BgPipe02A", position + new Vector2(8 * dir, 2));
                    IObject gun11 = GlobalGame.CreateObject("BgPipe02B", position + new Vector2(14 * dir, 2));
                    gun00.SetBodyType(BodyType.Dynamic);
                    gun01.SetBodyType(BodyType.Dynamic);
                    gun10.SetBodyType(BodyType.Dynamic);
                    gun11.SetBodyType(BodyType.Dynamic);
                    gun00.SetMass(0.0000001f);
                    gun01.SetMass(0.0000001f);
                    gun10.SetMass(0.0000001f);
                    gun11.SetMass(0.0000001f);
                    bodyJoint.AddTargetObject(gun00);
                    bodyJoint.AddTargetObject(gun01);
                    bodyJoint.AddTargetObject(gun10);
                    bodyJoint.AddTargetObject(gun11);
                    OtherObjects.Add(gun00);
                    OtherObjects.Add(gun01);
                    OtherObjects.Add(gun10);
                    OtherObjects.Add(gun11);
                    TTurretWeapon weapon = new TTurretWeapon
                    {
                        BulletType      = (int)ProjectileItem.UZI,
                        Sound           = "AssaultRifle",
                        ReloadingTime   = 7,
                        Ammo            = 150,
                        Scatter         = 2,
                        SuppressiveFire = true,
                        MaxFireDelay    = 30,
                        MaxBulletCount  = 3
                    };
                    WeaponList.Add(weapon);
                }
                if (id == 3)
                { //A=09?5@:0
                    IObject gun1 = GlobalGame.CreateObject("BgPipe02A", position + new Vector2((dir == -1) ? -14 : 6, 0));
                    IObject gun2 = GlobalGame.CreateObject("BgPipe02B", position + new Vector2(22 * dir, 0));
                    IObject gun3 = GlobalGame.CreateObject("BgPipe02B", position + new Vector2(7 * dir, 2));
                    gun1.SetSizeFactor(new Point(2, 1));
                    gun1.SetBodyType(BodyType.Dynamic);
                    gun2.SetBodyType(BodyType.Dynamic);
                    gun3.SetBodyType(BodyType.Dynamic);
                    gun1.SetMass(0.0000001f);
                    gun2.SetMass(0.0000001f);
                    gun3.SetMass(0.0000001f);
                    bodyJoint.AddTargetObject(gun1);
                    bodyJoint.AddTargetObject(gun2);
                    bodyJoint.AddTargetObject(gun3);
                    OtherObjects.Add(gun1);
                    OtherObjects.Add(gun2);
                    OtherObjects.Add(gun3);
                    TTurretWeapon weapon = new TTurretWeapon
                    {
                        BulletType    = (int)ProjectileItem.SNIPER,
                        Sound         = "Sniper",
                        ReloadingTime = 150,
                        Ammo          = 10,
                        Scatter       = 0
                    };
                    WeaponList.Add(weapon);
                }
                if (id == 5)
                { //>3=5<QB
                    IObject gun1 = GlobalGame.CreateObject("BgPipe02A", position + new Vector2((dir == -1) ? -14 : 6, 0));
                    IObject gun2 = GlobalGame.CreateObject("BgPipe02B", position + new Vector2(14 * dir, 0));
                    IObject gun3 = GlobalGame.CreateObject("BgPipe02B", position + new Vector2(7 * dir, 2));
                    IObject gun4 = GlobalGame.CreateObject("BgPipe02B", position + new Vector2(7 * dir, -2));
                    gun1.SetBodyType(BodyType.Dynamic);
                    gun2.SetBodyType(BodyType.Dynamic);
                    gun3.SetBodyType(BodyType.Dynamic);
                    gun4.SetBodyType(BodyType.Dynamic);
                    gun1.SetMass(0.0000001f);
                    gun2.SetMass(0.0000001f);
                    gun3.SetMass(0.0000001f);
                    gun4.SetMass(0.0000001f);
                    bodyJoint.AddTargetObject(gun1);
                    bodyJoint.AddTargetObject(gun2);
                    bodyJoint.AddTargetObject(gun3);
                    bodyJoint.AddTargetObject(gun4);
                    OtherObjects.Add(gun1);
                    OtherObjects.Add(gun2);
                    OtherObjects.Add(gun3);
                    OtherObjects.Add(gun4);
                    TTurretWeapon weapon = new TTurretWeapon
                    {
                        Distance        = 150,
                        BulletType      = -1,
                        Sound           = "Flamethrower",
                        ReloadingTime   = 3,
                        Ammo            = 300,
                        SuppressiveFire = true,
                        Scatter         = 10,
                        TurretTarget    = false
                    };
                    WeaponList.Add(weapon);
                }
                if (Id == 6)
                {
                    TTurretWeapon weapon = new TTurretWeapon
                    {
                        Distance        = 50,
                        BulletType      = -2,
                        Sound           = "Splash",
                        ReloadingTime   = 150,
                        SuppressiveFire = true,
                        Ammo            = 25,
                        TurretTarget    = false
                    };
                    WeaponList.Add(weapon);
                }
                if (Id == 7)
                {
                    TTurretWeapon weapon = new TTurretWeapon
                    {
                        Distance        = 60,
                        BulletType      = -3,
                        Sound           = "MeleeSwing",
                        ReloadingTime   = 50,
                        SuppressiveFire = true,
                        Ammo            = 15,
                        TurretTarget    = false
                    };
                    WeaponList.Add(weapon);
                }
                TextName = (IObjectText)GlobalGame.CreateObject("Text", position);
                TextName.SetTextAlignment(TextAlignment.Middle);
                TextName.SetText(Name);
                TextName.SetTextScale(0.8f);
                OtherObjects.Add(TextName);
                MainMotor = (IObjectRevoluteJoint)GlobalGame.CreateObject("RevoluteJoint", position);
                MainMotor.SetTargetObjectB(MainBlock);
                if (Id < 4)
                {
                    MainMotor.SetTargetObjectA(leftLeg);
                }
                else
                {
                    MainMotor.SetTargetObjectA(hull2);
                }
                MainMotor.SetMotorEnabled(true);
                MainMotor.SetMaxMotorTorque(100000);
                MainMotor.SetMotorSpeed(0);
                OtherObjects.Add(MainMotor);
                InitHealth();
            }
Esempio n. 5
0
        public Turret(Vector2 worldPosition, TurretDirection direction, IPlayer owner = null)
        {
            Direction   = (direction == TurretDirection.Left) ? -1 : 1;
            Owner       = owner;
            Team        = owner.GetTeam();
            IsDestroyed = false;

            var ux = Vector2.UnitX * -Direction;
            var uy = Vector2.UnitY;

            // worldPosition works best when get from TurretPlaceholder.Position
            RotationCenter = worldPosition;
            var legLeft1Position      = RotationCenter - ux * 4 + uy * 1;
            var legLeft2Position      = RotationCenter - ux * 7 - uy * 5;
            var legRight1Position     = RotationCenter + ux * 0 - uy * 5;
            var legRight2Position     = RotationCenter + ux * 4 - uy * 13;
            var legMiddle1Position    = RotationCenter - ux * 2.8f - uy * 3;
            var legMiddle2Position    = RotationCenter - ux * 2.8f - uy * 6;
            var ammoPosition          = RotationCenter + ux * 2 - uy * 2;
            var comp1Position         = RotationCenter - ux * 5 + uy * 2;
            var controllerPosition    = RotationCenter + ux * 0 + uy * 1;
            var sensorPosition        = RotationCenter + ux * 5 + uy * 2;
            var rotorPosition         = RotationCenter + ux * 0 - uy * 1;
            var barrelSolid1Position  = RotationCenter - ux * 8 - uy * 2;
            var barrelSolid2Position  = RotationCenter - ux * 16 - uy * 2;
            var barrelPosition        = RotationCenter - ux * 6 + uy * 2;
            var tipPosition           = RotationCenter - ux * 24 + uy * 0;
            var teamIndicatorPosition = RotationCenter - ux * 11f - uy * 1;

            // Object creation order is important. It will determine the z-layer the object will be located to
            var teamIndicator = Game.CreateObject("BgBottle00D", teamIndicatorPosition, -Direction * MathHelper.PIOver2);

            teamIndicator.SetColor1(GetColor(owner.GetTeam()));

            var legMiddle1 = (IObjectActivateTrigger)Game.CreateObject("Lever01", legMiddle1Position, -Direction * 0.41f);
            var legMiddle2 = (IObjectActivateTrigger)Game.CreateObject("Lever01", legMiddle2Position, -Direction * 0.41f);
            var legLeft1   = (IObjectActivateTrigger)Game.CreateObject("Lever01", legLeft1Position);
            var legLeft2   = (IObjectActivateTrigger)Game.CreateObject("Lever01", legLeft2Position);
            var legRight1  = (IObjectActivateTrigger)Game.CreateObject("Lever01", legRight1Position, MathHelper.PI);
            var legRight2  = (IObjectActivateTrigger)Game.CreateObject("Lever01", legRight2Position, MathHelper.PI);
            var ammo       = (IObjectActivateTrigger)Game.CreateObject("AmmoStash00", ammoPosition);

            var comp1 = Game.CreateObject("ItemDebrisDark00", comp1Position);

            m_controller = new Component("ItemDebrisShiny00", controllerPosition);
            m_sensor     = new Component("ItemDebrisDark00", sensorPosition);
            m_rotor      = new Component("MetalDebris00A", rotorPosition);

            var barrel1 = Game.CreateObject("MetalPlat01A", barrelSolid1Position);
            var barrel2 = Game.CreateObject("MetalPlat01B", barrelSolid2Position);

            m_barrel = new Component("JusticeStatue00Scales", barrelPosition);
            m_tip    = Game.CreateObject("LedgeGrab", tipPosition);
            m_ground = GetGround(RotationCenter);

            legMiddle1.SetEnabled(false);
            legMiddle2.SetEnabled(false);
            legLeft1.SetEnabled(false);
            legLeft2.SetEnabled(false);
            legRight1.SetEnabled(false);
            legRight2.SetEnabled(false);
            ammo.SetEnabled(false);

            legLeft1.SetFaceDirection(-Direction);
            legLeft2.SetFaceDirection(-Direction);
            legRight1.SetFaceDirection(Direction);
            legRight2.SetFaceDirection(Direction);
            legMiddle1.SetFaceDirection(-Direction);
            legMiddle2.SetFaceDirection(-Direction);

            ammo.SetFaceDirection(-Direction);
            barrel1.SetFaceDirection(-Direction);
            barrel2.SetFaceDirection(-Direction);
            m_barrel.Object.SetFaceDirection(-Direction);
            m_tip.SetFaceDirection(-Direction);
            comp1.SetFaceDirection(-Direction);
            m_controller.Object.SetFaceDirection(-Direction);
            m_sensor.Object.SetFaceDirection(-Direction);
            m_rotor.Object.SetFaceDirection(-Direction);
            teamIndicator.SetFaceDirection(-Direction);

            m_bodyJoint          = (IObjectWeldJoint)Game.CreateObject("WeldJoint");
            m_alterCollisionTile = (IObjectAlterCollisionTile)Game.CreateObject("AlterCollisionTile");

            legMiddle1.CustomID    = "TurretLegMiddle1";
            legMiddle2.CustomID    = "TurretLegMiddle2";
            legLeft1.CustomID      = "TurretLegLeft1";
            legLeft2.CustomID      = "TurretLegLeft2";
            legRight1.CustomID     = "TurretLegRight1";
            legRight2.CustomID     = "TurretLegRight2";
            ammo.CustomID          = "TurretAmmo";
            barrel1.CustomID       = "TurretBarrel1";
            barrel2.CustomID       = "TurretBarrel2";
            m_barrel.CustomID      = "TurretBarrel3";
            m_tip.CustomID         = "TurretTip";
            teamIndicator.CustomID = "TurretTeamIndicator";
            comp1.CustomID         = "TurretComp1";
            m_controller.CustomID  = "TurretController";
            m_sensor.CustomID      = "TurretSensor";
            m_rotor.CustomID       = "TurretRotor";

            m_components.Add(legMiddle1.CustomID, legMiddle1);
            m_components.Add(legMiddle2.CustomID, legMiddle2);
            m_components.Add(legLeft1.CustomID, legLeft1);
            m_components.Add(legLeft2.CustomID, legLeft2);
            m_components.Add(legRight1.CustomID, legRight1);
            m_components.Add(legRight2.CustomID, legRight2);
            m_components.Add(ammo.CustomID, ammo);
            m_components.Add(barrel1.CustomID, barrel1);
            m_components.Add(barrel2.CustomID, barrel2);
            m_components.Add(m_barrel.CustomID, m_barrel.Object);
            m_components.Add(m_tip.CustomID, m_tip);
            m_components.Add(teamIndicator.CustomID, teamIndicator);
            m_components.Add(comp1.CustomID, comp1);
            m_components.Add(m_controller.CustomID, m_controller.Object);
            m_components.Add(m_sensor.CustomID, m_sensor.Object);
            m_components.Add(m_rotor.CustomID, m_rotor.Object);

            // The reason I randomize health for each part is because bullets will likely shoot
            // through all the parts at once, so part with lowest hp will be destroyed first,
            // which is predictable, which is bad
            var healths = RandomHelper.Shuffle(new List <float>()
            {
                50, 100, 125, 150
            });

            m_barrel.MaxHealth     = healths[0];
            m_rotor.MaxHealth      = healths[1];
            m_sensor.MaxHealth     = healths[2];
            m_controller.MaxHealth = healths[3];

            m_damageableComponents.Add(m_barrel);
            m_damageableComponents.Add(m_rotor);
            m_damageableComponents.Add(m_sensor);
            m_damageableComponents.Add(m_controller);

            foreach (var dc in m_damageableComponents)
            {
                dc.RemoveWhenDestroyed = false;
            }

            foreach (var component in m_components.Values)
            {
                RegisterComponent(component);
            }

            m_alterCollisionTile.SetDisableCollisionTargetObjects(true);
            RotateTo(Direction > 0 ? 0 : MathHelper.PI);
        }