Ejemplo n.º 1
0
        private EquipmentItem GetLongRangeScanner()
        {
            ScannerEquipmentItem result = new ScannerEquipmentItem();

            result.DisplayName    = "Webcam Scanner";
            result.Classification = ItemClassification.Scanner;
            result.UniqueId       = 4;
            result.ChargeConsumed = 10;
            result.Cooldown       = 0;
            for (int x = -5; x <= 5; x++)
            {
                for (int y = -5; y <= 20; y++)
                {
                    result.AddScannedOffsetPoint(new Point(x, y));
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        private EquipmentItem GetDefaultScanner()
        {
            ScannerEquipmentItem result = new ScannerEquipmentItem();

            result.DisplayName    = "Cobbled Together Scanner";
            result.Classification = ItemClassification.Scanner;
            result.UniqueId       = 3;
            result.ChargeConsumed = 10;
            result.Cooldown       = 0;
            for (int x = -10; x <= 10; x++)
            {
                for (int y = -10; y <= 10; y++)
                {
                    result.AddScannedOffsetPoint(new Point(x, y));
                }
            }

            return(result);
        }
Ejemplo n.º 3
0
        private EquipmentUseResult PerformEquipmentUsage(EquipmentUseRequestContext ctxt)
        {
            var bot = GetMappedBotByPublicId(ctxt.OwningBotIdentity);
            var activeEquipmentInstance = GetActiveEquipmentByInstanceId(ctxt);
            var equipTemplate           = equipment.GetEquipmentTypeById(activeEquipmentInstance.EquipmentId);

            activeEquipmentInstance.UseCount++;

            if (equipTemplate.Classification == ItemClassification.Scanner)
            {
                ScannerEquipmentItem sci = (ScannerEquipmentItem)equipTemplate;
                return(PerformScannerUsage(sci, activeEquipmentInstance, bot));
            }
            if (equipTemplate.Classification == ItemClassification.OffsensiveWeapon)
            {
                OffensiveWeaponEquipmentItem owi = (OffensiveWeaponEquipmentItem)equipTemplate;
                return(PerformFireWeapon(owi, activeEquipmentInstance, bot, ctxt));
            }
            b.Warning.Log("Unknown equipment usage type, result being returned is a dummy");
            EquipmentUseResult result = new EquipmentUseResult();

            result.State = UsageEndState.Success;
            return(result);
        }
Ejemplo n.º 4
0
        private EquipmentUseResult PerformScannerUsage(ScannerEquipmentItem equipTemplate, ActiveEquipment activeEquipmentInstance, MappedBot owningBot)
        {
            ScanEquipmentUseResult result = new ScanEquipmentUseResult();

            if (!owningBot.ConsumeCharge(equipTemplate.ChargeConsumed))
            {
                result.State = UsageEndState.Fail_NoCharge;
                return(result);
            }

            Point mapOffset = owningBot.Position;

            foreach (var vSrc in equipTemplate.GetAllScanPoints())
            {
                Point v = new Point(vSrc.X + mapOffset.X, vSrc.Y + mapOffset.Y);

                ScanTileResult str = ScanTileResult.Unscanned;
                MapTile        mt  = MapTile.DefaultGround;

                if (activeWorld.IsValidSpace(v))
                {
                    var tileOccupant = GetTileOccupantByLocation(v);
                    if (tileOccupant != null)
                    {
                        if (tileOccupant.EngineId == owningBot.EngineId)
                        {
                            str = ScanTileResult.You;
                        }
                        else
                        {
                            int ctk = CreateTemporaryScanKey(owningBot.EngineId, tileOccupant.EngineId);
                            result.AddPointOfInterest(v, ctk);
                            str = tileOccupant.IsAlive() ? ScanTileResult.Bot : ScanTileResult.Wreckage;
                        }
                    }
                    else
                    {
                        mt = activeWorld.Map.GetTileAtPosition(v);
                    }
                }
                else
                {
                    mt = MapTile.BoundaryWall1;
                }

                if (str == ScanTileResult.Unscanned)
                {
                    // If there was not an active occupant, then look to the map.
                    switch (mt)
                    {
                    case MapTile.BoundaryWall1: str = ScanTileResult.SolidWall; break;

                    case MapTile.DefaultGround: str = ScanTileResult.Unoccupied; break;

                    default: throw new BdBaseException("DEFAULT - invalid tile mapping - " + mt.ToString());
                    }
                }

                result.SetDimensions(equipTemplate.MinimumXScanned, equipTemplate.MinimumYScanned, equipTemplate.TotalWidthScanned, equipTemplate.TotalHeightScanned);
                result.SetScanResultAtPosition(vSrc, str);
            }

            return(result);
        }