Exemplo n.º 1
0
    private void _DrawMarking_Text3D()
    {
        if (null == m_drawText3D)
        {
            return;
        }

        _UndrawMarking_Text3D();

        if (getCountBase() > 0)
        {
            List <CBASE__> listBase             = m_listBase__;
            Quaternion     quaternionCoreText3D = new Quaternion();

            Vector3 v3Position;

            for (int iSeqBase = 0; iSeqBase < listBase.Count; ++iSeqBase)
            {
                CBASE__ baseCurr = listBase[iSeqBase];

                v3Position = baseCurr.getCenterPosition();
                v3Position = v3Position + m_v3PosAdjustText3D;

                m_drawText3D.setNew3DText(v3Position,
                                          quaternionCoreText3D,
                                          m_iFontSizeText3D,
                                          m_colorText3D,
                                          "" + iSeqBase,
                                          true);
            } // for (int iSeqBase = 0; iSeqBase < listBase.Count; ++iSeqBase)
        }
    }         // private void _DrawMarking_Text3D()
Exemplo n.º 2
0
    //@ Debug Draw
    override public void _SetDrawDebug_Base__All()
    {
        if (null == m_drawRenderMesh)
        {
            return;
        }

        m_drawRenderMesh.DeleteDrawMesh_All();  //@ Delete Instance Tris

        if (getCountBase() > 0)
        {
            List <CBASE__> listBase = m_listBase__;

            for (int iSeqBase = 0; iSeqBase < listBase.Count; ++iSeqBase)
            {
                CBASE__ baseCurr = listBase[iSeqBase];

                Vector3[] arrv3PntsSrc = baseCurr.getArrayPoint_src();

                m_drawRenderMesh.DrawNewRendermesh(m_iID_Base_DrawForDEBUG + iSeqBase,
                                                   arrv3PntsSrc,
                                                   m_colorBase__,
                                                   m_fEpsilon_forZfight,
                                                   CDrawRenderMesh.scaleadjust_render_093);
            } // for (int iSeqBase = 0; iSeqBase < listBase.Count; ++iSeqBase)
        }     // if (getCountBase() > 0)

        _DrawMarking_Text3D();
    } // virtual public void _SetDrawDebug_Base__All()
Exemplo n.º 3
0
    //@ Debug Draw
    protected void _SetDraw_Bases()
    {
        if (null == m_drawRenderMesh)
        {
            return;
        }

        m_drawRenderMesh.DeleteDrawMesh_Range(m_iID_Instant_DrawForDEBUG, m_listTrisAll_copy.Count);     //@ Delete Instance Tris
        m_drawRenderMesh.DeleteDrawMesh_Range(m_iID_Base_DrawForDEBUG, m_listTrisAll_copy.Count);        //@ Delete Base__ Polygons

        if (getCountBase() > 0)
        {
            List <CBASE__> listBase = m_listBase__;
            for (int iSeqBase = 0; iSeqBase < listBase.Count; ++iSeqBase)
            {
                CBASE__ baseCurr = listBase[iSeqBase];

                Vector3[] arrv3PntsSrc = baseCurr.getArrayPoint_src();

                m_drawRenderMesh.DrawNewRendermesh(m_iID_Base_DrawForDEBUG + iSeqBase,
                                                   arrv3PntsSrc,
                                                   m_colorBase__,
                                                   m_fEpsilon_forZfight,
                                                   CDrawRenderMesh.scaleadjust_render_093);
            }
        } // if (getCountBase() > 0)
    }     // protected void _SetDraw_Bases()
    //@ Debug Draw
    override public void _SetDrawDebug_Base__All()
    {
        if (null == m_drawRenderMesh)
        {
            return;
        }

        _SetUndrawDebugBase_All();
        base._SetDraw_Bases();

        if (getCountBase() > 0)
        {
            List <CBASE__> listBase             = m_listBase__;
            Quaternion     quaternionCoreText3D = new Quaternion();
            Vector3        v3Position;

            for (int iSeqBase = 0; iSeqBase < listBase.Count; ++iSeqBase)
            {
                CBASE__ baseCurr = listBase[iSeqBase];

                v3Position = baseCurr.getCenterPosition();
                v3Position = v3Position + m_v3PosAdjustText3D;

                m_drawText3D.setNew3DText(v3Position,
                                          quaternionCoreText3D,
                                          m_iFontSizeText3D,
                                          m_colorText3D,
                                          "Start" + iSeqBase + "(" + baseCurr.getIdxType() + ")",
                                          true);
            }
        }
    } // override public void _SetDrawDebug_Base__All()
Exemplo n.º 5
0
    } // public bool setNewBase_fromListTris( List<CBASE__> listBase_ )

    //@ Construct New Base__
    protected int setNewBase_fromListTris(List <int> listTriIdx_Instant)
    {
        if (true == m_listTrisAll_copy.IsNullOrEmpty() ||
            true == listTriIdx_Instant.IsNullOrEmpty())
        {
            Debug.LogError("(true == m_listTrisAll_copy.IsNullOrEmpty() || true == listTriIdx_Instant.IsNullOrEmpty())");
            return(-1);
        }

        int     iFirstIdx = listTriIdx_Instant[0];
        CBASE__ baseNew   = new CBASE__();

        for (int iTri_ = 0; iTri_ < listTriIdx_Instant.Count; ++iTri_)
        {
            int  iSeqTri_  = listTriIdx_Instant[iTri_];
            CTRI triPicked = m_listTrisAll_copy.GetSafe(iSeqTri_);
            if (null == triPicked)
            {
                Debug.LogError("(null == triPicked)/setNewBase_fromListTris");
                continue;
            }
            baseNew.InsertNewTri(iSeqTri_, triPicked, false);
        }

        baseNew.CalculateBase__(iFirstIdx);
        m_listBase__.Add(baseNew);

        Clear_InstantTriangles_All();

        return(m_listBase__.Count);
    }
Exemplo n.º 6
0
    //@ Intersect ray to tries iteration.
    public CBASE__ GetIntersectedRay(Vector3 lineOrigin, Vector3 lineDir)
    {
        if (true == m_listTris.IsNullOrEmpty())
        {
            return(null);
        }

        List <CTRI> triesForIteration = m_listTris.Where(t => { return(null != t.GetBaseLinked); }).ToListOrDefault();

        if (true == triesForIteration.IsNullOrEmpty())
        {
            return(null);
        }

        CTRI intersectedTri = triesForIteration.FirstOrDefault(t =>
        {
            return(CMATH.IntersectRayTriSimple(lineOrigin, lineDir, t._arrv3PT[0], t._arrv3PT[1], t._arrv3PT[2]));
        });

        if (null == intersectedTri)
        {
            return(null);
        }

        CBASE__ intersectedBase = intersectedTri.GetBaseLinked;

        return(intersectedBase);
    }
    public void SetType_Base_Selected(int iIdxTypeCore)
    {
        if (false == OutRangeOfBase(m_iIdxBase_Selected))
        {
            CBASE__ baseCurr = m_listBase__[m_iIdxBase_Selected];
            baseCurr.setIdxType(iIdxTypeCore);
        }

        _SetDrawDebug_Base__All();
    }
Exemplo n.º 8
0
    } // static public bool CollectAll_perfectSqre_exceptGoalTri()

    //@ Find Base
    protected bool AlreadyBaseExisted(CBASE__ base__)
    {
        foreach (CBASE__ baseCurr in m_listBase__)
        {
            if (true == baseCurr.IsSimilar(base__))
            {
                return(true);
            }
        }

        return(false);
    }
Exemplo n.º 9
0
    //@ Search Triangle
    public CBASE__ findBaseByTri(int iIdxTri)
    {
        CBASE__ baseFind  = null;
        int     iBaseFind = findBasebyTri(iIdxTri);

        if (-1 != iBaseFind)
        {
            baseFind = m_listBase__[iBaseFind];
        }

        return(baseFind);
    }
Exemplo n.º 10
0
    //@ Operator
    public bool IsSimilar(CBASE__ baseRight)
    {
        foreach (int iTriLeft in _listIdxTris)
        {
            foreach (int iTriRight in baseRight._listIdxTris)
            {
                if (iTriLeft == iTriRight)
                {
                    return(true);
                }
            }
        } // foreach (int iTriLeft in baseLeft._listIdxTris)

        return(false);
    } // public static bool IsSimilar(CBASE__ baseRight)
Exemplo n.º 11
0
    protected int findBasebyTri(int iIdxTri)
    {
        bool bFindOut     = false;
        int  iIdxObstFind = -1;

        for (int iSeqOb = 0; iSeqOb < m_listBase__.Count; ++iSeqOb)
        {
            CBASE__ baseCurr = m_listBase__[iSeqOb];
            bFindOut = baseCurr.FindinTri_onAB(iIdxTri);
            if (true == bFindOut)
            {
                iIdxObstFind = iSeqOb;
                break;
            }
        }

        return(iIdxObstFind);
    }
Exemplo n.º 12
0
    public bool newSquareBaseBlockFromTri(int iIdxTri, bool bOnlyPair, CTriCollector tricollector)
    {
        bool bSetNew = base.newSquareBaseFromTri(iIdxTri, bOnlyPair, tricollector);

        if (true == bSetNew)
        {
            if (m_listBase__.Count < 1)
            {
                return(false);
            }

            int     irandomizeBlocktype = UnityEngine.Random.Range(0, m_itypeblockNum);
            CBASE__ baseBlockLastof     = m_listBase__[m_listBase__.Count - 1];
            baseBlockLastof.setIdxType(irandomizeBlocktype);

            return(true);
        }
        return(false);
    }
Exemplo n.º 13
0
    protected bool Load_BaseBlock_Binary(ref CBaseBlockCollector managerBaseBlock_ref)
    {
        foreach (BaseInfo core in m_stageMap.BlockBaseList)
        {
            CBASE__ baseCurr = new CBASE__();

            baseCurr._v3PositionCenter = core.CenterPos;
            baseCurr.setIdxType(core.Type);
            baseCurr._listIdxTris   = core.CellIndex;
            baseCurr._listv3Pnts    = core.CoreTriPnt;
            baseCurr._listv3PntsSrc = core.CoreTriPntSrc;

            if (baseCurr._listv3PntsSrc.Count > 2)
            {
                managerBaseBlock_ref.m_listBase__.Add(baseCurr);
            }
        }

        managerBaseBlock_ref._SetDrawDebug_Base__All();

        return(false);
    }
    //@ Debug Draw
    public void _SetDrawDebug_Base_Selected()
    {
        if (null == m_drawRenderMesh)
        {
            return;
        }

        if (true == OutRangeOfBase(m_iIdxBase_Selected))
        {
            return;
        }

        _SetUndrawDebug_Base_Selected();

        CBASE__ baseCurr = m_listBase__[m_iIdxBase_Selected];

        Vector3[] arrv3PntsSrc = baseCurr.getArrayPoint_src();

        m_drawRenderMesh.DrawNewRendermesh(m_iIdxDrawBase_Selected,
                                           arrv3PntsSrc,
                                           m_colorBase_Selected,
                                           m_fEpsilon_forZfight_Selected,
                                           CDrawRenderMesh.scaleadjust_render_093);
    }
Exemplo n.º 15
0
 public void AddBaseTower(CBASE__ towerbase)       //  Add base
 {
     m_BaseTower.Add(towerbase);
 }
Exemplo n.º 16
0
    //@ Collect All BaseTower List which calculated Perfect Square.
    static public bool CollectAll_perfectSqre_exceptGoalTri(CNAVICELL[] arrNavicells,
                                                            CTriCollector tricollector,
                                                            ref List <CBASE__> listBase)
    {
        int iCntNaviCell = arrNavicells.Length;


        if (iCntNaviCell < 1)
        {
            Debug.Log("if(iCntNaviCell < 1)");
            return(false);
        }

        List <int> listIdxTrisGoal  = tricollector.m_listTris_naviGoal;
        List <int> listIdxTrisStart = tricollector.m_listTris_naviStart;
        List <int> listTriIR        = new List <int>();

        CNAVICELL.CADJ_TRI[] arrAdjs_ = tricollector.arrayAllTriAdjacent;

        tricollector.collectAll_IsoscellesRightTriangles(ref listTriIR);

        List <int> listTri_Instant__            = new List <int>();
        bool       bValidatedBase_perfectSquare = false;

        foreach (int iIdxTri in listTriIR)
        {
            CNAVICELL.CADJ_TRI adjTri = arrAdjs_[iIdxTri];
            CTRI triCurr = tricollector.getTri(iIdxTri);
            bValidatedBase_perfectSquare = false;

            //@ process skip
            if (true == triCurr.inclinedPlane())
            {
                continue;
            }

            if (-1 < listIdxTrisGoal.BinarySearch(iIdxTri))
            {
                continue;
            }

            if (-1 < listIdxTrisStart.BinarySearch(iIdxTri))
            {
                continue;
            }

            int iEdge_Hyptenuse = triCurr.GetHypotenuseEdge();
            if (CTRI.NULL_TRI_EDGE == iEdge_Hyptenuse)
            {
                continue;
            }

            int iTri_Hypotenuse = adjTri._arrTrisAdjacent[iEdge_Hyptenuse];
            if (iTri_Hypotenuse == CNAVICELL.NULL_CELL)
            {
                continue;
            }

            CTRI triHyptenuse = tricollector.getTri(iTri_Hypotenuse);
            if (triHyptenuse.IsisoscelesRightAngle() == true)
            {
                bValidatedBase_perfectSquare = true;
                listTri_Instant__.Add(iIdxTri);
                listTri_Instant__.Add(iTri_Hypotenuse);
            }

            if (true == bValidatedBase_perfectSquare)
            {
                CBASE__ base__New = new CBASE__();
                for (int iTri_ = 0; iTri_ < listTri_Instant__.Count; ++iTri_)
                {
                    int  iSeqTri_  = listTri_Instant__[iTri_];
                    CTRI triPicked = tricollector.getTri(iSeqTri_);
                    base__New.InsertNewTri(iSeqTri_, triPicked, false);
                }
                bool bAlreadyExisted = false;
                foreach (CBASE__ base__Sub in listBase)
                {
                    if (true == base__Sub.IsSimilar(base__New))
                    {
                        bAlreadyExisted = true;
                        break;
                    }
                }

                if (false == bAlreadyExisted)
                {
                    base__New.CalculateBase__(iIdxTri);
                    listBase.Add(base__New);
                }

                listTri_Instant__.Clear();
            } // if(true==bValidatedBase_perfectSquare)
        }     // foreach(int iIdxTri in listTriIR)

        return(true);
    } // static public bool CollectAll_perfectSqre_exceptGoalTri()
Exemplo n.º 17
0
    public bool LoadStage()
    {
        if (null == m_Filename)
        {
            return(false);
        }
        Release();

        string filepath = m_Forder + m_Filename + m_Ext;

        CFileManager tFile = CFileManager.GetInstance;

        //  load stream
        Stream ms = tFile.LoadFile(filepath);

        if (null == ms)
        {
            return(false);
        }

        BinaryReader br = new BinaryReader(ms);

        //  MapTri
        int count  = 0;
        int count2 = 0;

        count = br.ReadInt32();
        CTRI tri = null;

        for (int i = 0; i < count; i++)
        {
            tri = new CTRI();
            for (int j = 0; j < 3; j++)
            {
                tri._arrv3PT[j].x = br.ReadSingle();
                tri._arrv3PT[j].y = br.ReadSingle();
                tri._arrv3PT[j].z = br.ReadSingle();
                tri._arriIV[j]    = br.ReadInt32();
            }

            tri._v3TriNormal.x    = br.ReadSingle();
            tri._v3TriNormal.y    = br.ReadSingle();
            tri._v3TriNormal.z    = br.ReadSingle();
            tri._arrEdgeLength[0] = br.ReadSingle();
            tri._arrEdgeLength[1] = br.ReadSingle();
            tri._arrEdgeLength[2] = br.ReadSingle();

            AddTriangle(tri);
        }
        //  MapArrageBase
        count = br.ReadInt32();
        CBASE__ towerArrange = null;

        for (int i = 0; i < count; i++)
        {
            towerArrange = new CBASE__();
            count2       = br.ReadInt32();
            for (int j = 0; j < count2; j++)
            {
                towerArrange._listIdxTris.Add(br.ReadInt32());
            }

            count2 = br.ReadInt32();
            for (int j = 0; j < count2; j++)
            {
                Vector3 vec = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
                towerArrange._listv3Pnts.Add(vec);
            }
            //  중앙포지션
            towerArrange._v3PositionCenter.x = br.ReadSingle();
            towerArrange._v3PositionCenter.y = br.ReadSingle();
            towerArrange._v3PositionCenter.z = br.ReadSingle();

            //  삼각형 정보
            count2 = br.ReadInt32();
            for (int j = 0; j < count2; j++)
            {
                Vector3 vec = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
                towerArrange._listv3PntsSrc.Add(vec);
            }

            AddBaseTower(towerArrange);
            m_BaseTowerMeshIndex.Add(towerArrange._listIdxTris[0], i);
            m_BaseTowerMeshIndex.Add(towerArrange._listIdxTris[1], i);
        }
        //  MainCoreList
        count = br.ReadInt32();
        BaseInfo core;

        for (int i = 0; i < count; i++)
        {
            core = new BaseInfo();
            core.CoreLoad(br);
            AddMainCore(core);
        }
        //  SubCoreList
        count = br.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            core = new BaseInfo();
            core.CoreLoad(br);
            AddSubCore(core);
        }
        //  StartBaseList
        count = br.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            core = new BaseInfo();
            core.CoreLoad(br);
            AddStartBase(core);
        }
        //  BlockBaseList
        count = br.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            core = new BaseInfo();
            core.CoreLoad(br);
            AddBlockBase(core);
        }
        //  GoalPoint
        count = br.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            AddGoalPoint(br.ReadInt32());
        }
        //  GroundMonster_StartPoint
        count = br.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            AddGroundStartPoint(br.ReadInt32());
        }
        //  BlockPoint
        count = br.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            AddGroundBlockPoint(br.ReadInt32());
        }

        //  BlockRoadPoint
        count = br.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            AddGroundBlockRoadPoint(br.ReadInt32());
        }

        //  flyPath list
        count = br.ReadInt32();
        CSplineGenerator path = null;

        for (int i = 0; i < count; i++)
        {
            path = new CSplineGenerator();

            path.SetTypeSplineCurve((E_TYPE_SPLINE)br.ReadUInt32());
            path.SetDivisionWeight(br.ReadSingle());

            count2 = br.ReadInt32();
            for (int j = 0; j < count2; j++)
            {
                Vector3 vec = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
                path.SetNewCurvePoint_spline(vec);
            }

            AddFlyPath(path);
        }

        //  파일포인터 맨처음으로
        ms.Seek(0, SeekOrigin.Begin);

        return(true);
    }