public void SendDroneToResBox(ResourcesBox rbox)
    {
        if (rbox == null)
        {
            return;
        }
        CargoDrone drone = null;

        foreach (CargoDrone c in transportDrones)
        {
            if (c.gameObject.activeSelf == false || c.target == null)
            {
                drone = c; break;
            }
        }
        if (drone == null)
        {
            drone = transportDrones[(int)Random.value * (transportDrones.Length - 1)];
        }
        if (drone != null)
        {
            drone.target = rbox;
            if (!drone.gameObject.activeSelf)
            {
                drone.transform.position = transform.TransformPoint(droneHangarPos);
                drone.gameObject.SetActive(true);
            }
            drone.changeDestinationAfterHaul = true;
        }
    }
Example #2
0
        public void FormatResources(GlobalData data)
        {
            if (data.Inventory == null)
            {
                return;
            }

            ResourcesBox.Update();
        }
 public void RemoveLootPoint(ResourcesBox rb)
 {
     if (rb == null || plannedLootPoints == null || plannedLootPoints.Count == 0)
     {
         return;
     }
     for (int i = 0; i < plannedLootPoints.Count; i++)
     {
         if (plannedLootPoints[i] == rb)
         {
             plannedLootPoints[i].isActiveLootPoint = false; plannedLootPoints.RemoveAt(i);
         }
     }
 }
    public ResourcesBox GetLootPoint()
    {
        if (plannedLootPoints == null || plannedLootPoints.Count == 0)
        {
            return(null);
        }
        ResourcesBox answer = null;

        for (int i = 0; i < plannedLootPoints.Count; i++)
        {
            if (plannedLootPoints[i].BitmasksConjuction() == 0)
            {
                plannedLootPoints[i].isActiveLootPoint = false; plannedLootPoints.RemoveAt(i);
            }
            else
            {
                answer = plannedLootPoints[i]; break;
            }
        }
        return(answer);
    }
 void Update()
 {
     if (GameMaster.isPaused() || depot == null)
     {
         return;
     }
     if (timer > 0)
     {
         timer -= Time.deltaTime; myRenderer.enabled = true; return;
     }
     if (content != null)
     {
         if (Vector3.Distance(transform.position, depot.transform.position) < CONTACT_DISTANCE)
         {
             if (depot.LoadItemFromDrone(content) == true)
             {
                 content            = null;
                 timer              = UNLOAD_SPEED;
                 myRenderer.enabled = false;
             }
         }
         else              //плыть к носителю
         {
             transform.rotation = Quaternion.LookRotation(depot.transform.position - transform.position, Vector3.up);
             float dist = Vector3.Distance(transform.position, depot.transform.position);
             if (dist < speed * Time.deltaTime)
             {
                 transform.Translate(Vector3.forward * dist);
             }
             else
             {
                 transform.Translate(Vector3.forward * speed * Time.deltaTime);
             }
         }
     }
     else           //пустой
     {
         if (target != null && target.isActiveLootPoint)
         {
             // плыть к "руднику"
             if (Vector3.Distance(transform.position, target.transform.position) < CONTACT_DISTANCE)          //грузим на борт
             {
                 content = target.Extract();
                 if (content != null)
                 {
                     timer = target.extractionSpeed;
                     myRenderer.enabled = false;
                 }
                 else
                 {
                     target = null;
                 }
                 if (changeDestinationAfterHaul)
                 {
                     target = depot.GetLootPoint();
                     changeDestinationAfterHaul = false;
                 }
             }
             else
             {
                 transform.rotation = Quaternion.LookRotation(target.transform.position - transform.position, Vector3.up);
                 float dist = Vector3.Distance(transform.position, target.transform.position);
                 if (dist < speed * Time.deltaTime)
                 {
                     transform.Translate(Vector3.forward * dist);
                 }
                 else
                 {
                     transform.Translate(Vector3.forward * speed * Time.deltaTime);
                 }
             }
         }
         else               // нет цели
         {
             target = depot.GetLootPoint();
             if (target == null)
             {
                 if (Vector3.Distance(transform.position, depot.transform.position) < CONTACT_DISTANCE)
                 {
                     timer = 0;
                     gameObject.SetActive(false);
                 }
                 else                      //плыть к носителю
                 {
                     transform.rotation = Quaternion.LookRotation(depot.transform.position - transform.position, Vector3.up);
                     float dist = Vector3.Distance(transform.position, depot.transform.position);
                     if (dist < speed * Time.deltaTime)
                     {
                         transform.Translate(Vector3.forward * dist);
                     }
                     else
                     {
                         transform.Translate(Vector3.forward * speed * Time.deltaTime);
                     }
                 }
             }
         }
     }
 }
Example #6
0
    void Update()
    {
        if (GameMaster.isPaused())
        {
            return;
        }

        sw         = Screen.width; sh = Screen.height;
        k          = sh / 24; GameMaster.SetGUIPiece(k);
        mousePos   = Input.mousePosition;
        mousePos.y = sh - mousePos.y;

        if (GameMaster.isPaused())
        {
            return;
        }
        if (Input.GetMouseButtonDown(0))
        {
            Ray        r = Camera.main.ScreenPointToRay(new Vector3(Input.mousePosition.x, Input.mousePosition.y));
            RaycastHit rh;
            var        waterLayerMask = 1 << 4;     //water layer
            waterLayerMask = ~waterLayerMask;
            if (Physics.Raycast(r, out rh, PlayerController.player.shortRangeScanner, waterLayerMask))
            {
                GameObject target = rh.collider.transform.root.gameObject;
                chosenResBox = target.GetComponent <ResourcesBox>();
                if (chosenResBox != null)
                {
                    updateResBoxData = true;
                }
            }
        }

        if (Input.GetKeyDown("m"))
        {
            if (mapIsActive)
            {
                foreach (GameObject g in mapCells)
                {
                    g.SetActive(false);
                }
                shipMarker.SetActive(false);
                mapIsActive = false;
            }
            else
            {
                if (mapCells == null)
                {
                    GameMaster.designer.CreateMap(ref mapCells, UI_RENDER_LAYER, out distanceCoefficient);
                    shipMarker = Instantiate(Resources.Load <GameObject>("shipMarker_pref")) as GameObject;
                    shipMarker.transform.parent = UI_camera;
                    //shipMarker.transform.localScale = Vector3.one * radius;
                    shipMarker.transform.localRotation = Quaternion.Euler(0, 0, PlayerController.player.transform.rotation.eulerAngles.y * (-1));
                    shipMarker.layer = UI_RENDER_LAYER;
                    shipMarker.SetActive(false);
                }
                foreach (GameObject g in mapCells)
                {
                    g.SetActive(true);
                }
                shipMarker.SetActive(true);
                mapIsActive = true;
            }
        }
        if (mapIsActive)
        {
            Vector3 delta = ScenarioManager.scenarist.GetPlayerPosition() - GameMaster.designer.GetHex(0, 0).GetWorldPosition(); delta.y = delta.z; delta.z = -0.005f;
            shipMarker.transform.localPosition = mapCells[0].transform.localPosition + delta * distanceCoefficient;
            shipMarker.transform.localRotation = Quaternion.Euler(0, 0, PlayerController.player.transform.eulerAngles.y * (-1));
        }
    }
 public void AddLootPoint(ResourcesBox source)
 {
     if (source == null || source.extractionBitmask == 0 || transportDrones.Length == 0)
     {
         return;
     }
     if (plannedLootPoints.Count > 0)
     {
         foreach (ResourcesBox rb in plannedLootPoints)
         {
             if (rb == source)
             {
                 return;
             }
         }
     }
     plannedLootPoints.Add(source);
     source.isActiveLootPoint = true;
     if (source.workingDrones > 0)
     {
         int activeDronesCount = 0;
         foreach (CargoDrone c in transportDrones)
         {
             if (c.gameObject.activeSelf)
             {
                 activeDronesCount++;
             }
         }
         if (activeDronesCount < transportDrones.Length)
         {
             int newActiveDronesCount = activeDronesCount + source.workingDrones;
             if (newActiveDronesCount > transportDrones.Length)
             {
                 newActiveDronesCount = transportDrones.Length;
                 foreach (CargoDrone c in transportDrones)
                 {
                     if (!c.gameObject.activeSelf)
                     {
                         c.transform.position = transform.TransformPoint(droneHangarPos);
                         c.gameObject.SetActive(true);
                         c.timer  = 0;
                         c.target = plannedLootPoints[plannedLootPoints.Count - 1];
                     }
                 }
             }
             else
             {
                 activeDronesCount = source.workingDrones;
                 foreach (CargoDrone c in transportDrones)
                 {
                     if (!c.gameObject.activeSelf)
                     {
                         c.transform.position = transform.TransformPoint(droneHangarPos);
                         c.gameObject.SetActive(true);
                         c.timer  = 0; activeDronesCount--;
                         c.target = plannedLootPoints[plannedLootPoints.Count - 1];
                         if (activeDronesCount == 0)
                         {
                             break;
                         }
                     }
                 }
             }
         }
     }
 }