Пример #1
0
 public void Copy(CanvasCore Core)
 {
     this.m_type      = Core.m_type;
     this.IsNewCreate = Core.IsNewCreate;
     this.m_ID        = Core.m_ID;
     this.m_DataID    = Core.m_DataID;
 }
Пример #2
0
 public CanvasCore(ShipBuildType Type, bool IsNewCreate, int ID, int DataID, Vector2 size)
 {
     this.m_type      = Type;
     this.IsNewCreate = IsNewCreate;
     this.m_ID        = ID;
     this.m_DataID    = DataID;
 }
Пример #3
0
    /// <summary>
    /// 获取可放置区域
    /// </summary>
    public static List <Int2> GetCanPutArea(ShipBuildType type, bool bDeckRoom)
    {
        List <Int2> l = new List <Int2>();

        if (m_PutRoom.Count == 0)         //一个都未摆设,则所有区域都可以摆设了。
        {
            List <RoomGrid> ll = GetAllRoomGrid();
            foreach (RoomGrid g in ll)
            {
                l.Add(g.mPosRoomGrid);
            }
        }
        else          //根据现有的设置摆设区域。
        {
            if (type == ShipBuildType.Soldier)
            {
                List <RoomGrid> lAll = GetAllRoomGrid();
                foreach (RoomGrid r in lAll)
                {
                    if (r.CheckPosition((int)PutPosition.Soldier))
                    {
                        l.Add(r.mPosRoomGrid);
                    }
                }
                //List<RoomGrid>listRoomGrid = RoomMap.GetPutRoomGrid();
            }
            else if (type == ShipBuildType.BuildRoom)
            {
                if (bDeckRoom)
                {
                    foreach (RoomGrid r in m_DeckRoom)
                    {
                        if (r.CheckPosition((int)PutPosition.Floor))
                        {
                            l.Add(r.mPosRoomGrid);
                        }
                    }
                }
                else
                {
                    List <Int2>     listOld            = new List <Int2>();
                    List <Int2>     listNew            = new List <Int2>();
                    List <RoomGrid> listNoLinRoomGrid  = GetNoLinkRoom(listOld, listNew);
                    List <RoomGrid> listCanPutRoomGrid = new List <RoomGrid>();;
                    int             nCount             = m_PutRoom.Count;
                    for (int nCnt = 0; nCnt < nCount; nCnt++)
                    {
                        RoomGrid roolGrid = m_PutRoom[nCnt];
                        if (!listNoLinRoomGrid.Contains(roolGrid) && roolGrid.mPosRoomGrid.Layer < 4)
                        {
                            listCanPutRoomGrid.Add(roolGrid);
                        }
                    }
                    NDLink.JoinLink(new List <Int2>(), new List <Int2>(), listCanPutRoomGrid, m_RealMapSize);
                    l.AddRange(NDLink.GetCanPutArea());
                }
            }
        }
        return(l);
    }
Пример #4
0
 private canvasedit.ShipPutInfo FillShipPutInfo(ShipPutInfo item, ShipBuildType Type)
 {
     canvasedit.ShipPutInfo info = new canvasedit.ShipPutInfo();
     info.id = item.id;
     if (info.id < 0)
     {
         info.id = 0;
     }
     info.type  = item.type;
     info.objid = item.objid;
     if (Type == ShipBuildType.BuildStair)
     {
         info.objid = 1201;
         info.type  = 3;
     }
     info.cx = item.cxMapGrid;
     info.cy = item.cyMapGrid;
     if (Type == ShipBuildType.BuildRoom && item.IsTransgateRoom())
     {
         item.IsTransgateRoom();
         info.shipput_data0 = item.shipput_data0;
         info.shipput_data1 = item.shipput_data1;
     }
     else
     {
         info.shipput_data0 = item.shipput_data0;
         info.shipput_data1 = item.shipput_data1;
     }
     return(info);
 }
Пример #5
0
    /// <summary>
    /// 获取船上数据
    /// </summary>
    public List <ShipPutInfo> GetShipBuildInfo(ShipBuildType type)
    {
        List <ShipPutInfo> l = new List <ShipPutInfo>();

        if (type == ShipBuildType.BuildRoom || type == ShipBuildType.All)
        {
            if (m_RoomBuildings.Count == 0)   //当没有金库时,添加一个
            {
                BuildInfo info = BuildDC.SearchBuilding(1300);
                if (info != null)
                {
                    ShipPutInfo Build = new ShipPutInfo(ShipPutInfo.GetNewShipPutId(), info);
                    Build.cyMapGrid = 0;
                    Build.cxMapGrid = 24;
                    AddShipBuildInfo(Build, ShipBuildType.BuildRoom);
                }
            }
            l.AddRange(m_RoomBuildings);
        }

        if (type == ShipBuildType.Soldier || type == ShipBuildType.All)
        {
            l.AddRange(m_Soldiers);
        }

        if (type == ShipBuildType.BuildStair || type == ShipBuildType.All)
        {
            l.AddRange(m_StairBuildings);
        }

        return(l);
    }
Пример #6
0
 /// <summary>
 /// 移除建筑物,如果是新增的可以直接移除,否则需等服务端通过才移除
 /// </summary>
 public void RemoveShipBuildInfo(ShipPutInfo Info, ShipBuildType Type)
 {
     if (Info == null)
     {
         return;
     }
     if (Type == ShipBuildType.Soldier)
     {
         if (m_Soldiers.Contains(Info) == true)
         {
             m_Soldiers.Remove(Info);
         }
     }
     else if (Type == ShipBuildType.BuildRoom)
     {
         if (m_RoomBuildings.Contains(Info) == true)
         {
             m_RoomBuildings.Remove(Info);
         }
     }
     else if (Type == ShipBuildType.BuildStair)
     {
         if (m_StairBuildings.Contains(Info) == true)
         {
             m_StairBuildings.Remove(Info);
         }
     }
 }
Пример #7
0
 public CanvasCore()
 {
     m_type      = ShipBuildType.BuildRoom;
     IsNewCreate = false;
     m_ID        = 0;
     m_DataID    = 0;
 }
Пример #8
0
 /// <summary>
 /// 0 船只编辑  1 船只编辑查看 2 金银岛 3战斗选兵
 /// </summary>
 public void SetCanvasItem(SoldierInfo Info, int type = 0, bool IsBattle = true)
 {
     m_bIsBattle     = IsBattle;
     m_iItemType     = type;
     Soldier         = Info;
     m_ShipBuildType = ShipBuildType.Soldier;
     SetUI();
 }
Пример #9
0
 /// <summary>
 /// 添加 新建 建筑或炮弹兵 到船上。
 /// </summary>
 public void AddShipBuildInfo(ShipPutInfo Info, ShipBuildType Type)
 {
     if (Info == null)
     {
         return;
     }
     if (Type == ShipBuildType.Soldier)
     {
         bool b = false;
         for (int i = 0; i < m_Soldiers.Count; i++)
         {
             if (m_Soldiers[i].id == Info.id)
             {
                 b = true;
                 break;
             }
         }
         if (b == false)
         {
             m_Soldiers.Add(Info);
         }
     }
     else if (Type == ShipBuildType.BuildRoom)
     {
         bool b = false;
         for (int i = 0; i < m_RoomBuildings.Count; i++)
         {
             if (m_RoomBuildings[i].id == Info.id)
             {
                 b = true;
                 break;
             }
         }
         if (b == false)
         {
             m_RoomBuildings.Add(Info);
         }
     }
     else if (Type == ShipBuildType.BuildStair)
     {
         bool b = false;
         for (int i = 0; i < m_StairBuildings.Count; i++)
         {
             if (m_StairBuildings[i].id == Info.id)
             {
                 b = true;
                 break;
             }
         }
         if (b == false)
         {
             m_StairBuildings.Add(Info);
         }
     }
 }
Пример #10
0
 void ClickTrapSoldierBtn()
 {
     if (m_bTrap)
     {
         m_shipBuildType = ShipBuildType.BuildRoom;
     }
     else
     {
         m_shipBuildType = ShipBuildType.Soldier;
     }
     CreateList();
 }
Пример #11
0
 /// <summary>
 /// 判断是否已经存在了。用于检测有没被创建。
 /// </summary>
 /// <param name="soldierID"></param>
 /// <returns></returns>
 public static bool CheckHaveExist(ShipBuildType type, int ID)
 {
     for (int i = 0; i < m_Build.Count; i++)
     {
         if (m_Build[i].MyCore().m_DataID == ID && m_Build[i].MyCore().m_type == type)
         {
             return(true);
             //Debug.Log("xxxxxxxxxxxx");
         }
     }
     return(false);
 }
Пример #12
0
    /// <summary>
    /// 填充建造类型数据
    /// </summary>
    public void FillData(ShipBuildType type)
    {
        m_shipBuildType = type;
        switch (type)
        {
        case ShipBuildType.BuildRoom:
            warehouseBuildList = BuildDC.GetBuildingList(AttributeType.ALL);
            break;

        case ShipBuildType.Soldier:
            SoldierDC.GetSoldiers(ref soldierList, CombatLoactionType.ALL);
            break;

        default:
            break;
        }
    }
Пример #13
0
    /// <summary>
    /// 获取具体对象的局部坐标
    /// </summary>
    public static Vector3 GetShipBuildLocalPos(Int2 posMapGrid, ShipBuildType Type)
    {
        RoomGrid r = RoomMap.FindRoomGrid(posMapGrid, XYSYS.MapGrid);

        if (r != null)
        {
            Vector3 v = r.LocalPos;
            if (Type == ShipBuildType.Soldier)
            {
                v.x += 3 * MapGrid.m_width;
            }
            return(v);
        }
        else
        {
            return(Vector3.zero);
        }
    }
Пример #14
0
    public static TouchMove GetTouchMoveByRoomGrid(RoomGrid rGrid, ShipBuildType type)
    {
        if (null == rGrid)
        {
            return(null);
        }
        List <CanvasCore> childCores = rGrid.GetOtherBuild();

        for (int i = 0; i < childCores.Count; i++)
        {
            CanvasCore curCore = childCores[i];
            if (curCore.m_type == type)
            {
                return(PutCanvasM.GetTouchMoveByCore(curCore));
            }
        }
        return(null);
    }
Пример #15
0
    public override void WndStart()
    {
        base.WndStart();

        MyHead.BtnShow.OnClickEventHandler         += BtnShow_OnClickEventHandler;
        MyHead.BtnHide.OnClickEventHandler         += BtnHide_OnClickEventHandler;
        MyHead.BtnBlackScience.OnClickEventHandler += BtnBlackScience_OnClickEventHandler;
        MyHead.BtnDeleteAll.OnClickEventHandler    += BtnDeleteAll_OnClickEventHandler;

        m_shipBuildType = ShipBuildType.BuildRoom;
        RefreshTrapUI(AttributeType.ALL);
        RefreshSoldierUI(CombatLoactionType.ALL);
        RefreshBlackScienceUI();
        CheckCaptionCount();

        EventDelegate.Add(MyHead.TogTrap.onChange, TogTrap_OnClickEventHandler);
        EventDelegate.Add(MyHead.TogSoldier.onChange, TogSoldier_OnClickEventHandler);
    }
Пример #16
0
    /// <summary>
    /// 根据小格子获取房间的CanvasCore
    /// </summary>
    /// <param name="posMapGrid"></param>
    /// <returns></returns>
    public static CanvasCore FindCanvasCore(Int2 posMapGrid, ShipBuildType typeBuld)
    {
        RoomGrid roomGrid = FindRoomGrid(posMapGrid, XYSYS.MapGrid);

        if (roomGrid != null)
        {
            if (typeBuld == ShipBuildType.BuildRoom)
            {
                return(roomGrid.GetBuildRoom());
            }
            List <CanvasCore> roomChildList = roomGrid.GetOtherBuild();
            for (int i = 0; i < roomChildList.Count; i++)
            {
                if (roomChildList[i].m_type == typeBuld)
                {
                    return(roomChildList[i]);
                }
            }
        }
        return(null);
    }
Пример #17
0
 public void SetCanvasItem(BuildInfo Info, bool IsBattle = true)
 {
     m_bIsBattle = IsBattle;
     if (m_WareHouse.Count == 0)
     {
         m_WareHouse.Add(Info);
         buildType = Info.BuildType;
         level     = Info.Level;
         star      = Info.StarLevel;
         quality   = Info.Quality;
     }
     else
     {
         if (Info.EqualOf(buildType, level, star, quality) == true)
         {
             m_WareHouse.Add(Info);
         }
     }
     m_ShipBuildType = ShipBuildType.BuildRoom;
     SetUI();
 }
Пример #18
0
    /// <summary>
    /// 设置可放置区域颜色
    /// </summary>
    public static void SetCanPutArea(ShipBuildType type, bool bDeckRoom)
    {
        List <Int2> l = RoomMap.GetCanPutArea(type, bDeckRoom);

        SetGridsBgStates(l, CanvasUnitState.CanPut, true);
    }
Пример #19
0
 /// <summary>
 /// 修改设置TouchMoveData 的核心数据
 /// </summary>
 /// <param name="Type">类型,炮弹兵或建筑</param>
 /// <param name="Style">所处位置,船上或环境</param>
 /// <param name="ID">ID唯一标识</param>
 /// <returns>变更时设置</returns>
 public void SetTouchMoveData(ShipBuildType Type, bool IsNewCreate, int ID)
 {
     m_Core.m_type      = Type;
     m_Core.IsNewCreate = IsNewCreate;
     m_Core.m_ID        = ID;
 }
Пример #20
0
    void OnMouseDown()
    {
        if (PutCanvasM.CanOperate == false)
        {
            return;
        }

        RaycastHit hit;

        if (WndManager.IsHitNGUI(out hit))//当点击到UI时不做处理
        {
            return;
        }
        if (Input.touchCount >= 2)
        {
            return;
        }
        m_bMouseDown       = true;
        m_bLongTouch       = false;
        m_bTouchMoveChange = true;
        m_fMouseDownTime   = Time.time;
        m_vtotalmouseDelta = Vector2.zero;
        m_vlastFirstTouch  = GetTouchPos(0);
        m_isDrag           = false;
        if (SystemInfo.deviceType == DeviceType.Desktop)
        {
            m_v3MouseTouchDown = Input.mousePosition;
        }
        else
        {
            m_v3MouseTouchDown = Input.GetTouch(0).position;
        }

        //获取按下时画布格子
        Vector3 m_v3TouchScreenPos = new Vector3(m_v3MouseTouchDown.x, m_v3MouseTouchDown.y, -Camera.main.transform.position.z);
        Vector3 m_v3TouchWorldPos  = Camera.main.ScreenToWorldPoint(m_v3TouchScreenPos);
        Vector3 v3dLocalPos        = BattleEnvironmentM.World2LocalPos(m_v3TouchWorldPos);

        m_roomGridTouchDown = RoomMap.FindRoomGrid(v3dLocalPos);
        if (m_roomGridTouchDown == null)
        {
            return;
        }
        m_curClickType = RoomMap.PickupShipBuildType(m_roomGridTouchDown, v3dLocalPos, m_roomGridTouchDown.mPosRoomGrid.Layer);

        CanvasCore buildRoomCoreTouchDown = m_roomGridTouchDown.GetBuildRoom();

        if (TouchMove.g_bSetParaing == true)
        {
            return;
        }

        TouchMove curTouchMove = TouchMoveManager.GetCurTouchMove();

        if (null != curTouchMove)
        {
            //如果当前选中的是房间,新选中的不管是什么都不做变更
            //如果当前选中的不是房间,但是新选中的对象和当前选中的一样则也不变量。
            if (curTouchMove.IsContainsRoomGrid(m_roomGridTouchDown))
            {
                TouchMove selNewTouchMov = PutCanvasM.GetTouchMoveByRoomGrid(m_roomGridTouchDown, m_curClickType);
                if (curTouchMove.MyCore().m_type == ShipBuildType.BuildRoom ||
                    selNewTouchMov != null && selNewTouchMov == curTouchMove)
                {
                    curTouchMove.PlayEditSelectAnimationEnd();                                     //恢复上个房间内陷阱/角色 动画
                    curTouchMove.OnMouseDown();
                    m_bTouchMoveChange = false;
                }
            }
            PutCanvasM.ClearNoLinkList();
        }
        else
        {
            //判断选中物件是否在上次保存失败的物件上,如果是则直接选择
            bool bInNoLinkList = false;
            if (buildRoomCoreTouchDown != null)
            {
                TouchMove selNewTouchMov = PutCanvasM.GetTouchMoveByCore(buildRoomCoreTouchDown);
                if (null == selNewTouchMov)
                {
                    List <CanvasCore> childCores = m_roomGridTouchDown.GetOtherBuild();
                    for (int i = 0; i < childCores.Count; i++)
                    {
                        selNewTouchMov = PutCanvasM.GetTouchMoveByCore(childCores[i]);
                        break;
                    }
                }
                if (null != selNewTouchMov && PutCanvasM.NoLinkListContain(selNewTouchMov.MyCore()))
                {
                    PutCanvasM.ClearNoLinkList();
                    TouchMoveManager.SetCurTouchMove(selNewTouchMov);
                    selNewTouchMov.PlayEditSelectAnimationEnd();                     //恢复上个房间内陷阱/角色 动画
                    selNewTouchMov.OnMouseDown();
                    m_bTouchMoveChange = false;
                    bInNoLinkList      = true;
                }
            }
            if (bInNoLinkList == false)
            {
                PutCanvasM.ClearNoLinkList();
            }
        }
    }