public override Vector2 IdleBehavior() { base.IdleBehavior(); float idleAngle = (float)(2 * Math.PI * animationFrameCounter % 240) / 240; Vector2 idlePosition = player.Center; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingInAir, projectile); idlePosition.Y += -35 + 5 * (float)Math.Sin(idleAngle); if (!Collision.CanHit(idlePosition, 1, 1, player.Center, 1, 1)) { idlePosition = player.Center; idlePosition.X += 30 * -player.direction; idlePosition.Y += -35; } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); animationFrameCounter++; if (animationFrameCounter - reloadStartFrame == reloadCycleLength) { player.AddBuff(BuffID.Honey, 60); } return(vectorToIdlePosition); }
public override void Load() { NetHandler.Load(); NPCSets.Load(); SquireMinionTypes.Load(); NecromancerAccessory.Load(); SquireGlobalProjectile.Load(); IdleLocationSets.Load(); TargetSelectionTacticHandler.Load(); UserInterfaces.Load(); MinionTacticsGroupMapper.Load(); LandChunkConfigs.Load(); SpriteCompositionManager.Load(); CritterConfigs.Load(); AmuletOfManyMinionsWorld.Load(); CombatPetLevelTable.Load(); CombatPetBuff.Load(); DefaultPetsQuizData.Load(); CycleTacticHotKey = RegisterHotKey("Cycle Minion Tactic", "K"); CycleTacticsGroupHotKey = RegisterHotKey("Cycle Tactics Group", "L"); QuickDefendHotKey = RegisterHotKey("Minion Quick Defend", "V"); if (!Main.dedServ) { AddEquipTexture(null, EquipType.Legs, "RoyalGown_Legs", "AmuletOfManyMinions/Items/Armor/RoyalArmor/RoyalGown_Legs"); } }
public override void Unload() { NetHandler.Unload(); NPCSets.Unload(); SquireMinionTypes.Unload(); NecromancerAccessory.Unload(); SquireGlobalProjectile.Unload(); IdleLocationSets.Unload(); TargetSelectionTacticHandler.Unload(); UserInterfaces.Unload(); MinionTacticsGroupMapper.Unload(); LandChunkConfigs.Unload(); SpriteCompositionManager.Unload(); CritterConfigs.Unload(); AmuletOfManyMinionsWorld.Unload(); PartyHatSystem.Unload(); CombatPetLevelTable.Unload(); CombatPetBuff.Unload(); BlackCatMinion.Unload(); QuizResult.Unload(); DefaultPetsQuizData.Unload(); CycleTacticHotKey = null; CycleTacticsGroupHotKey = null; QuickDefendHotKey = null; }
public override Vector2 IdleBehavior() { base.IdleBehavior(); List <Projectile> minions = IdleLocationSets.GetProjectilesInSet(IdleLocationSets.trailingInAir, projectile.owner); int minionCount = minions.Count; int order = minions.IndexOf(projectile); float idleAngle = (float)(2 * Math.PI * order) / minionCount; if (minions.Count > 0) { idleAngle += (2 * (float)Math.PI * groupAnimationFrame) / groupAnimationFrames; } Vector2 idlePosition = player.Center; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(minions, projectile); idlePosition.Y += -35 + 5 * (float)Math.Sin(idleAngle); if (!Collision.CanHitLine(idlePosition, 1, 1, player.Center, 1, 1)) { idlePosition = player.Center; idlePosition.X += 30 * -player.direction; idlePosition.Y += -35; } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { Vector2 idlePosition = player.Top; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingInAir, projectile); idlePosition.Y += -5; if (!Collision.CanHitLine(idlePosition, 1, 1, player.Center, 1, 1)) { idlePosition = player.Center; } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { base.IdleBehavior(); Vector2 idlePosition = player.Top; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingInAir, projectile); idlePosition.Y += -24 + 8 * (float)Math.Sin(MathHelper.TwoPi * (animationFrame % 120) / 120); Vector2 vectorToIdlePosition = idlePosition - projectile.Center; if (!Collision.CanHitLine(idlePosition, 1, 1, player.Center, 1, 1)) { idlePosition.X = player.Top.X; idlePosition.Y = player.Top.Y - 16; } TeleportToPlayer(ref vectorToIdlePosition, 2000f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { gHelper.SetIsOnGround(); // the ground-based minions can sometimes jump/bounce to get themselves unstuck // , but the flying versions can't noLOSPursuitTime = gHelper.isFlying ? 15 : 300; Vector2 idlePosition = player.Center; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingOnGround, projectile); if (!Collision.CanHitLine(idlePosition, 1, 1, player.Center, 1, 1)) { idlePosition = player.Center; } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { base.IdleBehavior(); Vector2 idlePosition = player.Center; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingInAir, projectile); idlePosition.Y += -5 * projectile.minionPos; if (!Collision.CanHitLine(idlePosition, 1, 1, player.Center, 1, 1)) { idlePosition.X = player.Center.X + 20 * -player.direction; idlePosition.Y = player.Center.Y - 5; } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); Lighting.AddLight(projectile.Center, Color.LightYellow.ToVector3() * 0.125f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { Vector2 idlePosition = player.Top; projectile.ai[0] = (projectile.ai[0] + 1) % animationFrames; float idleAngle = (float)Math.PI * 2 * projectile.ai[0] / animationFrames; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingInAir, projectile); idlePosition.Y += -5 + 8 * (float)Math.Sin(idleAngle); if (!Collision.CanHitLine(idlePosition, 1, 1, player.Center, 1, 1)) { idlePosition = player.Center; } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { base.IdleBehavior(); Vector2 idlePosition = player.Top; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingInAir, projectile); idlePosition.Y += -8; animationFrame += 1; if (!Collision.CanHitLine(idlePosition, 1, 1, player.Center, 1, 1)) { idlePosition.X = player.Top.X; idlePosition.Y = player.Top.Y - 16; } idlePosition.Y += 4 * (float)Math.Sin(animationFrame / 32f); Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); Lighting.AddLight(projectile.Center, Color.Red.ToVector3() * 0.25f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { base.IdleBehavior(); List <Projectile> minions = IdleLocationSets.GetProjectilesInSet(IdleLocationSets.circlingBody, player.whoAmI); Vector2 idlePosition = player.Center; if (minions.Count > 0) { int minionCount = minions.Count; int order = minions.IndexOf(projectile); idleAngle = (float)(MathHelper.TwoPi * order) / minionCount; idleAngle += (MathHelper.TwoPi * groupAnimationFrame) / groupAnimationFrames; idlePosition.X += 2 + 30 * (float)Math.Cos(idleAngle); idlePosition.Y += -12 + 5 * (float)Math.Sin(idleAngle); } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { base.IdleBehavior(); hsHelper.firedProjectileId = (leveledPetPlayer?.PetLevel ?? 0) >= (int)CombatPetTier.Spectre ? ProjectileType <TwisterProjectile>() : ProjectileType <CloudPuffProjectile>(); float idleAngle = (MathHelper.TwoPi * animationFrame % 240) / 240; Vector2 idlePosition = player.Center; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingInAir, Projectile); idlePosition.Y += -35 + 5 * (float)Math.Sin(idleAngle); if (!Collision.CanHit(idlePosition, 1, 1, player.Center, 1, 1)) { idlePosition = player.Center; idlePosition.X += 30 * -player.direction; idlePosition.Y += -35; } Vector2 vectorToIdlePosition = idlePosition - Projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { base.IdleBehavior(); noLOSPursuitTime = gHelper.isFlying ? 15 : 300; Vector2 idlePosition = gHelper.isFlying ? player.Top : player.Bottom; Vector2 idleHitLine = player.Center; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingOnGround, projectile); if (!Collision.CanHitLine(idleHitLine, 1, 1, player.Center, 1, 1)) { idlePosition = player.Bottom; } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); gHelper.SetIsOnGround(); if (gHelper.offTheGroundFrames == 20 || (gHelper.offTheGroundFrames > 60 && Main.rand.Next(120) == 0) || (gHelper.isOnGround && gHelper.offTheGroundFrames > 20)) { DrawPlatformDust(); } Lighting.AddLight(projectile.Center, Color.PaleGreen.ToVector3() * 0.75f); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { base.IdleBehavior(); Vector2 idlePosition = player.Top; float idleAngle = (float)Math.PI * 2 * (animationFrame % animationFrames) / animationFrames; idlePosition.X += -player.direction * IdleLocationSets.GetXOffsetInSet(IdleLocationSets.trailingInAir, projectile); idlePosition.Y += -5 + 8 * (float)Math.Sin(idleAngle); if (!Collision.CanHit(idlePosition, 1, 1, player.Top, 1, 1)) { idlePosition.X = player.Top.X; } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); Lighting.AddLight(projectile.Center, Color.Red.ToVector3() * 0.5f); int headType = ProjectileType <CharredChimeraMinionHead>(); int currentHeadCount = player.ownedProjectileCounts[headType]; if (Main.myPlayer == player.whoAmI) { for (int i = currentHeadCount; i < EmpowerCount + 1; i++) { Projectile.NewProjectile(projectile.Center, projectile.velocity, headType, projectile.damage, projectile.knockBack, player.whoAmI); } if (currentHeadCount > EmpowerCount + 1) { allHeads = GetMinionsOfType(ProjectileType <CharredChimeraMinionHead>()); allHeads[0].Kill(); // get rid of a head if there's too many } } allHeads = GetMinionsOfType(ProjectileType <CharredChimeraMinionHead>()); TellHeadsToAttack(); PositionHeads(); return(vectorToIdlePosition); }
public override Vector2 IdleBehavior() { base.IdleBehavior(); wormDrawer.SegmentCount = GetSegmentCount(); List <Projectile> minions = IdleLocationSets.GetProjectilesInSet(IdleLocationSets.circlingHead, player.whoAmI); int minionCount = minions.Count; Vector2 idlePosition = player.Top; // this was silently failing sometimes, don't know why if (minionCount > 0) { int radius = player.velocity.Length() < 4 ? 48 + 2 * EmpowerCount : 48; float yRadius = player.velocity.Length() < 4 ? 8 + 0.5f * EmpowerCount : 8; int order = minions.IndexOf(projectile); float idleAngle = (2 * PI * order) / minionCount; idleAngle += 2 * PI * groupAnimationFrame / groupAnimationFrames; idlePosition.X += radius * (float)Math.Cos(idleAngle); idlePosition.Y += -20 + EmpowerCount + yRadius * (float)Math.Sin(idleAngle); } Vector2 vectorToIdlePosition = idlePosition - projectile.Center; TeleportToPlayer(ref vectorToIdlePosition, 2000f); return(vectorToIdlePosition); }
public virtual List <Projectile> GetIdleSpaceSharingMinions() { return(MyGetIdleSpaceSharingMinions?.Invoke() ?? IdleLocationSets.GetProjectilesInSet(IdleLocationSets.circlingHead, player.whoAmI)); }