示例#1
0
 private void ListenFunc(AssembleAcceptBase _assembleAcceptBase)
 {
     if (OnContainerFullAction != null)
     {
         if (CheckMatch_ContainerFull())
         {
             Debug.Log("成功配对ContainerFull");
             OnContainerFullAction.Invoke();
             containeGroupInfos.Clear();
             OnContainerFullAction = null;
         }
     }
     if (OnMatch_OneToOneAction != null)
     {
         if (CheckMatch_OneToOne())
         {
             Debug.Log("成功配对OneToOne");
             OnMatch_OneToOneAction.Invoke();
             acceptBase_OneToOne            = null;
             AssembleContainerBase_OneToOne = null;
             OnMatch_OneToOneAction         = null;
         }
     }
     if (OnMatch_OneToManyAction != null)
     {
         if (CheckMatch_OneToMany())
         {
             Debug.Log("成功配对OneToMany");
             OnMatch_OneToManyAction.Invoke();
             acceptBase_OneToMany = null;
             AssembleContainerBase_OneToMany.Clear();
             OnMatch_OneToManyAction = null;
         }
     }
 }
示例#2
0
 /// <summary>
 /// 开始装配
 /// </summary>
 /// <param name="_containerBase"></param>
 public override void BeginAssmeble(AssembleContainerBase _containerBase)
 {
     base.BeginAssmeble(_containerBase);
     if (tempContainer != null)
     {
         tempContainer = null;
         curPointIndex = 0;
         MoveFunc();
     }
 }
 /// <summary>
 /// 开始装配
 /// </summary>
 /// <param name="_containerBase"></param>
 public virtual void BeginAssmeble(AssembleContainerBase _containerBase)
 {
     useCount++;
     containerBase = _containerBase;
     containerBase.BeginAssmeble(this);
     if (OnAssembleBegin != null)
     {
         OnAssembleBegin.Invoke(this);
     }
 }
示例#4
0
 private void Drag()
 {
     if (!isActive)
     {
         return;
     }
     if (!isUse)
     {
         assembleManager.OnSelect.Invoke(this);
         PrepareAssmeble();
     }
     else if (prepareFinish)
     {
         if (Input.GetMouseButtonDown(0))
         {
             Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
             RaycastHit hit;
             containerBase = null;
             if (Physics.Raycast(ray, out hit, 100) && hit.transform.name == obj.name)
             {
                 screenPosition  = Camera.main.WorldToScreenPoint(obj.transform.position);
                 mScreenPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
                 offset          = obj.transform.position - Camera.main.ScreenToWorldPoint(mScreenPosition);
                 isButtonDown    = true;
             }
             if (OnDragBegin != null)
             {
                 OnDragBegin.Invoke();
             }
         }
         if (Input.GetMouseButton(0) && isButtonDown)
         {
             mScreenPosition        = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPosition.z);
             obj.transform.position = Camera.main.ScreenToWorldPoint(mScreenPosition) + offset;
         }
         if (Input.GetMouseButtonUp(0) && isButtonDown)
         {
             isUse         = false;
             isActive      = false;
             isButtonDown  = false;
             tempContainer = FindContainer();
             if (JugeAssmeble(tempContainer))
             {
                 BeginAssmeble(tempContainer);
             }
             if (OnDragEnd != null)
             {
                 OnDragEnd.Invoke(this, containerBase);
             }
         }
     }
 }
 /// <summary>
 /// 判断能否装配
 /// </summary>
 /// <param name="_assembleContainerBase"></param>
 /// <returns></returns>
 public virtual bool JugeAssmeble(AssembleContainerBase _assembleContainerBase)
 {
     if (_assembleContainerBase == null)
     {
         return(false);                               //如果射线没有打到容器,则不能执行装配
     }
     if (containerBase != null)
     {
         return(false);                      //如果当前装配物已被装配,则不能执行装配
     }
     if (!_assembleContainerBase.CanUse)
     {
         return(false);                               //如果容器不可用,则不能执行装配
     }
     if (_assembleContainerBase.assembleType != assembleType)
     {
         return(false);                                                    //如果容器类型不匹配,则不能执行装配
     }
     if (_assembleContainerBase.gameObject == gameObject)
     {
         return(false);                                                //如果物体既是装配物又是容器,防止自身装配至自身的容器中。
     }
     return(true);
 }
示例#6
0
 /// <summary>
 /// 当装配器装配到指定容器中时调用 Action
 /// </summary>
 public void OnMatch_OneToOne(string _acceptName, string _containerName, Action action)
 {
     acceptBase_OneToOne            = FindAcceptByName(_acceptName);
     AssembleContainerBase_OneToOne = FindContainerByName(_containerName);
     OnMatch_OneToOneAction         = action;
 }