Exemplo n.º 1
0
 public float GetMass(ItemInstance item)
 {
     return(item switch
     {
         CraftedItemInstance _ => item.Data.Value.Mass,
         SimpleCommodity commodity => item.Data.Value.Mass *commodity.Quantity,
         _ => 0
     });
    void OnPickup()
    {
        var haulingTask = _context.Cache.Get <HaulingTask>(Task);
        var target      = _context.ZoneEntities[_entity.Zone][haulingTask.Origin] as OrbitalEntity;

        _context.SetParent(_entity, target);
        var itemData = _context.Cache.Get <ItemData>(haulingTask.ItemType);
        int quantity = min((int)((_entity.Capacity - _entity.OccupiedCapacity) / itemData.Size), haulingTask.Quantity - _itemsDelivered);

        if (itemData is SimpleCommodityData)
        {
            var itemMatch = target.Cargo
                            .Select(id => _context.Cache.Get <SimpleCommodity>(id))
                            .FirstOrDefault(ii => ii != null && ii.Data == haulingTask.ItemType);
            if (itemMatch == null)
            {
                FinishTask();
            }
            _simpleCommodityDelivery = _entity.AddCargo(target.RemoveCargo(itemMatch, quantity));
        }
        else if (itemData is CraftedItemData)
        {
            var itemMatches = target.Cargo
                              .Select(id => _context.Cache.Get <CraftedItemInstance>(id))
                              .Where(ii => ii != null && ii.Data == haulingTask.ItemType)
                              .ToArray();
            if (!itemMatches.Any())
            {
                FinishTask();
            }
            foreach (var match in itemMatches)
            {
                _craftedItemDelivery.Add(_entity.AddCargo(target.RemoveCargo(match)));
            }
        }
        Wait(_data.DockTime, OnItemObtained);
    }
    void OnDelivery()
    {
        var haulingTask = _context.Cache.Get <HaulingTask>(Task);
        var target      = _context.ZoneEntities[_entity.Zone][haulingTask.Target] as OrbitalEntity;

        _context.SetParent(_entity, target);

        var itemData = _context.Cache.Get <ItemData>(haulingTask.ItemType);

        if (itemData is SimpleCommodityData)
        {
            target.AddCargo(_entity.RemoveCargo(_simpleCommodityDelivery, _simpleCommodityDelivery.Quantity));
            _itemsDelivered         += _simpleCommodityDelivery.Quantity;
            _simpleCommodityDelivery = null;
        }
        else if (itemData is CraftedItemData)
        {
            foreach (var item in _craftedItemDelivery)
            {
                target.AddCargo(_entity.RemoveCargo(item));
            }
            _itemsDelivered += _craftedItemDelivery.Count;
            _craftedItemDelivery.Clear();
        }

        Wait(_data.DockTime, () =>
        {
            if (_itemsDelivered == haulingTask.Quantity)
            {
                FinishTask();
            }
            else
            {
                _taskStarted = false;
            }
        });
    }
Exemplo n.º 4
0
    // public void Update()
    // {
    //     foreach(var zone in _zones.Values)
    //         zone.Update((float) Time, _deltaTime);
    //
    //     foreach (var corporation in Cache.GetAll<Corporation>())
    //     {
    //         foreach (var tasks in corporation.Tasks
    //             .Select(id => Cache.Get<AgentTask>(id)) // Fetch the tasks from the database cache
    //             .Where(task => !task.Reserved) // Filter out tasks that have already been reserved
    //             .GroupBy(task => task.Type)) // Group tasks by type
    //         {
    //             // Create a list of available controllers for this task type
    //             var availableControllers = CorporationControllers[corporation.ID]
    //                 .Where(controller => controller.Available && controller.TaskType == tasks.Key).ToList();
    //
    //             // Iterate over the highest priority tasks for which controllers are available
    //             foreach (var task in tasks.OrderByDescending(task => task.Priority).Take(availableControllers.Count))
    //             {
    //                 // Find the nearest controller for this task
    //                 IController nearestController = availableControllers[0];
    //                 List<ZoneDefinition> nearestControllerPath = FindPath(GalaxyZones[availableControllers.First().Zone.Data.ID], GalaxyZones[task.Zone], true);
    //                 foreach (var controller in availableControllers.Skip(1))
    //                 {
    //                     var path = FindPath(GalaxyZones[controller.Zone.Data.ID], GalaxyZones[task.Zone], true);
    //                     if (path.Count < nearestControllerPath.Count)
    //                     {
    //                         nearestControllerPath = path;
    //                         nearestController = controller;
    //                     }
    //                 }
    //                 task.Reserved = true;
    //                 nearestController.AssignTask(task.ID);
    //             }
    //         }
    //     }
    //
    // }

    // public int ItemTier(CraftedItemData itemData)
    // {
    //     if (Tier.ContainsKey(itemData)) return Tier[itemData];
    //
    //     Tier[itemData] = itemData.Ingredients.Keys.Max(ci => _cache.Get<ItemData>(ci) is CraftedItemData craftableIngredient ? ItemTier(craftableIngredient) : 0);
    //
    //     return Tier[itemData];
    // }

    public SimpleCommodityData GetData(SimpleCommodity item)
    {
        return(item.Data.Value as SimpleCommodityData);
    }