Esempio n. 1
0
    public static CCActionOffBoard GetSSAction(GameObject obj, Vector3 target)
    {
        CCActionOffBoard action = ScriptableObject.CreateInstance <CCActionOffBoard> ();

        action.gameobject = obj;
        action.target     = target;
        return(action);
    }
Esempio n. 2
0
    /*the content of OffBoard is also very similar to OnBoard*/
    public bool OffBoard()
    {
        n++;
        Debug.Log(n);
        RaycastHit rayHit;
        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out rayHit, 1 << 8))
        {
            /*Priest OffBoard to Start*/
            if (rayHit.collider.gameObject.tag.Equals("Priest"))
            {
                if (rayHit.collider.gameObject.transform.position.x > 0)
                {
                    /*How to specify the object is on boat ,just check if it is the child of the boat*/
                    if (Boat.transform.position.Equals(BoatPositionOne) && rayHit.collider.gameObject.transform.IsChildOf(Boat.transform))
                    {
                        int       indexOfPositionOnStart = UnOccupiedStartPosition.Count;
                        Transform father = FindRootParent(rayHit.collider.gameObject.transform);
                        Vector3   ObjectOriginalPosition = father.localPosition;
                        /*delete the child of boat,otherwise boat will Onland*/
                        father.SetParent(null);
                        CCActionOffBoard offBoard = CCActionOffBoard.GetSSAction(father.gameObject, UnOccupiedStartPosition[indexOfPositionOnStart - 1]);
                        actionManager.RunAction(offBoard, null);
//						father.position= UnOccupiedStartPosition[indexOfPositionOnStart-1];
                        OccupiedStartPosition.Add(UnOccupiedStartPosition[indexOfPositionOnStart - 1]);
                        UnOccupiedStartPosition.RemoveAt(indexOfPositionOnStart - 1);
                        UnOccupiedBoatPosition.Add(ObjectOriginalPosition);
                        OccupiedBoatPosition.Remove(ObjectOriginalPosition);
                        StartPriests.Add(father.gameObject);
                        BoatPriests.Remove(father.gameObject);
                        return(true);
                    }
                }
                else
                {
                    /*Priest OffBoard to End*/
                    if (Boat.transform.position.Equals(BoatPositionTwo) && rayHit.collider.gameObject.transform.IsChildOf(Boat.transform))
                    {
                        int indexOfPositionOnEnd = UnOccupiedEndPosition.Count;
//						Transform father = rayHit.collider.gameObject.transform.parent;
                        Transform father = FindRootParent(rayHit.collider.gameObject.transform);
                        Vector3   ObjectOriginalPosition = father.localPosition;
                        father.SetParent(null);
                        CCActionOffBoard offBoard = CCActionOffBoard.GetSSAction(father.gameObject, UnOccupiedEndPosition[indexOfPositionOnEnd - 1]);
                        actionManager.RunAction(offBoard, null);
//						father.position= UnOccupiedEndPosition[indexOfPositionOnEnd-1];
                        OccupiedEndPosition.Add(UnOccupiedEndPosition[indexOfPositionOnEnd - 1]);
                        UnOccupiedEndPosition.RemoveAt(indexOfPositionOnEnd - 1);
                        UnOccupiedBoatPosition.Add(ObjectOriginalPosition);
                        OccupiedBoatPosition.Remove(ObjectOriginalPosition);
                        EndPriests.Add(father.gameObject);
                        BoatPriests.Remove(father.gameObject);
                        if (EndDevils.Count == 3 && EndPriests.Count == 3)
                        {
                            checkResult();
                        }
                        return(true);
                    }
                }
            }
            else if (rayHit.collider.gameObject.tag.Equals("Devil"))
            {
                /*Devil OffBoard to Start*/
                if (rayHit.collider.gameObject.transform.position.x > 0)
                {
                    if (Boat.transform.position.Equals(BoatPositionOne) && rayHit.collider.gameObject.transform.IsChildOf(Boat.transform))
                    {
                        int indexOfPositionOnStart = UnOccupiedStartPosition.Count;
//						Transform father = rayHit.collider.gameObject.transform.parent;
                        Transform father = FindRootParent(rayHit.collider.gameObject.transform);
                        Vector3   ObjectOriginalPosition = father.localPosition;
                        father.SetParent(null);
                        CCActionOffBoard offBoard = CCActionOffBoard.GetSSAction(father.gameObject, UnOccupiedStartPosition[indexOfPositionOnStart - 1]);
                        actionManager.RunAction(offBoard, null);
//						father.position= UnOccupiedStartPosition[indexOfPositionOnStart-1];
                        OccupiedStartPosition.Add(UnOccupiedStartPosition[indexOfPositionOnStart - 1]);
                        UnOccupiedStartPosition.RemoveAt(indexOfPositionOnStart - 1);
                        UnOccupiedBoatPosition.Add(ObjectOriginalPosition);
                        OccupiedBoatPosition.Remove(ObjectOriginalPosition);
                        StartDevils.Add(father.gameObject);
                        BoatDevils.Remove(father.gameObject);
                        return(true);
                    }
                }
                else
                {
                    /*Devil OffBoard to End*/
                    if (Boat.transform.position.Equals(BoatPositionTwo) && rayHit.collider.gameObject.transform.IsChildOf(Boat.transform))
                    {
                        int indexOfPositionOnEnd = UnOccupiedEndPosition.Count;
//						Transform father = rayHit.collider.gameObject.transform.parent;
                        Transform father = FindRootParent(rayHit.collider.gameObject.transform);
                        Vector3   ObjectOriginalPosition = father.localPosition;
                        father.SetParent(null);
                        CCActionOffBoard offBoard = CCActionOffBoard.GetSSAction(father.gameObject, UnOccupiedEndPosition[indexOfPositionOnEnd - 1]);
                        actionManager.RunAction(offBoard, null);
//						father.position= UnOccupiedEndPosition[indexOfPositionOnEnd-1];
                        OccupiedEndPosition.Add(UnOccupiedEndPosition[indexOfPositionOnEnd - 1]);
                        UnOccupiedEndPosition.RemoveAt(indexOfPositionOnEnd - 1);
                        UnOccupiedBoatPosition.Add(ObjectOriginalPosition);
                        OccupiedBoatPosition.Remove(ObjectOriginalPosition);
                        EndDevils.Add(father.gameObject);
                        BoatDevils.Remove(father.gameObject);
                        if (EndDevils.Count == 3 && EndPriests.Count == 3)
                        {
                            checkResult();
                        }
                        return(true);
                    }
                }
            }
        }
        Debug.Log("Direction:" + PositionBoatWillGoTo.x + "  StartPriest:" + StartPriests.Count + "  StartDevils:" + StartDevils.Count +
                  "  BoatPriests" + BoatPriests.Count + "  BoatDevils:" + BoatDevils.Count + "  EndPriests:" + EndPriests.Count + "  EndDevils:" + EndDevils.Count);
        return(false);
    }