예제 #1
0
    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;
            }
        }
    }
예제 #2
0
    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);
    }