} // public void Update_objWalk(float fTimeDelta) //@ collect collide objects to sorteddictionary protected override void OnTriggerEnter(Collider colliderOther) { UnitWalking unitwalkingColliderOther = colliderOther.gameObject.GetComponentInChildren<UnitWalking>(); if (null == unitwalkingColliderOther) { return; } lock (_lock) { m_listCollides.Add(unitwalkingColliderOther.id, Time.time); } }
protected override void OnTriggerExit(Collider colliderOther) { base.OnTriggerExit(colliderOther); UnitWalking unitwalkingColliderOther = colliderOther.gameObject.GetComponentInChildren<UnitWalking>(); if (null == unitwalkingColliderOther) { return; } lock (_lock) { m_listCollides.Remove(unitwalkingColliderOther.id); } }
void OnTriggerEnter(Collider other) { UnitRange range = other.GetComponent <UnitRange>(); if (range != null) { if (m_CoreType == 1) // maincore는 모든유닛들이 공격 { UnitBase unit = range.transform.root.GetComponentInChildren <UnitBase>(); unit.AddDestroyTarget(m_CoreID); } else // subcore는 지상유닛만 공격함 { UnitWalking unit = range.transform.root.GetComponentInChildren <UnitWalking>(); if (unit != null) { unit.AddDestroyTarget(m_CoreID); } } } }
} // protected void loadingProcess_Binary //@ Initialize managements. public void Initialize(processResource resources) { if (null == resources) { Debug.Log("ERROR(critical) all gameobjectProcessResource is null."); return; } _modeTool = true; //@ re-link resource all. m_datanavimeshs = resources._navimeshResource; m_unitFactory_ = resources._unitfactory; m_processInput = resources._processInput; m_curvePathUnit_src = resources._curvePathUnit_src; m_curvePathLineDraw_src = resources._curvePathLineDraw_src; m_drawText3D_src = resources._drawText3D_src; m_unitFlying_src = resources._unitFlying_src; m_unitWalking_src = resources._unitWalking_src; m_selectBox_src = resources._selectBox_src; m_combo_src = resources._combo_src; _IdxKeyNavi = m_datanavimeshs.StartNaviMesh; m_speedmove_unitwalking = m_processInput.velocity_unitwalking; m_speedmove_unitflying = m_processInput.velocity_unitflying; //@ Construct m_baseTowerCollector = new CBaseTowerCollector(); m_baseCoreCollector = new CBaseCoreCollector(); m_baseCoresubCollector = new CBaseCoreSubCollector(); m_baseStartCollector = new CBaseStartCollector(); m_baseBlockCollector = new CBaseBlockCollector(); m_toolmoduleNavimesh = new CToolModuleNavimesh(); m_intervalUnitWalking = new IntervalUnitWalking(); //@ Initialize m_processInput.InitProcessInput(this); m_toolmoduleNavimesh.InitNaviMeshTool(); m_baseTowerCollector.InitBaseCollector(); m_baseCoreCollector.InitBaseCollector(); m_baseCoresubCollector.InitBaseCollector(); m_baseStartCollector.InitBaseCollector(); m_baseBlockCollector.InitBaseBlockCollector(m_processInput._blockbasetypes.Length); //@ Initialize all managers bool bResult = false; bResult = resetGlobal(_IdxKeyNavi, m_processInput._loadfrom_geometry); if (false == bResult) { Debug.Log("ERROR. resetGlobal().//"); } //@ Application execute mode, which is naviscene or gamescene processCycle.APPLICATION_MODE_NAVITOOL = true; GameContext gamecontext = GameContext.GetInstance; gamecontext.ShowDebugInfo = false; } // void Initialize
} // public void resetGlobal //@ Loading All Navi Process From script data. protected bool loadingProcess_Binary(int iIdxKeyNavi) { bool bResultProcess = false; m_stageMap.m_Filename = m_datanavimeshs.getNaviMeshName(iIdxKeyNavi); bool IsLoadMap = m_stageMap.LoadStage(); { //@ Construct All Triangle bResultProcess = resetGlobal_TrianglesAll_LoadBinaryFile(m_meshNavigation_global); if (false == bResultProcess) { Debug.Log("Error. false == bResultProcess.//"); } //@ Set constant objects to start position bResultProcess = resetGlobal_constantObjects(m_triCollector, false); if (false == bResultProcess) { Debug.Log("Notice. false==resetGlobal_constantObjects().//"); } //@ Intiailzie basemanets { LinkTriCollectorToAllBase(ref m_baseTowerCollector, ref m_baseCoreCollector, ref m_baseCoresubCollector, ref m_baseStartCollector, ref m_baseBlockCollector, m_triCollector); } if (true == IsLoadMap) { //@ BaseTower,BaseCore-Sub,BaseCore Load_BaseTower_Binary(ref m_baseTowerCollector); Load_BaseCore_Binary(ref m_baseCoreCollector); Load_BaseCoreSub_Binary(ref m_baseCoresubCollector); Load_BaseStart_Binary(ref m_baseStartCollector); Load_BaseBlock_Binary(ref m_baseBlockCollector); //@ Load Curve Path through script bResultProcess = Load_CurvePath_Binary(ref m_SplineCurve); if (false == bResultProcess) { Debug.Log("loadingProcess_Binary Load_CurvePath_Binary_error. //"); } } //@ Construct Navigation bResultProcess = resetGlobal_NavigationCells(m_triCollector, ref m_meshNavigation_global); if (false == bResultProcess) { Debug.Log("Notice. false==resetGlobal_NavigationCells().//"); } //@Initialze UnitWalking UnitWalking.SetStatusCellToCell(); } return(true); } // protected void loadingProcess_Binary
public bool resetGlobal(int iIdxKeyNavi, bool bInitFromGeometry) { if (iIdxKeyNavi < 0) { return(false); } _IdxKeyNavi = iIdxKeyNavi; bool bResultProcess = false; //@ Clear all managers bResultProcess = clearGLOBAL(true); if (false == bResultProcess) { Debug.Log("Error. clearGLOBAL()!/////"); } //@ Instantiate NaviMesh m_meshNavigation_global = m_datanavimeshs.getNavigationMesh(iIdxKeyNavi); m_meshNavigation_global.InitializeNaviMesh(); m_triCollector = m_meshNavigation_global.triCollector; m_SplineCurve = m_meshNavigation_global.splinecurve; if (true == bInitFromGeometry) { //@ Construct All Triangle bResultProcess = resetGlobal_TrianglesAll(m_meshNavigation_global); if (false == bResultProcess) { Debug.Log("Error!.//"); } //@ Set constant objects to start position bResultProcess = resetGlobal_constantObjects(m_triCollector, false); if (false == bResultProcess) { Debug.Log("Error!.//"); } //@ Intiailzie basemanets LinkTriCollectorToAllBase(ref m_baseTowerCollector, ref m_baseCoreCollector, ref m_baseCoresubCollector, ref m_baseStartCollector, ref m_baseBlockCollector, m_triCollector); //@ Re-load navi cells from template pre-loads. LoadNaviFromTemplate(); //@ Load bases. Load_BaseTower_Binary(ref m_baseTowerCollector); Load_BaseCore_Binary(ref m_baseCoreCollector); Load_BaseCoreSub_Binary(ref m_baseCoresubCollector); Load_BaseStart_Binary(ref m_baseStartCollector); Load_BaseBlock_Binary(ref m_baseBlockCollector); //@ Load Curve Path through script bResultProcess = Load_CurvePath_Binary(ref m_SplineCurve); if (false == bResultProcess) { Debug.Log("loadingProcess_Binary Load_CurvePath_Binary_error. //"); } //@ Construct Navigation bResultProcess = resetGlobal_NavigationCells(m_triCollector, ref m_meshNavigation_global); if (false == bResultProcess) { Debug.Log("Error!.//"); } //@Initialze UnitWalking UnitWalking.SetStatusCellToCell(); } // if (true == bInitFromGeometry) else { //@ Load using script. loadingProcess_Binary(iIdxKeyNavi); } // if (false == bInitFromGeometry) //@ Input Process Initialize m_processInput.resetInput(this); m_intervalUnitWalking.InitIntervalUnitWalking(m_triCollector); return(true); } // public void resetGlobal
} // void calculatePosCollision(Vector3 v3DirForceCollide, float fTimeDelta, Vector3 v3PosObject, CNaviMesh meshNavi) bool Update_Collision_sameforce(float fTimeDelta, CNaviMesh meshNavi, ref SortedDictionary<int, float> listCollider) { //@1.Forced setting, Cell wasn't prepared go to way to goal. if (false == _bProcessWalking_Static) { return false; } //@2.No landing mesh. if (null == meshNavi) { return false; } UnitPool unitpool = UnitPool.GetInstance; //@ 1 more colliders if (listCollider.Count > 0) { //@ If unit is null, Delete unit from collideList. List<UnitWalking> listCollideCollect = new List<UnitWalking>(); ICollection<int> collectionID = listCollider.Keys; List<int> listcollideremove = new List<int>(); foreach (int idunit in collectionID) { UnitWalking unitWalking = unitpool[idunit] as UnitWalking; if (null == unitWalking) { listcollideremove.Add(idunit); } else { if (true == unitWalking.IsUnitDie()) { listcollideremove.Add(idunit); } else { float fdistInterEstimate = (unitWalking.m_fRadius_aabb * unitWalking.m_fRadius_aabb + m_fRadius_aabb * m_fRadius_aabb); float fdistInterCurr = (positionUnit - unitWalking.positionUnit).sqrMagnitude; if (fdistInterEstimate > fdistInterCurr) { listCollideCollect.Add(unitWalking); } } } } // foreach (int idunit in collectionID) //@ for safety elimination foreach (int idunitremove in listcollideremove) { listCollider.Remove(idunitremove); } if (listCollideCollect.Count == 0) { return false; } Vector3 v3DirForceCollide = Vector3.zero; Vector3 v3PosCurrent = positionUnit, v3PosOther, v3DistanceOther; int iCntActualCollide = 0; foreach (UnitWalking colliderUnitWalking in listCollideCollect) { v3PosOther = colliderUnitWalking.positionUnit; v3DistanceOther = (positionUnit - v3PosOther).normalized; if (colliderUnitWalking.IsUnitAttack()) { v3DistanceOther = v3DistanceOther.normalized * spdcollision_unit; } v3DirForceCollide = v3DirForceCollide + v3DistanceOther; iCntActualCollide++; } v3DirForceCollide = v3DirForceCollide.normalized; if (Vector3.zero != v3DirForceCollide) { calculatePosCollision(v3DirForceCollide, fTimeDelta, v3PosCurrent, meshNavi); } } // if (listCollider.Count > 0) return true; } // void Update_Collision_sameforce()