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()
//@ 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()
//@ 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()
} // 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); }
//@ 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(); }
} // 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); }
//@ Search Triangle public CBASE__ findBaseByTri(int iIdxTri) { CBASE__ baseFind = null; int iBaseFind = findBasebyTri(iIdxTri); if (-1 != iBaseFind) { baseFind = m_listBase__[iBaseFind]; } return(baseFind); }
//@ 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)
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); }
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); }
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); }
public void AddBaseTower(CBASE__ towerbase) // Add base { m_BaseTower.Add(towerbase); }
//@ 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()
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); }