Esempio n. 1
0
 /// <summary>
 /// 获取击飞落脚点
 /// </summary>
 /// <param name="Dir">方向</param>
 public static Vector3 GetHitFlyEndPoint(Vector3 pos, WalkDir Dir, bool bearhit)
 {
     if (Dir == WalkDir.WALKLEFT)
     {
         if (m_SeaEnviron != null)
         {
             if (!bearhit)
             {
                 return(m_SeaEnviron.LeftHitFlyPoint.transform.position);
             }
             ShipCanvasInfo shipinfo = GetShipBodyMap();
             Vector3        flypos   = m_SeaEnviron.LeftHitFlyPoint.transform.position;
             flypos.x  = pos.x - shipinfo.width * MapGrid.m_UnitRoomGridNum * MapGrid.m_width * 0.5f;
             flypos.y -= 10;
             return(flypos);
         }
     }
     else if (Dir == WalkDir.WALKRIGHT)
     {
         if (m_SeaEnviron != null)
         {
             if (!bearhit)
             {
                 return(m_SeaEnviron.RightHitFlyPoint.transform.position);
             }
             ShipCanvasInfo shipinfo = GetShipBodyMap();
             Vector3        flypos   = m_SeaEnviron.RightHitFlyPoint.transform.position;
             flypos.x  = pos.x + shipinfo.width * MapGrid.m_UnitRoomGridNum * MapGrid.m_width * 0.5f;
             flypos.y -= 10;
             return(flypos);
         }
     }
     return(Vector3.zero);
 }
Esempio n. 2
0
    /// <summary>
    /// 获取选择的战斗方案
    /// </summary>
    public void GetShipCansInfoPlan(ref ShipCanvasInfo CanvasInfo, ref List <SoldierInfo> lSoldier, ref List <ShipPutInfo> lBuild)
    {
        if (lSoldier == null)
        {
            lSoldier = new List <SoldierInfo>();
        }
        if (lBuild == null)
        {
            lBuild = new List <ShipPutInfo>();
        }

        CanvasInfo = Canvans;

        foreach (ShipPutInfo Info in m_Soldiers)
        {
            SoldierInfo s = new SoldierInfo();
            if (Info.GetSoldier(ref s) == true && s != null)
            {
                lSoldier.Add(s);
            }
        }

        lBuild.AddRange(m_RoomBuildings);
        lBuild.AddRange(m_StairBuildings);
    }
Esempio n. 3
0
 public static void SetDefenseMap(ShipCanvasInfo Info)
 {
     m_CanvansInfo.EmptyMapArea();
     if (Info != null)
     {
         m_CanvansInfo.SetMapData(Info.width, Info.height, Info.map, Info.shape, Info.skin, Info.environment);
     }
 }
Esempio n. 4
0
    //设置爆炸地图
    public static void SetBombMap(ShipCanvasInfo Info)
    {
        ClearBombData();
        if (Info == null)
        {
            return;
        }
        Int2        StartPos = Int2.zero;
        List <Int2> lLinkPos = new List <Int2>();

        //LeftUp
        Info.GetMapAreaRoom(MapArea.LeftUp, ref StartPos, ref lLinkPos);
        BombArea bombarea = new BombArea();

        bombarea.ProcessType = BombProcessType.Middle;
        bombarea.SetArea(StartPos, lLinkPos);
        m_BombRoad.Add(BombRoad.LeftUp, bombarea);
        //RightDown
        Info.GetMapAreaRoom(MapArea.RightDown, ref StartPos, ref lLinkPos);
        bombarea             = new BombArea();
        bombarea.ProcessType = BombProcessType.Middle;
        bombarea.SetArea(StartPos, lLinkPos);
        m_BombRoad.Add(BombRoad.RightDown, bombarea);
        //LeftDown
        Info.GetMapAreaRoom(MapArea.LeftDown, ref StartPos, ref lLinkPos);
        bombarea             = new BombArea();
        bombarea.ProcessType = BombProcessType.Middle;
        bombarea.SetArea(StartPos, lLinkPos);
        m_BombRoad.Add(BombRoad.LeftDown, bombarea);
        //RightUp
        Info.GetMapAreaRoom(MapArea.RightUp, ref StartPos, ref lLinkPos);
        bombarea             = new BombArea();
        bombarea.ProcessType = BombProcessType.Middle;
        bombarea.SetArea(StartPos, lLinkPos);
        m_BombRoad.Add(BombRoad.RightUp, bombarea);
        //LeftMiddle
        Info.GetMapAreaRoom(MapArea.LeftMiddle, ref StartPos, ref lLinkPos);
        bombarea             = new BombArea();
        bombarea.ProcessType = BombProcessType.Middle;
        bombarea.SetArea(StartPos, lLinkPos);
        m_BombRoad.Add(BombRoad.LeftMiddle, bombarea);
        //RightMiddle
        Info.GetMapAreaRoom(MapArea.RightMiddle, ref StartPos, ref lLinkPos);
        bombarea             = new BombArea();
        bombarea.ProcessType = BombProcessType.Middle;
        bombarea.SetArea(StartPos, lLinkPos);
        m_BombRoad.Add(BombRoad.RightMiddle, bombarea);
        //Middle
        Info.GetMapAreaRoom(MapArea.Middle, ref StartPos, ref lLinkPos);
        List <List <Int2> > lCenterPos = new List <List <Int2> >();

        Info.GetMapCenterAreaRoom(ref lCenterPos);
        bombarea             = new BombArea();
        bombarea.ProcessType = BombProcessType.End;
        bombarea.SetArea(StartPos, lLinkPos);
        bombarea.SetCenterArea(lCenterPos);
        m_BombRoad.Add(BombRoad.Middle, bombarea);
    }
Esempio n. 5
0
 public void Copy(ShipCanvasInfo s)
 {
     this.width       = s.width;
     this.height      = s.height;
     this.shift_cx    = s.shift_cx;
     this.shift_cy    = s.shift_cy;
     this.map         = s.map;
     this.shape       = s.shape;
     this.skin        = s.skin;
     this.environment = s.environment;
 }
Esempio n. 6
0
    public static void CutLine(int layer, int unit, bool bLeft)
    {
        ShipCanvasInfo shipinfo = CmCarbon.GetDefenseMap();
        MapGrid        g        = GetMG(layer, unit);

        if (g != null)
        {
            if (bLeft)
            {
                if (g.Left != null)
                {
                    g.Left.Right = null;
                }
                g.Left = null;
            }
            else
            {
                if (g.Right != null)
                {
                    g.Right.Left = null;
                }
                g.Right = null;
            }
            for (int i = 0; i < unit; i++)
            {
                MapGrid left     = GetMG(layer, i);
                MapGrid righttop = left.m_NpNearestStation[(int)NearestStationDir.NSD_RIGHTTOP];
                if (righttop != null && righttop.GridPos.Unit >= unit)
                {
                    left.m_NpNearestStation[(int)NearestStationDir.NSD_RIGHTTOP] = null;
                }
                MapGrid rightdown = left.m_NpNearestStation[(int)NearestStationDir.NSD_RIGHTDOWN];
                if (rightdown != null && rightdown.GridPos.Unit >= unit)
                {
                    left.m_NpNearestStation[(int)NearestStationDir.NSD_RIGHTDOWN] = null;
                }
            }
            for (int i = unit + 1; i < (shipinfo.width * MapGrid.m_UnitRoomGridNum - 1); i++)
            {
                MapGrid right   = GetMG(layer, i);
                MapGrid lefttop = right.m_NpNearestStation[(int)NearestStationDir.NSD_LEFTTOP];
                if (lefttop != null && lefttop.GridPos.Unit <= unit)
                {
                    right.m_NpNearestStation[(int)NearestStationDir.NSD_LEFTTOP] = null;
                }
                MapGrid leftdown = right.m_NpNearestStation[(int)NearestStationDir.NSD_LEFTDOWN];
                if (leftdown != null && leftdown.GridPos.Unit <= unit)
                {
                    right.m_NpNearestStation[(int)NearestStationDir.NSD_LEFTDOWN] = null;
                }
            }
        }
    }
Esempio n. 7
0
    /// <summary>
    /// 加载战斗地图
    /// </summary>
    private static void LoadCombatMap()
    {
        ShipCanvasInfo Info = CmCarbon.GetDefenseMap();

        if (Info != null)
        {
            Info.GetMapData();
            BattleEnvironmentM.ResetStartPos(Info.GetMapSize(), true);
            MapM.CreateMap(Info);
            ShipBombRule.SetBombMap(Info);
        }
    }
Esempio n. 8
0
    public static void BuildViewStageScene()
    {
        CounterPartInfo    Info     = StageDC.GetCounterPartInfo();
        ShipCanvasInfo     Map      = StageM.GetCounterPartMap(Info.countershipcanvasid);
        List <SoldierInfo> lSoldier = new List <SoldierInfo>();
        List <BuildInfo>   lBuild   = new  List <BuildInfo>();

        StageM.GetCounterPartShipPut(Info.id, ref lSoldier, ref lBuild);
        CmCarbon.SetDefenseMap(Map);
        GenerateShip.GenerateShips(GetShipBodyMap(), GetLifeMBornNode(true), lBuild, lSoldier);
        MainCameraM.s_Instance.ResetCameraDataByBattle();
    }
Esempio n. 9
0
 /// <summary>
 /// 创建地图
 /// </summary>
 public static void CreateMap(ShipCanvasInfo Info)
 {
     ClearMap();
     if (Info != null)
     {
         CreateMap(Info.MapSizeData,
                   Info.HoleData,
                   Info.AttackData);
     }
     else
     {
         Debug.LogError("ShipCanvansInfo is null 请调查");
     }
 }
Esempio n. 10
0
    public static bool IsEqual(ShipCanvasInfo a, ShipCanvasInfo b)
    {
        if (a == null || b == null)
        {
            return(false);
        }
        bool isEqual = false;

        if (a.shift_cx == b.shift_cx && a.shift_cy == b.shift_cy)
        {
            isEqual = true;
        }
        return(isEqual);
    }
Esempio n. 11
0
    void ClickCombat(UIButton sender)
    {
        CounterPartInfo Info = StageDC.GetCounterPartInfo();

        if (Info == null)
        {
            return;
        }
        if (m_type != StageType.Normal)
        {
            int Times = StageDC.GetPassStageTimes(m_type, m_stageid);
            if (Times >= Info.times)
            {
                NGUIUtil.ShowTipWndByKey("88800031", 2);
                return;
            }
        }
        if (StageDC.GetPveMode() == PVEMode.Defense)
        {
            SoundPlay.PlayBackGroundSound("bgm_battle_loop", true, false);
            ShipCanvasInfo     Canvas   = new ShipCanvasInfo();
            List <SoldierInfo> lSoldier = new List <SoldierInfo>();
            List <ShipPutInfo> lBuild   = new List <ShipPutInfo>();
            ShipPlanDC.SetCurShipPlan(PlanType.Default);
            ShipPlan Plan = ShipPlanDC.GetCurShipPlan();
            Plan.GetShipCansInfoPlan(ref Canvas, ref lSoldier, ref lBuild);
            CmCarbon.SetDefenseMap(Canvas);
            CmCarbon.SetDefenseBuild(lBuild);
            CmCarbon.SetDefenseSoldier(lSoldier);
            CmCarbon.SetDefenseFloor(UserDC.GetDeckLevel());
            CmCarbon.SetDefenseUserInfo(Info, null);
            List <int> l = new List <int>();
            foreach (SoldierInfo s in lSoldier)
            {
                l.Add(s.ID);
            }
            sender.enabled = false;
            //DataCenter.RegisterHooks((int)gate.Command.CMD.CMD_702, CanCombat);
            //StageDC.SendStageAttackRequest(m_stageid, l, 0);
            SceneM.Load(CombatScene.GetSceneName(), false, false);
        }
        else
        {
            sender.enabled = false;
            //SoldierDC.Send_SoldierBattleListRequest(0);
            //DataCenter.RegisterHooks((int)gate.Command.CMD.CMD_214, LoadStage);
            SceneM.Load(CombatScene.GetSceneName(), false, false);
        }
    }
Esempio n. 12
0
    /// <summary>
    /// 建造建筑物的等级限制
    /// </summary>
    public ShipCanvasInfo GetBuildCanvasInfo()
    {
        ShipCanvasInfo buildMap = new ShipCanvasInfo();

        //m_Shape
        if (m_Shape != null)
        {
            buildMap.SetMapData(m_Shape.width, m_Shape.height, m_Shape.map, m_Shape.shape);
        }
        else
        {
            Debug.Log("building shape is null");
        }
        return(buildMap);
    }
Esempio n. 13
0
    /// <summary>
    /// 创建船体骨架
    /// </summary>
    private static ShipCanvasInfo GetShipBodyMap()
    {
        List <StairInfo> lStair = new List <StairInfo>();

        CmCarbon.GetStairInfo(ref lStair);

        ShipCanvasInfo Info = new ShipCanvasInfo();

        Info.Copy(CmCarbon.GetDefenseMap());

        List <Int2> lCutMapPoint = new List <Int2> ();

        foreach (StairInfo I in lStair)
        {
            //裁剪掉上层
            lCutMapPoint.Add(new Int2(I.Up.Unit / MapGrid.m_UnitRoomGridNum, I.Up.Layer));
        }
        Info.SetStairMap(lCutMapPoint, XYmode.Save2Edit);
        return(Info);
    }
Esempio n. 14
0
    /// <summary>
    /// 加入战役战斗,填充战役相关数据。
    /// </summary>
    public static bool JoinCompaignBattle()
    {
        m_CounterPartPutSoldier.Clear();
        m_CounterPartEnemys.Clear();
        m_CounterPartPutBulid.Clear();
        m_CounterPartInfo = StageM.GetCounterPartInfo(m_stageid);
        if (m_CounterPartInfo != null)
        {
            SetStageReward(m_stageid);
            //战斗模式
            if (m_CounterPartInfo.mode == 0)
            {
                m_CounterPartMap = StageM.GetCounterPartMap(m_CounterPartInfo.countershipcanvasid);
                StageM.GetCounterPartShipPut(m_stageid, ref m_CounterPartPutSoldier, ref m_CounterPartPutBulid);
                //加入战斗
                CmCarbon.ReadyCombat();
                CmCarbon.SetDefenseMap(m_CounterPartMap);
                CmCarbon.SetDefenseBuild(m_CounterPartPutBulid);
                CmCarbon.SetPVEMonisterSoldier(m_CounterPartPutSoldier);
                CmCarbon.SetDefenseFloor(m_CounterPartInfo.decklevel);
                CmCarbon.SetDefenseUserInfo(m_CounterPartInfo, m_CounterPartPutBulid);
            }
            else     //防守模式
            //StageM.GetCounterPartShipPut(m_stageid , ref m_CounterPartPutSoldier , ref m_CounterPartPutBulid);
            {
                StageM.GetCounterPartShipPut(m_stageid, ref m_CounterPartEnemys, ref m_CounterPartPutBulid);
                //加入战斗
                CmCarbon.ReadyCombat();
                CmCarbon.SetAttackSoldier(m_CounterPartEnemys);
            }

            if (GetPassStageStar(m_type, m_stageid) == 0 /*&& GetPassStageTimes (m_type ,m_stageid) == 0*/)
            {
                CmCarbon.SetStartTalk(m_CounterPartInfo.m_StageStartTalk);
                CmCarbon.SetEndTalk(m_CounterPartInfo.m_StageEndTalk);
            }
            return(true);
        }
        return(false);
    }
Esempio n. 15
0
    public void ResetCameraDataByBattle()
    {
        //场景最大画面为船高(船层+2)*3.3f占屏7/12时
        //场景最大画面时,0面占屏幕的纵横世界长度
        Camera         cam         = Camera.main;
        ShipCanvasInfo Info        = CmCarbon.GetDefenseMap();
        Int2           Start       = Info.GetMapSize();
        float          fZeroHeight = (Start.Layer + 2) * 3.3f * 12f / 7f; //0面占屏幕高度
        float          fZeroWidth  = fZeroHeight * s_aspect;              //0面占屏幕宽度
        float          fBoatHeight = (Start.Layer + 1f) * 3.3f;           //船高
        float          fBoatWidth  = Start.Unit * 3.0f;                   //船宽

        if (fZeroWidth < (Start.Unit + 2) * 3.0f)
        {
            fZeroWidth  = (Start.Unit + 2) * 3.0f;
            fZeroHeight = fZeroWidth / s_aspect;
        }
        float fMaxZeroHeight = fZeroHeight + fBoatHeight;                                                   //最大场景0面对应的高度
        float fMaxZeroWidth  = fZeroWidth + fBoatWidth;                                                     //最大场景0面对应的高度
        float zoomPyramid_S  = -CalcCameraLimitZBySWH(fMaxZeroHeight, s_fov);                               //锥体顶点

        cam.transform.position = new Vector3(0, (fMaxZeroHeight - fZeroHeight) / 2.0f + 3f, zoomPyramid_S); //最大场景显示时的相机位置
        float            zoomPyramid_H   = -CalcCameraLimitZBySWH(fZeroHeight, s_fov);                      //锥体高点坐标
        float            zoomPyramid_O   = -CalcCameraLimitZBySWH(9f, s_fov);                               //锥体底点坐标
        AreaLimitPyramid reaLimitPyramid = new AreaLimitPyramid();

        reaLimitPyramid.m_vTopL     = new Vector3(cam.transform.position.x, cam.transform.position.y, zoomPyramid_S);
        reaLimitPyramid.m_vTopR     = new Vector3(cam.transform.position.x, cam.transform.position.y, zoomPyramid_S);
        reaLimitPyramid.m_vBottomLT = cam.ViewportToWorldPoint(new Vector3(0, 1, zoomPyramid_O - zoomPyramid_S));
        reaLimitPyramid.m_vBottomLB = cam.ViewportToWorldPoint(new Vector3(0, 0, zoomPyramid_O - zoomPyramid_S));
        reaLimitPyramid.m_vBottomRT = cam.ViewportToWorldPoint(new Vector3(1, 1, zoomPyramid_O - zoomPyramid_S));
        reaLimitPyramid.m_vBottomRB = cam.ViewportToWorldPoint(new Vector3(1, 0, zoomPyramid_O - zoomPyramid_S));

        reaLimitPyramid.m_fZDeep       = zoomPyramid_H;
        reaLimitPyramid.m_fxRightDeep  = fBoatWidth / 2f;
        reaLimitPyramid.m_fxLeftDeep   = -fBoatWidth / 2f;
        reaLimitPyramid.m_fYBTopDeep   = fBoatHeight + 3f;
        reaLimitPyramid.m_fYBottomDeep = 3;
        m_cameraGesture.SetCameraLimitParam(reaLimitPyramid);

        float fBottom = fZeroHeight / 4f + 3.0f; //屏幕底往上1/4处为船底坐标位置

        s_vBattleFarthestCamPos = new Vector3(0f, fBottom, zoomPyramid_H);


        fZeroHeight = (Start.Layer + 1) * 3.3f * 20f / 13f; //船占高度的7/12
        fZeroWidth  = fZeroHeight * s_aspect;
        if (fZeroWidth < Start.Unit * 3.0f)
        {
            fZeroWidth  = Start.Unit * 3.0f;
            fZeroHeight = fZeroWidth / s_aspect;
        }
        float zoomBoatviewZ = -CalcCameraLimitZBySWH(fZeroHeight, s_fov);

        fBottom = fZeroHeight / 4f + 3.0f; //屏幕底往上1/4处为船底坐标位置
        s_vBattleBoatviewCamPos = new Vector3(0f, fBottom, zoomBoatviewZ);
        cam.transform.position  = new Vector3(s_vBattleFarthestCamPos.x, s_vBattleFarthestCamPos.y, s_vBattleFarthestCamPos.z);
        //ScreenManager.onScreenSizeChanged = OnScreenSizeChange;
        FlyZone();
        if (CmCarbon.GetCamp2Player(LifeMCamp.ATTACK) == false)
        {
            NGUIUtil.DebugLog("被怪物打");
        }
        else
        {
            MainCameraM.s_Instance.AutoMoveTo(MainCameraM.s_vBattleBoatviewCamPos, 0.7f);
        }
    }
Esempio n. 16
0
    //避风港
    public void ResetCameraDataByHaven()
    {
        Camera  cam     = Camera.main;
        Vector3 posTemp = new Vector3(cam.transform.position.x, cam.transform.position.y, cam.transform.position.z);

        //主场景最大画面,目前定死
        //主场景场景最大画面时,0面占屏幕的纵横世界长度
        float zoomPyramid_S  = -267.6354f; //锥体顶点
        float zPosBackGround = 0f;         //最后面背景所在的位置

        cam.transform.position = new Vector3(0, 13.09499f, zoomPyramid_S);
        Vector3 posScreenCenterWorldB  = cam.ViewportToWorldPoint(new Vector3(1.0f, 0f, zPosBackGround - zoomPyramid_S));
        Vector3 posScreenLeftWorldB    = cam.ViewportToWorldPoint(new Vector3(0f, 0f, zPosBackGround - zoomPyramid_S));
        float   fWidthBackGroundScreen = posScreenCenterWorldB.x - posScreenLeftWorldB.x;
        float   zoomLimitMinX          = -86f + fWidthBackGroundScreen / 2f;
        float   zoomLimitMaxX          = 0;//28f-fWidthBackGroundScreen/2f;

        s_vHavenViewFarthestCamPos = new Vector3(-28.0f, 13.09499f, zoomPyramid_S);
        cam.transform.position     = new Vector3(s_vHavenViewFarthestCamPos.x, s_vHavenViewFarthestCamPos.y, zoomPyramid_S);

        float zoomPyramid_O = -CalcCameraLimitZBySWH(9f, s_fov);

        s_reaLimitPyramidHavenView             = s_reaLimitPyramidHavenView != null ? s_reaLimitPyramidHavenView : new AreaLimitPyramid();
        s_reaLimitPyramidHavenView.m_vTopL     = new Vector3(zoomLimitMinX, s_vHavenViewFarthestCamPos.y, zoomPyramid_S);
        s_reaLimitPyramidHavenView.m_vTopR     = new Vector3(zoomLimitMaxX, s_vHavenViewFarthestCamPos.y, zoomPyramid_S);
        cam.transform.position                 = new Vector3(zoomLimitMinX, s_vHavenViewFarthestCamPos.y, zoomPyramid_S);
        s_reaLimitPyramidHavenView.m_vBottomLT = cam.ViewportToWorldPoint(new Vector3(0, 1, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidHavenView.m_vBottomLB = cam.ViewportToWorldPoint(new Vector3(0, 0, zoomPyramid_O - zoomPyramid_S));
        cam.transform.position                 = new Vector3(zoomLimitMaxX, s_vHavenViewFarthestCamPos.y, zoomPyramid_S);
        s_reaLimitPyramidHavenView.m_vBottomRT = cam.ViewportToWorldPoint(new Vector3(1, 1, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidHavenView.m_vBottomRB = cam.ViewportToWorldPoint(new Vector3(1, 0, zoomPyramid_O - zoomPyramid_S));

        s_reaLimitPyramidHavenView.m_fZDeep       = zoomPyramid_S;
        s_reaLimitPyramidHavenView.m_fxRightDeep  = s_reaLimitPyramidHavenView.m_vBottomRT.x;
        s_reaLimitPyramidHavenView.m_fxLeftDeep   = s_reaLimitPyramidHavenView.m_vBottomLT.x;
        s_reaLimitPyramidHavenView.m_fYBTopDeep   = s_reaLimitPyramidHavenView.m_vBottomLT.y;
        s_reaLimitPyramidHavenView.m_fYBottomDeep = s_reaLimitPyramidHavenView.m_vBottomRB.y;

        //编辑船时最大场景画面
        Int2     Start = Int2.zero;
        ShipPlan p     = ShipPlanDC.GetCurShipPlan();

        if (p != null)
        {
            ShipCanvasInfo Canvans = p.Canvans;
            Start = Canvans.GetMapSize();
        }
        float fZeroHeight = (Start.Layer + 2) * 3.3f * 12f / 7f; //船占高度的7/12
        float fZeroWidth  = fZeroHeight * s_aspect;
        float fBoatHeight = (Start.Layer + 1f) * 3.3f;           //船高
        float fBoatWidth  = Start.Unit * 3.0f;                   //船宽

        if (fZeroWidth < (Start.Unit + 2) * 3.0f)
        {
            fZeroWidth  = (Start.Unit + 2) * 3.0f;
            fZeroHeight = fZeroWidth / s_aspect;
        }
        float fMaxZeroHeight = fZeroHeight + fBoatHeight;                                                   //最大场景0面对应的高度
        float fMaxZeroWidth  = fZeroWidth + fBoatWidth;                                                     //最大场景0面对应的高度

        zoomPyramid_S          = -CalcCameraLimitZBySWH(fMaxZeroHeight, s_fov);                             //锥体顶点
        cam.transform.position = new Vector3(0, (fMaxZeroHeight - fZeroHeight) / 2.0f + 3f, zoomPyramid_S); //最大场景显示时的相机位置
        float zoomPyramid_H = -CalcCameraLimitZBySWH(fZeroHeight, s_fov);                                   //锥体高点坐标

        zoomPyramid_O                            = -CalcCameraLimitZBySWH(9f, s_fov);                       //锥体底点坐标
        s_reaLimitPyramidBoatView                = s_reaLimitPyramidBoatView != null ? s_reaLimitPyramidBoatView : new AreaLimitPyramid();
        s_reaLimitPyramidBoatView.m_vTopL        = new Vector3(cam.transform.position.x, cam.transform.position.y, zoomPyramid_S);
        s_reaLimitPyramidBoatView.m_vTopR        = new Vector3(cam.transform.position.x, cam.transform.position.y, zoomPyramid_S);
        s_reaLimitPyramidBoatView.m_vBottomLT    = cam.ViewportToWorldPoint(new Vector3(0, 1, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidBoatView.m_vBottomLB    = cam.ViewportToWorldPoint(new Vector3(0, 0, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidBoatView.m_vBottomRT    = cam.ViewportToWorldPoint(new Vector3(1, 1, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidBoatView.m_vBottomRB    = cam.ViewportToWorldPoint(new Vector3(1, 0, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidBoatView.m_fZDeep       = zoomPyramid_H;
        s_reaLimitPyramidBoatView.m_fxRightDeep  = fBoatWidth / 2f;
        s_reaLimitPyramidBoatView.m_fxLeftDeep   = -fBoatWidth / 2f;
        s_reaLimitPyramidBoatView.m_fYBTopDeep   = fBoatHeight + 3f;
        s_reaLimitPyramidBoatView.m_fYBottomDeep = 3f;

        float fBottom = fZeroHeight / 4f + 3.0f; //屏幕底往上1/4处为船底坐标位置

        s_vHavenViewBoatviewCamPos = new Vector3(0f, fBottom, zoomPyramid_H);

        Start       = new Int2(8, 4);
        fZeroHeight = (Start.Layer + 2) * 3.3f * 12f / 7f; //船占高度的7/12
        fZeroWidth  = fZeroHeight * s_aspect;
        fBoatHeight = (Start.Layer + 1f) * 3.3f;           //船高
        fBoatWidth  = Start.Unit * 3.0f;                   //船宽
        if (fZeroWidth < (Start.Unit + 2) * 3.0f)
        {
            fZeroWidth  = (Start.Unit + 2) * 3.0f;
            fZeroHeight = fZeroWidth / s_aspect;
        }
        fMaxZeroHeight                           = fZeroHeight + fBoatHeight;                                                 //最大场景0面对应的高度
        fMaxZeroWidth                            = fZeroWidth + fBoatWidth;                                                   //最大场景0面对应的高度
        zoomPyramid_S                            = -CalcCameraLimitZBySWH(fMaxZeroHeight, s_fov);                             //锥体顶点
        cam.transform.position                   = new Vector3(0, (fMaxZeroHeight - fZeroHeight) / 2.0f + 3f, zoomPyramid_S); //最大场景显示时的相机位置
        zoomPyramid_H                            = -CalcCameraLimitZBySWH(fZeroHeight, s_fov);                                //锥体高点坐标
        zoomPyramid_O                            = -CalcCameraLimitZBySWH(9f, s_fov);                                         //锥体底点坐标
        s_reaLimitPyramidEditView                = s_reaLimitPyramidEditView != null ? s_reaLimitPyramidEditView : new AreaLimitPyramid();
        s_reaLimitPyramidEditView.m_vTopL        = new Vector3(cam.transform.position.x, cam.transform.position.y, zoomPyramid_S);
        s_reaLimitPyramidEditView.m_vTopR        = new Vector3(cam.transform.position.x, cam.transform.position.y, zoomPyramid_S);
        s_reaLimitPyramidEditView.m_vBottomLT    = cam.ViewportToWorldPoint(new Vector3(0, 1, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidEditView.m_vBottomLB    = cam.ViewportToWorldPoint(new Vector3(0, 0, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidEditView.m_vBottomRT    = cam.ViewportToWorldPoint(new Vector3(1, 1, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidEditView.m_vBottomRB    = cam.ViewportToWorldPoint(new Vector3(1, 0, zoomPyramid_O - zoomPyramid_S));
        s_reaLimitPyramidEditView.m_fZDeep       = zoomPyramid_H;
        s_reaLimitPyramidEditView.m_fxRightDeep  = fBoatWidth / 2f;
        s_reaLimitPyramidEditView.m_fxLeftDeep   = -fBoatWidth / 2f;
        s_reaLimitPyramidEditView.m_fYBTopDeep   = fBoatHeight + 3f;
        s_reaLimitPyramidEditView.m_fYBottomDeep = 3f;

        fZeroHeight = (Start.Layer + 1) * 3.3f * 20f / 13f; //船占高度的7/12
        fZeroWidth  = fZeroHeight * s_aspect;
        if (fZeroWidth < Start.Unit * 3.0f)
        {
            fZeroWidth  = Start.Unit * 3.0f;
            fZeroHeight = fZeroWidth / s_aspect;
        }
        float zoomBoatviewZ = -CalcCameraLimitZBySWH(fZeroHeight, s_fov);

        fBottom = fZeroHeight / 4f + 3.0f; //屏幕底往上1/4处为船底坐标位置
        s_vEditViewBoatviewCamPos = new Vector3(0f, fBottom, zoomBoatviewZ);

        cam.transform.position = posTemp;

        ScreenManager.onScreenSizeChanged = OnScreenSizeChange;
    }
Esempio n. 17
0
    public static void  SetFloorData(ShipCanvasInfo Map)
    {
        m_lFooorData.Clear();
        g_ID = 0;

        List <List <int> > grid = new List <List <int> >();
        List <List <int> > map  = new List <List <int> >();

        grid = Map.GetShape();
        map  = Map.GetMap();
        Int2 start = new Int2(-1, 0);

        for (int j = 0; j < grid.Count; j++)
        {
            for (int k = 0; k < grid[j].Count; k++)
            {
                if (grid[j][k] == 0)
                {
                    if (j < (grid.Count - 1))
                    {
                        if (grid[j + 1][k] == 1)
                        {
                            FloorData fd = new FloorData();
                            fd.SetFloorID();
                            fd.m_FloorPos  = new Int2(k * MapGrid.m_UnitRoomGridNum, j + 1);
                            fd.m_FloorType = FloorType.bottom;
                            m_lFooorData.Add(fd);
                        }
                    }
                    if (k < (grid[j].Count - 1))
                    {
                        if (grid[j][k + 1] == 1)
                        {
                            FloorData fd = new FloorData();
                            fd.SetFloorID();
                            fd.m_FloorPos  = new Int2((k + 1) * MapGrid.m_UnitRoomGridNum, j);
                            fd.m_FloorType = FloorType.left;
                            m_lFooorData.Add(fd);
                        }
                    }
                }
                else if (grid[j][k] == 1)
                {
                    if (j == 0)
                    {
                        if (start.Unit < 0)
                        {
                            start.Unit = k;
                        }
                        FloorData fd = new FloorData();
                        fd.SetFloorID();
                        fd.m_FloorPos  = new Int2(k * MapGrid.m_UnitRoomGridNum, 0);
                        fd.m_FloorType = FloorType.bottom;
                        m_lFooorData.Add(fd);
                    }
                    if (j == (grid.Count - 1))
                    {
                        //if (map[j + 1][k] == 1)
                        FloorData fd = new FloorData();
                        fd.SetFloorID();
                        fd.m_FloorPos  = new Int2(k * MapGrid.m_UnitRoomGridNum, j + 1);
                        fd.m_FloorType = FloorType.top;
                        m_lFooorData.Add(fd);
                    }
                    else if (j < (grid.Count - 1))
                    {
                        if (grid[j + 1][k] == 1)
                        {
                            if (map[j + 1][k] == 1)
                            {
                                FloorData fd = new FloorData();
                                fd.SetFloorID();
                                fd.m_FloorPos  = new Int2(k * MapGrid.m_UnitRoomGridNum, j + 1);
                                fd.m_FloorType = FloorType.Normal;
                                m_lFooorData.Add(fd);
                            }
                        }
                        else
                        {
                            FloorData fd = new FloorData();
                            fd.SetFloorID();
                            fd.m_FloorPos  = new Int2(k * MapGrid.m_UnitRoomGridNum, j + 1);
                            fd.m_FloorType = FloorType.top;
                            m_lFooorData.Add(fd);
                        }
                    }

                    if (k == 0)
                    {
                        FloorData fd = new FloorData();
                        fd.SetFloorID();
                        fd.m_FloorPos  = new Int2(0, j);
                        fd.m_FloorType = FloorType.left;
                        m_lFooorData.Add(fd);
                    }
                    if (k == (grid[j].Count - 1))
                    {
                        FloorData fd = new FloorData();
                        fd.SetFloorID();
                        fd.m_FloorPos  = new Int2((k + 1) * MapGrid.m_UnitRoomGridNum - 1, j);
                        fd.m_FloorType = FloorType.right;
                        m_lFooorData.Add(fd);
                    }
                    else if (k < (grid[j].Count - 1))
                    {
                        if (grid[j][k + 1] == 0)
                        {
                            FloorData fd = new FloorData();
                            fd.SetFloorID();
                            fd.m_FloorPos  = new Int2((k + 1) * MapGrid.m_UnitRoomGridNum - 1, j);
                            fd.m_FloorType = FloorType.right;
                            m_lFooorData.Add(fd);
                        }
                    }
                }
                else
                {
                                        #if UNITY_EDITOR_LOG
                    Debug.Log("数据有问题");
                                        #endif
                }
            }
        }
    }
Esempio n. 18
0
    public static void ShowSmoke()
    {
        int deadcout = CmCarbon.GetDestroyBuild().Count;
        int allcount = CmCarbon.GetDestoryBuildCount();

        float          y        = deadcout * 1.0f / allcount;
        Transform      start    = BattleEnvironmentM.GetLifeMBornNode(true);
        ShipCanvasInfo info     = CmCarbon.GetDefenseMap();
        Transform      boathead = GenerateShip.BoatHead;
        Transform      boattail = GenerateShip.BoatTail;
        Transform      boatmast = GenerateShip.BoatMast;

        foreach (GameObject go in s_effectgolist)
        {
            if (go != null)
            {
                GameObject.Destroy(go);
            }
        }
        s_effectgolist.Clear();
        if (boathead == null || boatmast == null || boattail == null)
        {
            return;
        }
        Vector3 pos = Vector3.zero;

        if (0f < y && y <= 0.25f)
        {
            if (info.height <= 2)
            {
                pos    = boathead.position;
                pos.y += 3;
                GameObjectActionExcute gae = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos = boattail.position;
                gae = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
            }
            else
            {
                pos    = boathead.position;
                pos.y += 6;
                GameObjectActionExcute gae = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos    = boattail.position;
                pos.y += 3;
                gae    = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
            }
        }
        else if (0.25f < y && y <= 0.5f)
        {
            if (info.height <= 2)
            {
                pos    = boathead.position;
                pos.y += 3;
                GameObjectActionExcute gae = EffectM.LoadEffect("effect/prefab/", "2000101", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos = boattail.position;
                gae = EffectM.LoadEffect("effect/prefab/", "2000101", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos = boatmast.position;
                gae = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
            }
            else
            {
                pos    = boathead.position;
                pos.y += 6;
                GameObjectActionExcute gae = EffectM.LoadEffect("effect/prefab/", "2000101", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos    = boattail.position;
                pos.y += 3;
                gae    = EffectM.LoadEffect("effect/prefab/", "2000101", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos = boatmast.position;
                gae = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
            }
        }
        else if (0.5f < y)
        {
            if (info.height <= 2)
            {
                pos    = boathead.position;
                pos.y += 3;
                GameObjectActionExcute gae = EffectM.LoadEffect("effect/prefab/", "2000091", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos.y -= 3;
                pos.x -= 3;
                gae    = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos = boattail.position;
                gae = EffectM.LoadEffect("effect/prefab/", "2000091", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos.y += 3;
                pos.x += 3;
                gae    = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos = boatmast.position;
                gae = EffectM.LoadEffect("effect/prefab/", "2000091", pos, null);
                s_effectgolist.Add(gae.gameObject);
            }
            else
            {
                pos    = boathead.position;
                pos.y += 6;
                GameObjectActionExcute gae = EffectM.LoadEffect("effect/prefab/", "2000091", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos.y -= 3;
                pos.x -= 3;
                gae    = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos.y += 3;
                pos    = boattail.position;
                gae    = EffectM.LoadEffect("effect/prefab/", "2000091", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos.y += 3;
                pos.x += 3;
                gae    = EffectM.LoadEffect("effect/prefab/", "2000111", pos, null);
                s_effectgolist.Add(gae.gameObject);
                pos = boatmast.position;
                gae = EffectM.LoadEffect("effect/prefab/", "2000091", pos, null);
                s_effectgolist.Add(gae.gameObject);
            }
        }
    }