public Convoy(bool NM) { State = ConvoyState.UnderConstruction; DefendersNumber = 0; ContainersNumber = 0; Location = new Point(-1, -1); APoint = new Point(-1, -1); HPoint = new Point(-1, -1); HPNumber = -1; Path = null; MyContainer = new ConvoyContainer[2]; MyContainer[0] = null; MyContainer[1] = null; MyDefender = null; NavMission = NM; AZNChosen = false; }
//���������� ������� ��������� ������ private void SetState(MyAI _player) { //��������, ���� �� ���� if (MyDefender != null && MyDefender.HitPoint <= 0) MyDefender = null; if (MyContainer[0] != null && MyContainer[0].HitPoint <= 0) MyContainer[0] = null; if (MyContainer[1] != null && MyContainer[1].HitPoint <= 0) MyContainer[1] = null; //���� ����� ���, �� ������ ��������� if (MyDefender == null && MyContainer[0] == null && MyContainer[1] == null) { this.State = ConvoyState.UnderConstruction; this.MyDefender = null; this.MyContainer[0] = null; this.MyContainer[1] = null; this.DefendersNumber = 0; this.ContainersNumber = 0; this.HPNumber = -1; return; } //��������� ������ ��� Stock � Location this.Stock = 0; if (MyDefender != null) { this.Location = MyDefender.Location; } if (MyContainer[0] != null) { this.Location = MyContainer[0].Location; this.Stock += MyContainer[0].Stock; } if (MyContainer[1] != null) { this.Location = MyContainer[1].Location; this.Stock += MyContainer[1].Stock; } //���� HP �� ��������, �� ���������� if (this.HPNumber == -1) { //this.HPoint = _player.GetNearestHPForConvoy(this.Location, ref HPNumber); this.HPoint = _player.GetNextHPForConvoy(this.Location, ref this.HPNumber, ref this.NavMission); } //���� HP ����� ����������� ��� �������� ��� ��� ������, ����������� ����� if (HPNumber >= 0 && !IsNavigating) { if ((_player.HoshimiPoints[HPNumber].Needle == 2) || (_player.HoshimiPoints[HPNumber].Full == 1) || (_player.HoshimiPoints[HPNumber].InPast == 1 && _player.HoshimiPoints[HPNumber].Needle != 1)) { //this.HPoint = _player.GetNearestHPForConvoy(this.Location, ref HPNumber); this.HPoint = _player.GetNextHPForConvoy(this.Location, ref this.HPNumber, ref this.NavMission); this.Stop(); } } //���� Defender � ���, �� ������ � ������ � ��� if (MyDefender != null && MyDefender.State == NanoBotState.Defending) { this.State = ConvoyState.Fighting; return; } //������-������ ���������� ��-�� ����, ��� ������, ��� ���, � ��� deadlink if (MyDefender != null) { if (MyContainer[0] != null && MyContainer[1] != null) { if ((MyDefender.State == NanoBotState.WaitingOrders) && (MyContainer[0].State == NanoBotState.WaitingOrders) && (MyContainer[1].State == NanoBotState.WaitingOrders)) { this.State = ConvoyState.Waiting; } if ((MyDefender.State == NanoBotState.Moving) || (MyContainer[0].State == NanoBotState.Moving) || (MyContainer[1].State == NanoBotState.Moving)) { this.State = ConvoyState.Moving; } if ((MyContainer[0].State == NanoBotState.Collecting) || (MyContainer[1].State == NanoBotState.Collecting)) { this.State = ConvoyState.CollectingAZN; } if ((MyContainer[0].State == NanoBotState.TransferingStock) || (MyContainer[1].State == NanoBotState.TransferingStock)) { this.State = ConvoyState.TransferingAZN; } } else if (MyContainer[0] != null && MyContainer[1] == null) { if ((MyDefender.State == NanoBotState.WaitingOrders) && (MyContainer[0].State == NanoBotState.WaitingOrders)) { this.State = ConvoyState.Waiting; } if ((MyDefender.State == NanoBotState.Moving) || (MyContainer[0].State == NanoBotState.Moving)) { this.State = ConvoyState.Moving; } if (MyContainer[0].State == NanoBotState.Collecting) { this.State = ConvoyState.CollectingAZN; } if (MyContainer[0].State == NanoBotState.TransferingStock) { this.State = ConvoyState.TransferingAZN; } } else if (MyContainer[0] == null && MyContainer[1] != null) { if ((MyDefender.State == NanoBotState.WaitingOrders) && (MyContainer[1].State == NanoBotState.WaitingOrders)) { this.State = ConvoyState.Waiting; } if ((MyDefender.State == NanoBotState.Moving) || (MyContainer[1].State == NanoBotState.Moving)) { this.State = ConvoyState.Moving; } if (MyContainer[1].State == NanoBotState.Collecting) { this.State = ConvoyState.CollectingAZN; } if (MyContainer[1].State == NanoBotState.TransferingStock) { this.State = ConvoyState.TransferingAZN; } } else if (MyContainer[0] == null && MyContainer[1] == null) { if (MyDefender.State == NanoBotState.WaitingOrders) { this.State = ConvoyState.Waiting; } if (MyDefender.State == NanoBotState.Moving) { this.State = ConvoyState.Moving; } } } else { if (MyContainer[0] != null && MyContainer[1] != null) { if ((MyContainer[0].State == NanoBotState.WaitingOrders) && (MyContainer[1].State == NanoBotState.WaitingOrders)) { this.State = ConvoyState.Waiting; } if ((MyContainer[0].State == NanoBotState.Moving) || (MyContainer[1].State == NanoBotState.Moving)) { this.State = ConvoyState.Moving; } if ((MyContainer[0].State == NanoBotState.Collecting) || (MyContainer[1].State == NanoBotState.Collecting)) { this.State = ConvoyState.CollectingAZN; } if ((MyContainer[0].State == NanoBotState.TransferingStock) || (MyContainer[1].State == NanoBotState.TransferingStock)) { this.State = ConvoyState.TransferingAZN; } } else if (MyContainer[0] != null && MyContainer[1] == null) { if (MyContainer[0].State == NanoBotState.WaitingOrders) { this.State = ConvoyState.Waiting; } if (MyContainer[0].State == NanoBotState.Moving) { this.State = ConvoyState.Moving; } if (MyContainer[0].State == NanoBotState.Collecting) { this.State = ConvoyState.CollectingAZN; } if (MyContainer[0].State == NanoBotState.TransferingStock) { this.State = ConvoyState.TransferingAZN; } } else if (MyContainer[0] == null && MyContainer[1] != null) { if (MyContainer[1].State == NanoBotState.WaitingOrders) { this.State = ConvoyState.Waiting; } if (MyContainer[1].State == NanoBotState.Moving) { this.State = ConvoyState.Moving; } if (MyContainer[1].State == NanoBotState.Collecting) { this.State = ConvoyState.CollectingAZN; } if (MyContainer[1].State == NanoBotState.TransferingStock) { this.State = ConvoyState.TransferingAZN; } } else if (MyContainer[0] == null && MyContainer[1] == null) { this.State = ConvoyState.UnderConstruction; this.MyDefender = null; this.MyContainer[0] = null; this.MyContainer[1] = null; this.ContainersNumber = 0; this.DefendersNumber = 0; this.HPNumber = -1; } } }
//����������� ������ public void Delete() { if (MyDefender != null) MyDefender.ForceAutoDestruction(); if (MyContainer[0] != null) MyContainer[0].ForceAutoDestruction(); if (MyContainer[1] != null) MyContainer[1].ForceAutoDestruction(); ContainersNumber = 0; DefendersNumber = 0; State = ConvoyState.UnderConstruction; MyDefender = null; MyContainer[0] = null; MyContainer[1] = null; HPNumber = -1; }
//"�����������" ������ ���� � ������ public void AddBot(NanoBot bot) { if (this.State != ConvoyState.UnderConstruction) return; if ((bot is ConvoyDefender) && (MyDefender == null)) { MyDefender = (ConvoyDefender)bot; return; } if (bot is ConvoyContainer) { if (MyContainer[0] == null) { MyContainer[0] = (ConvoyContainer)bot; return; } if (MyContainer[1] == null) { MyContainer[1] = (ConvoyContainer)bot; return; } } }