public override PirateLogic DefenseBaseLogic() { AsteroidDodger dodger = new AsteroidDodger(); PirateLogic logic = new PirateLogic(dodger); return(logic); }
public PirateLogic BaseLogic() { AsteroidDodger dodger = new AsteroidDodger(); PirateLogic logic = new PirateLogic(dodger); return(logic); }
public LogicedPirateSquad[] LogicDefenders(Squad squad) { #region Distrbution if (squad.Count <= 0) { return(new LogicedPirateSquad[0]); } int EnemyMotherships = Bot.Engine.EnemyMotherships.Length; #endregion Distrbution PirateLogic BaseLogic = DefenseBaseLogic(); LogicedPirateSquad[] Squads = new LogicedPirateSquad[0]; for (int idx = 0; idx < EnemyMotherships; idx++) { Mothership Target = Bot.Engine.EnemyMotherships[idx]; Squad CurrentSquad = squad.Take(Deploy(Target)).ToList(); squad = squad.FilterOutBySquad(CurrentSquad); if (CurrentSquad.Count <= 0) { continue; } LogicedPirateSquad LogicedCurrentSquad = new LogicedPirateSquad(CurrentSquad.Select(x => x.LogicPirate(BaseLogic)).ToArray(), DefenseLogic(Target)); Squads = Squads.Concat(new LogicedPirateSquad[] { LogicedCurrentSquad }).ToArray(); } return(Squads); }
//////////////// public bool GiveOffer(long offerAmount) { var logic = PirateLogic.Instance; if (this.OfferTested == -1) { this.OfferTested = offerAmount; HaggleAmount replyType = PirateLogic.GaugeOffer(logic.ComputedDemand, offerAmount); Main.npcChatText = PirateNegotiatorTownNPC.HaggleReplies[replyType]; } else { HaggleAmount replyType = PirateLogic.GaugeOffer(logic.ComputedDemand, offerAmount); Main.npcChatText = PirateNegotiatorTownNPC.OfferReplies[replyType]; if (this.OfferTested > offerAmount) { Main.npcChatText += "\n " + PirateNegotiatorTownNPC.OfferReduceReply; } this.OfferAmount = offerAmount; } return(this.OfferAmount > 0); }
/// <summary> /// Creates a new generation by using GenerateBoxes and GenerateBoats/Pirates. /// Previous generations will be removed and the best parents will be selected and used to create the new generation. /// The best parents (top 1) of the generation will be stored as a Prefab in the [savePrefabsAt] folder. Their name /// will use the [generationCount] as an identifier. /// </summary> public void MakeNewGeneration() { GenerateBoxes(); //Fetch parents _activeBoats.RemoveAll(item => item == null); _activeBoats.Sort(); Vector3 shipData = GetShipData(); if (_activeBoats.Count == 0) { GenerateBoats(_boatParents); } _boatParents = new BoatLogic[boatParentSize]; for (int i = 0; i < boatParentSize; i++) { _boatParents[i] = _activeBoats[i]; } BoatLogic lastBoatWinner = _activeBoats[0]; lastBoatWinner.name += "Gen-" + generationCount; lastBoatWinnerData = lastBoatWinner.GetData(); PrefabUtility.SaveAsPrefabAsset(lastBoatWinner.gameObject, savePrefabsAt + lastBoatWinner.name + ".prefab"); _activePirates.RemoveAll(item => item == null); _activePirates.Sort(); Vector3 pirateData = GetPirateData(); _pirateParents = new PirateLogic[pirateParentSize]; for (int i = 0; i < pirateParentSize; i++) { _pirateParents[i] = _activePirates[i]; } PirateLogic lastPirateWinner = _activePirates[0]; lastPirateWinner.name += "Gen-" + generationCount; lastPirateWinnerData = lastPirateWinner.GetData(); PrefabUtility.SaveAsPrefabAsset(lastPirateWinner.gameObject, savePrefabsAt + lastPirateWinner.name + ".prefab"); _dataCollector.AddData(shipData, pirateData); //Winners: Debug.Log("Last winner boat had: " + lastBoatWinner.GetPoints() + " points!" + " Last winner pirate had: " + lastPirateWinner.GetPoints() + " points!"); GenerateObjects(_boatParents, _pirateParents); }
public LogicedPirateSquad[] LogicAttackers(Squad squad) { #region Distrbution if (squad.Count <= 0) { return(new LogicedPirateSquad[0]); } int Mines = Bot.Engine.MyCapsules.Length; #endregion Distrbution PirateLogic BaseLogic = AttackBaseLogic(); LogicedPirateSquad[] Squads = new LogicedPirateSquad[0]; for (int idx = 0; idx < Mines; idx++) { Capsule Target = Bot.Engine.MyCapsules[idx]; Squad CurrentSquad = squad.Take(Deploy(Target)).ToList(); squad = squad.FilterOutBySquad(CurrentSquad); if (CurrentSquad.Count <= 0) { continue; } SquadLogic ChaserLogic = CapsuleChaserLogic(Target); SquadLogic CamperLogic = CapsuleCamperLogic(Target); LogicedPirateSquad[] LogicedCurrentSquads; if (Target.IsHeld() && CurrentSquad.ContainsPirate(Target.Holder) && CurrentSquad.LivingPirates().Count > 2) { Squad CapsuleChasers = new Squad(CurrentSquad.LivingPirates().FilterOutById(Target.Holder.Id).OrderBy(x => System.Math.Max(x.PushReloadTurns, x.TurnsToReach(Target))).Take(Target.Holder.NumPushesForCapsuleLoss - 1)).AddPirates((PirateShip)Target.Holder); Squad CapsuleCampers = CurrentSquad.FilterOutBySquad(CapsuleChasers); LogicedCurrentSquads = new LogicedPirateSquad[] { new LogicedPirateSquad(CapsuleCampers.Select(x => x.LogicPirate(BaseLogic)).ToArray(), CamperLogic), new LogicedPirateSquad(CapsuleChasers.Select(x => x.LogicPirate(BaseLogic)).ToArray(), ChaserLogic) }; } else { LogicedCurrentSquads = new LogicedPirateSquad[] { new LogicedPirateSquad(CurrentSquad.Select(x => x.LogicPirate(BaseLogic)).ToArray(), ChaserLogic) }; } Squads = Squads.Concat(LogicedCurrentSquads).ToArray(); } return(Squads); }
public LogicedPirateSquad[] AssignSquads(PirateShip[] pirates) { int Count = Bot.Engine.MyPirates.Count; int AttackSize = Count / 2 + Count % 2; Squad AttackSquad = new Squad(pirates).Filter(x => x.Id < Count); Squad DefenseSquad = new Squad(pirates).Filter(x => x.Id >= Count); PirateLogic BaseLogic = this.BaseLogic(); SquadLogic AttackLogic = this.AttackLogic(); SquadLogic DefenseLogic = this.DefenseLogic(); LogicedPirateSquad LogicedAttackSquad = new LogicedPirateSquad(AttackSquad.Select(x => x.LogicPirate(BaseLogic)).ToArray(), AttackLogic); LogicedPirateSquad LogicedDefenseSquad = new LogicedPirateSquad(AttackSquad.Select(x => x.LogicPirate(BaseLogic)).ToArray(), DefenseLogic); return(new LogicedPirateSquad[] { LogicedAttackSquad, LogicedDefenseSquad }); }
//Similarly generate abled pirates private void GenerateAbledPirates(PirateLogic[] abledPirateParents) { _activeAbledPirates = new List <PirateLogic>(); List <GameObject> objects = abledPirateGenerator.RegenerateObjects(); foreach (GameObject obj in objects) { PirateLogic pirate = obj.GetComponent <PirateLogic>(); if (pirate != null) { _activeAbledPirates.Add(pirate); if (abledPirateParents != null) { PirateLogic pirateParent = abledPirateParents[Random.Range(0, abledPirateParents.Length)]; pirate.Birth(pirateParent.GetData()); } pirate.Mutate(mutationFactor, mutationChance); pirate.AwakeUp(); } } }
private void GeneratePiratesArithmeticCrossover(PirateLogic[] pirateParents) { _activePirates = new List <PirateLogic>(); List <GameObject> objects = pirateGenerator.RegenerateObjects(); foreach (GameObject obj in objects) { PirateLogic pirate = obj.GetComponent <PirateLogic>(); if (pirate != null) { _activePirates.Add(pirate); if (pirateParents != null) { PirateLogic firstPirateParent = pirateParents[Random.Range(0, pirateParents.Length)]; PirateLogic secondPirateParent = pirateParents[Random.Range(0, pirateParents.Length)]; pirate.BirthArithmeticCrossover(firstPirateParent.GetData(), secondPirateParent.GetData()); } pirate.Mutate(mutationFactor, mutationChance); pirate.AwakeUp(); } } }
public LogicedPirateSquad[] AssignSquads(PirateShip[] pirates) { // Private cases if (Bot.Engine.Enemy.BotName == "25767") { DefensePushMapper = (obj, attackers) => { PushMapping pm = (obj is Pirate && ((Pirate)obj).HasCapsule()) ? Bot.Engine.DefaultPush(obj, attackers, true) : Bot.Engine.DefaultPush(obj, attackers); return(new PushMapping(pm.attackers, new Location(Bot.Engine.Rows - pm.dest.Row, Bot.Engine.Cols - pm.dest.Col))); } } ; // Initialize BaseLogic AttackBaseLogic = new PirateLogic().AttachPlugin(new Week3Custom.EtgarimWeek3Plugin()).AttachPlugin(new AsteroidDodger((ast, p) => { /* * Location nm = Bot.Engine.MyMotherships.Nearest(p).Location; * Line l = new Line(ast, nm); * return l.IsProjectionOnLine(p) ? AsteroidDodger.TangentPush(ast, p) : nm; */ Squad PossibleTargets = Bot.Engine.EnemyLivingPirates.Filter(enemy => { Line l = new Line(enemy, ast); bool ShouldPush = !l.IsProjectionOnLine(p) || l.Distance(p) > ast.Size * 1.5; return(ShouldPush); }); if (!PossibleTargets.IsEmpty()) { return(PossibleTargets.FirstBy(x => x.Distance(ast)).Location); } else { return(AsteroidDodger.TangentPush(ast, p)); } } )) .AttachPlugin(new EmergencyCapsulePusherPlugin()).AttachPlugin(new PortalOptimizer()); DefenseBaseLogic = new PirateLogic().AttachPlugin(new Week3Custom.EtgarimWeek3Plugin()).AttachPlugin(new AsteroidDodger((ast, p) => { Squad PossibleTargets = Bot.Engine.EnemyLivingPirates.Filter(enemy => { Line l = new Line(enemy, ast); bool ShouldPush = !l.IsProjectionOnLine(p) || l.Distance(p) > ast.Size * 1.5; return(ShouldPush); }); if (!PossibleTargets.IsEmpty()) { return(PossibleTargets.FirstBy(x => x.Distance(ast)).Location); } else { return(AsteroidDodger.TangentPush(ast, p)); } })) .AttachPlugin(new EmergencyCapsulePusherPlugin()); // Not good practice pirates = Bot.Engine.MyPirates.ToArray(); Tuple <int, int> Sizes = AssignSizes(); int AttackSize = Sizes.arg0; int DefenseSize = Sizes.arg1; Squad AttackSquad = new Squad(pirates.Where(x => x.Id < AttackSize)); Squad DefenseSquad = new Squad(pirates.Where(x => x.Id >= AttackSize)); LogicedPirateSquad[] AttackerPirates = LogicAttackers(AttackSquad); LogicedPirateSquad[] DefenderPirates = LogicDefenders(DefenseSquad); Bot.Engine.Debug("Testing pirates..."); // Not good practice return(AttackerPirates.Concat(DefenderPirates).Select(x => { Bot.Engine.Debug(new Squad(x.LogicedPirates.Select(y => y.pirate))); return new LogicedPirateSquad(x.LogicedPirates.Where(y => y.pirate.Alive).ToArray(), x.Logic); }).ToArray()); }
/// <summary> /// Creates a new generation by using GenerateBoxes and GenerateBoats/Pirates. /// Previous generations will be removed and the best parents will be selected and used to create the new generation. /// The best parents (top 1) of the generation will be stored as a Prefab in the [savePrefabsAt] folder. Their name /// will use the [generationCount] as an identifier. /// </summary> public void MakeNewGeneration() { GenerateBoxes(); //Fetch parents _activeBoats.RemoveAll(item => item == null); _activeBoats.Sort(); if (_activeBoats.Count == 0) { GenerateBoats(_boatParents); } _boatParents = new BoatLogic[boatParentSize]; for (int i = 0; i < boatParentSize; i++) { _boatParents[i] = _activeBoats[i]; } BoatLogic lastBoatWinner = _activeBoats[0]; lastBoatWinner.name += "Gen-" + generationCount; lastBoatWinnerData = lastBoatWinner.GetData(); PrefabUtility.SaveAsPrefabAsset(lastBoatWinner.gameObject, savePrefabsAt + lastBoatWinner.name + ".prefab"); boatRoundScores = 0; foreach (BoatLogic boat in _activeBoats) { boatRoundScores += boat.GetPoints(); } boatTotalScores += boatRoundScores; _activePirates.RemoveAll(item => item == null); _activePirates.Sort(); _pirateParents = new PirateLogic[pirateParentSize]; for (int i = 0; i < pirateParentSize; i++) { _pirateParents[i] = _activePirates[i]; } PirateLogic lastPirateWinner = _activePirates[0]; pirateRoundScores = 0; foreach (PirateLogic pirate in _activePirates) { pirateRoundScores += pirate.GetPoints(); } pirateTotalScores += pirateRoundScores; lastPirateWinner.name += "Gen-" + generationCount; lastPirateWinnerData = lastPirateWinner.GetData(); PrefabUtility.SaveAsPrefabAsset(lastPirateWinner.gameObject, savePrefabsAt + lastPirateWinner.name + ".prefab"); //Winners: //Storing results string path = "Assets/Overallresults.txt"; //Write some text to the test.txt file StreamWriter writer = new StreamWriter(path, true); writer.WriteLine("Generations count" + generationCount + "||Total boats:" + boatTotalScores + "||TotalPiratesScores:" + pirateTotalScores); writer.Close(); path = "Assets/BoatsTotalScores.txt"; writer = new StreamWriter(path, true); writer.WriteLine(boatTotalScores); writer.Close(); path = "Assets/PiratesTotalScores.txt"; writer = new StreamWriter(path, true); writer.WriteLine(pirateTotalScores); writer.Close(); path = "Assets/BoatsRoundScores.txt"; writer = new StreamWriter(path, true); writer.WriteLine(boatRoundScores); writer.Close(); path = "Assets/PiratesRoundScores.txt"; writer = new StreamWriter(path, true); writer.WriteLine(pirateRoundScores); writer.Close(); Debug.Log("Last winner boat had: " + lastBoatWinner.GetPoints() + " points!" + " Last winner pirate had: " + lastPirateWinner.GetPoints() + " points!"); Debug.Log("Total boats:" + boatTotalScores + "||Round boats:" + boatRoundScores + "||TotalPiratesScores:" + pirateTotalScores + "||PiratesRoundScores" + pirateRoundScores); GenerateObjects(_boatParents, _pirateParents); }
//////////////// public override void OnInitialize() { var logic = PDYBWorld.PirateLogic; float xOffset = 8f; float yOffset = 0f; this.InitializeCoinInput( "Platinum coins", MiscHelpers.PlatinumCoinColor, v => this.SetValue(v, ItemID.PlatinumCoin), ref xOffset, ref yOffset); this.InitializeCoinInput( "Gold coins", MiscHelpers.GoldCoinColor, v => this.SetValue(v, ItemID.GoldCoin), ref xOffset, ref yOffset); this.InitializeCoinInput( "Silver coins", MiscHelpers.SilverCoinColor, v => this.SetValue(v, ItemID.SilverCoin), ref xOffset, ref yOffset); this.InitializeCoinInput( "Copper coins", MiscHelpers.CopperCoinColor, v => this.SetValue(v, ItemID.CopperCoin), ref xOffset, ref yOffset); yOffset += 72f; this.OfferButtonElem = new UITextPanelButton(this.Theme, "Test Offer"); this.OfferButtonElem.Left.Set(8f, 0f); this.OfferButtonElem.Top.Set(yOffset, 0f); this.OfferButtonElem.OnClick += (_, __) => { foreach (var toggleable in this.Components) { var input = toggleable as UITextInputAreaPanel; if (input?.HasFocus ?? false) { input.Unfocus(); } } this.MakeOffer(); }; string unit = PirateLogic.GetHighestCoinTypeOfGivenDemand(logic.ComputedDemand, out bool tensOf); string range = tensOf ? "10-99" : "0-10"; var titleElem = new UIThemedText(this.Theme, false, "Pirate hints at " + range + " " + unit); titleElem.Left.Set(-256f, 1f); titleElem.Top.Set(yOffset, 0f); this.AppendThemed(titleElem); this.AppendThemed(this.OfferButtonElem); this.Components.Add(this.OfferButtonElem); this.Close(); }
public LogicedPirate LogicPirate(PirateLogic logic) { return(new LogicedPirate(this, logic)); }
public LogicedPirate(PirateShip s, PirateLogic logic) { this.pirate = s; this.logic = logic; }