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); }
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(); }
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); }