public void SearchAfterTarget(Vector3 myPos) { for (int i = 0; i < TargetHierarchy.Length; i++) //Going Through The TargetHierarchy List. { _Targets = GameObject.FindGameObjectsWithTag(TargetHierarchy [i]); //If Not Null Then There Are Objects In The Scene That Have The Desierd Tag if (_Targets.Length > 0) { _Closest = _Targets [0]; for (int j = 1; j < _Targets.Length; j++) { if (Vector3.Distance(myPos, _Closest.transform.position) > Vector3.Distance(myPos, _Targets [j].transform.position)) //Going Through The Objects Found And Targets The Closes { _Closest = _Targets [j]; } } MyMovementTarget = _Closest.GetComponent <ObjectNodeInfo> (); MyAttackTarget = _Closest.GetComponent <CreatureRoot> (); if (MyAttackTarget == null) { AttackClass = false; } else { AttackClass = true; } return; } } }
public void StartRunning(ObjectNodeInfo me, NodeInfo meNodeInfo, ObjectNodeInfo taget) { if (_TheStartNode == null) { Setup(); } #region Startup Phase // CollisionID = meNodeInfo.MyNodes; for (int i = 0; i < PathfindingNodeID.Length; i++) //'Copying' Over The Objects Pathfinding Node Cost Over { PathfindingNodeID [i] = meNodeInfo.PathfindingNodeID [i]; } for (int i = 0; i < _OpenListAtIndex; i++) //The Used Nodes Is In These Two Lists. So I Only Need To Reset The Nodes Used { _OpenList [i].NodeSearchedThrough = false; } for (int i = 0; i < _ClosedListAtIndex; i++) { _ClosedList [i].NodeSearchedThrough = false; } _OpenListAtIndex = 0; _ClosedListAtIndex = 0; _NodeXPos = Mathf.FloorToInt(_TheStartNode.PosX + (taget.MyCollisionInfo.XNode - me.MyCollisionInfo.XNode)); _NodeYPos = Mathf.FloorToInt(_TheStartNode.PosY + (taget.MyCollisionInfo.YNode - me.MyCollisionInfo.YNode)); if (_NodeXPos >= StressCommonlyUsedInfo.NodesWidth) { _NodeXPos = StressCommonlyUsedInfo.NodesWidth - 1; } else if (_NodeXPos < 0) { _NodeXPos = 0; } if (_NodeYPos >= StressCommonlyUsedInfo.NodesWidth) { _NodeYPos = StressCommonlyUsedInfo.NodesWidth - 1; } else if (_NodeYPos < 0) { _NodeYPos = 0; } _EndNode = _NodeMap [_NodeXPos, _NodeYPos]; _TheStartNode.SetStartNode(_TheStartNode, _EndNode); //Giving The StartNode its Costs _OpenList [_OpenListAtIndex++] = _TheStartNode; //Giving The Search Through List Its First Node #endregion #region A* Algorythm while (_ClosedListAtIndex < StressCommonlyUsedInfo.NodesTotal) //If The ClosedListAtIndex Is Equalt To Or Greater The Total Amount Of Nodes Then This Is False And The Search Is Stopped { _LowerstFScore = 10000000; for (int i = 0; i < _OpenListAtIndex; i++) //Iterating Through The List With Unused Nodes To Find The Node With The Lowerst FCost { if (_OpenList [i].FCost < _LowerstFScore) { _CurrentNode = _OpenList [i]; _NodeIndexSaved = i; _LowerstFScore = _CurrentNode.FCost; } } _ClosedList [_ClosedListAtIndex++] = _CurrentNode; //The Node That Was Chosen From Openlist Is Put In Here _OpenList [_NodeIndexSaved] = _OpenList [--_OpenListAtIndex]; //The Node That Was Added To ClosedList Is Being Removed Here And Replaced With The Last Node In The Openlist if (_CurrentNode == _EndNode) //If True Then A Path Was Found And The Search Is Complete { RemakePath(meNodeInfo); return; } ArrayLengthSaver = _CurrentNode.NeighbourNodess.Length; //This Is An Improvement Rather Then Getting The Length Each i++ (Not Much But Some) for (int i = 0; i < ArrayLengthSaver; i++) { _NodeHolder = _CurrentNode.NeighbourNodess [i]; if (_NodeHolder.NodeSearchedThrough == false) //If false Then The Node Havent Been Searched Through And Info Need To Be Set { _NodeHolder.MapCollision = 0; //Giving The Node Its Value For Calculating Move Cost // _NodeHolder.MapCollision = CollisionID [_NodeHolder.PosX, _NodeHolder.PosY];//Giving The Node Its Value For Calculating Move Cost _NodeHolder.SetParentAndHCost(_CurrentNode, _EndNode); // Static_Node.SetParentAndHCost(_NodeHolder, _CurrentNode, _EndNode); _OpenList [_OpenListAtIndex++] = _NodeHolder; } else if (_CurrentNode.GCost < _NodeHolder._ParentNode.GCost) //If Current.Gcost Is Less Then Nodeholder.parent.Gcost Then A New ParentNode Is Set ...... If Errors Occur Use (_NodeHolder.GCost > _CurrentNode.GCost + (PathfindingNodeID[CollisionID[_NodeHolder.PosX, _NodeHolder.PosY]] * 1.4f)) { _NodeHolder.SetNewParent(_CurrentNode); // Static_Node.SetNewParent(_NodeHolder, _EndNode); } } } #endregion Debug.LogWarning("No Path Detected, Initiating Self Destruct Algorythms.... 3..... 2..... 1..... ."); }
public static void RemoveFromUpdateAllTheTimeList(ObjectNodeInfo me) { UpdateAllTheTimeObjects.Remove(me); }
public static void AddToRemoveSpell(ObjectNodeInfo me) { RemoveSpellEffect.Add(me); }
public static void RemoveEnvourmental(ObjectNodeInfo me) { UpdateEnviourmentalObjects.Remove(me); // testin._WalkCost.RemoveEnviourmentEffect (me.MyCollisionInfo); }
public static void RemoveFromGround(ObjectNodeInfo me) { UpdateGroundObjects.Remove(me); // testin._WalkCost.RemoveGroundObjects (me.MyCollisionInfo); }