예제 #1
0
    //set the direction that the player object is facing
    private void SetDirection(float x, float y)
    {
        //set the current direction of player
        if (x < 0)
        {
            CurrentDirection = DIRECTIONS.Left;
            flip.flipX       = true;
        }
        else if (x > 0)
        {
            CurrentDirection = DIRECTIONS.Right;
            flip.flipX       = false;
        }
        else if (y < 0)
        {
            CurrentDirection = DIRECTIONS.Down;
            flip.flipX       = false;
        }
        else if (y > 0)
        {
            CurrentDirection = DIRECTIONS.Up;
            flip.flipX       = false;
        }

        //check to see if player is currently moving
        CheckIsMoving();
        //set direction
        animator.SetInteger("direction", (int)CurrentDirection);
    }
예제 #2
0
    // Interface of Player Control from Individual
    public void UpdatePositionsForIndividuals(byte direct, int index)
    {
        DIRECTIONS newDirection = (DIRECTIONS)direct;

        // With Rigidbody
        // allIndividuals[index].velocity = Vector3.zero;
        // allIndividuals[index].angularVelocity = Vector3.zero;

        switch (newDirection)
        {
        case DIRECTIONS.RIGHT:
            // With Rigidbody
            allIndividuals[index].velocity = (Vector3.right * ForceMagnitude);
            break;

        case DIRECTIONS.FRONT:
            // With Rigidbody
            allIndividuals[index].velocity = (Vector3.forward * ForceMagnitude);
            break;

        case DIRECTIONS.LEFT:
            // With Rigidbody
            allIndividuals[index].velocity = (Vector3.left * ForceMagnitude);
            break;

        case DIRECTIONS.BACK:
            // With Rigidbody
            allIndividuals[index].velocity = (Vector3.back * ForceMagnitude);
            break;
        }
    }
예제 #3
0
    /// <summary>
    ///
    /// </summary>
    public void SetViewDirection(DIRECTIONS movingDirection)
    {
        switch (movingDirection)
        {
        // If it's moving up
        // look down
        case DIRECTIONS.UP:
            viewDir = DIRECTIONS.DOWN;
            break;

        // if its moving down
        // look up
        case DIRECTIONS.DOWN:
            viewDir = DIRECTIONS.UP;
            break;

        // if its moving eft
        // look right
        case DIRECTIONS.LEFT:
            viewDir = DIRECTIONS.RIGHT;
            break;

        // if its moving right
        // look left
        case DIRECTIONS.RIGHT:
            viewDir = DIRECTIONS.LEFT;
            break;

        case DIRECTIONS.NONE:
            break;

        default:
            break;
        }
    }
예제 #4
0
    public override void AddOptions(string[] fullString)
    {
        base.AddOptions(fullString);

        string[] directions = Enum.GetNames(typeof(DIRECTIONS));

        bool shouldBreak = false;

        for (int optIndex = 0; optIndex < fullString.Length; ++optIndex)
        {
            for (int dirIndex = 0; dirIndex < directions.Length; ++dirIndex)
            {
                if (directions[dirIndex].ToLower() == fullString[optIndex].ToLower())
                {
                    direction   = (DIRECTIONS)Enum.Parse(typeof(DIRECTIONS), directions[dirIndex]);
                    shouldBreak = true;
                    break;
                }
            }

            if (shouldBreak)
            {
                break;
            }
        }

        visual.transform.rotation = Quaternion.AngleAxis(45.0f * (int)direction, Vector3.forward);
    }
예제 #5
0
 /// <summary>
 /// Constructs a Command with the parameters it's given.
 /// </summary>
 public Command(COMMANDS mainCommand, DIRECTIONS direction, int magnitude, int id)
 {
     MainCommand = mainCommand;
     Direction = direction;
     Magnitude = magnitude;
     ID = id;
 }
예제 #6
0
        public void move(PlayerMemento playerMemento, DIRECTIONS direction)
        {
            if (direction == DIRECTIONS.RIGHT)
            {
                playerMemento.XIndex += 1;
            }
            if (direction == DIRECTIONS.UP)
            {
                playerMemento.YIndex -= 1;
            }
            if (direction == DIRECTIONS.LEFT)
            {
                playerMemento.XIndex -= 1;
            }
            if (direction == DIRECTIONS.DOWN)
            {
                playerMemento.YIndex += 1;
            }

            if (playerMemento.XIndex < 0 || playerMemento.XIndex > 5 || playerMemento.YIndex < 0 || playerMemento.YIndex > 5)
            {
                PlayerMemento p = LoadPrev(playerMemento);
                if (p.XIndex < 0 || p.XIndex > 5 || p.YIndex < 0 || p.YIndex > 5)
                {
                    exitSimulation();
                }
                else
                {
                    playerMemento.value  = p.value;
                    playerMemento.XIndex = p.XIndex;
                    playerMemento.YIndex = p.YIndex;
                }
            }
        }
예제 #7
0
    //private bool CheckDeath()
    //{
    //
    //	if (Parameters.Parameters.Instance.autoMove)
    //	{
    //		return false;
    //	}
    //	return transform.position.y < TileManager.Instance.KillHeight();
    //}

    private static bool AllowedDirection(DIRECTIONS dir)
    {
        switch (dir)
        {
        case DIRECTIONS.NORTH:
            return(Parameters.Parameters.Instance.moveNorth);

        case DIRECTIONS.SOUTH:
            return(Parameters.Parameters.Instance.moveSouth);

        case DIRECTIONS.EAST:
            return(Parameters.Parameters.Instance.moveEast);

        case DIRECTIONS.WEST:
            return(Parameters.Parameters.Instance.moveWest);

        case DIRECTIONS.NORTH_EAST:
            return(Parameters.Parameters.Instance.moveNorthEast);

        case DIRECTIONS.NORTH_WEST:
            return(Parameters.Parameters.Instance.moveNorthWest);

        case DIRECTIONS.SOUTH_EAST:
            return(Parameters.Parameters.Instance.moveSouthEast);

        case DIRECTIONS.SOUTH_WEST:
            return(Parameters.Parameters.Instance.moveSouthWest);

        default:
            throw new ArgumentOutOfRangeException("dir", dir, null);
        }
    }
예제 #8
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="character">The character to check for</param>
    /// <returns>true if it is within a tile spacing</returns>
    public bool IsEnemyNearby(CHARACTERS character)
    {
        Vector2Int characterTilePosition = Vector2Int.zero;
        Vector2    characterPosition     = Vector2.zero;

        // it is already targetting the player
        if (targetObject == playerObject)
        {
            return(false);
        }


        if (character == CHARACTERS.PLAYER)
        {
            characterPosition     = playerObject.transform.position;
            characterTilePosition = MapManager.Instance.GetWorldToTilePos(playerObject.transform.position);
        }

        Vector2Int currentTilePosition = MapManager.Instance.GetWorldToTilePos(transform.position);

        DIRECTIONS characterDirection = GetTargetDirection(characterPosition);

        // it is within 1 tile
        if (Vector2Int.Distance(currentTilePosition, characterTilePosition) <= 1)
        {
            // check if its through the wall
            if (CheckIfClear(characterDirection, characterPosition))
            {
                return(true);
            }
        }

        return(false);
    }
예제 #9
0
파일: TileBase.cs 프로젝트: Xelareip/Tiles
    /*
     * private void Update()
     * {
     *      clickableObj.SetActive(TilePlayer.Instance.IsTileCickable(this));
     *
     *      if (Parameters.Parameters.Instance.swipeControl == false)
     *      {
     *              if (TilePlayer.Instance.IsTileCickable(this))
     *              {
     *                      if (HasInput())
     *                      {
     *                              Vector3 worldPoint = Camera.main.ScreenToWorldPoint(InputPos());
     *
     *                              if (coll.OverlapPoint(worldPoint))
     *                              {
     *                                      TilePlayer.Instance.QueueTile(this);
     *                              }
     *                      }
     *              }
     *      }
     * }*/

    public static float DirectionToAngle(DIRECTIONS dir)
    {
        switch (dir)
        {
        case DIRECTIONS.NORTH:
            return(0.0f);

        case DIRECTIONS.NORTH_WEST:
            return(45.0f);

        case DIRECTIONS.WEST:
            return(90.0f);

        case DIRECTIONS.SOUTH_WEST:
            return(135.0f);

        case DIRECTIONS.SOUTH:
            return(180.0f);

        case DIRECTIONS.SOUTH_EAST:
            return(225.0f);

        case DIRECTIONS.EAST:
            return(270.0f);

        case DIRECTIONS.NORTH_EAST:
            return(315.0f);

        default:
            return(float.MinValue);
        }
    }
예제 #10
0
    /// <summary>
    /// Checks the direc tion before moving in it if the kitten is there
    /// </summary>
    /// <param name="dirToCheck"></param>
    /// <returns></returns>
    public bool CheckForKitten(DIRECTIONS dirToCheck)
    {
        Vector2Int currentTilePos = MapManager.Instance.GetWorldToTilePos(transform.position);
        Vector2Int kittenTilePos  = MapManager.Instance.GetWorldToTilePos(kittenObject.transform.position);

        int counter = 0;

        // Dont check for the kitten if its being chased by the kitten
        if (targetObject == kittenObject)
        {
            return(false);
        }

        while (MapManager.Instance.IsThereTileOnMap(currentTilePos) == false)
        {
            counter++;

            switch (dirToCheck)
            {
            case Detection.DIRECTIONS.UP:
                currentTilePos.y++;
                break;

            case Detection.DIRECTIONS.DOWN:
                currentTilePos.y--;
                break;

            case Detection.DIRECTIONS.LEFT:
                currentTilePos.x--;
                break;

            case Detection.DIRECTIONS.RIGHT:
                currentTilePos.x++;
                break;

            case Detection.DIRECTIONS.NONE:
                break;

            default:
                break;
            }

            if (counter >= SightDistance)
            {
                break;
            }

            // the kitten is along that direction
            if (currentTilePos == kittenTilePos)
            {
                return(true);
            }
        }


        return(false);
    }
예제 #11
0
            MAZE TryStep(Coords coords, DIRECTIONS direction)
            {
                string responseString = string.Empty;
                string requestString  = GetCurrentPathString(coords);

                switch (direction)
                {
                case DIRECTIONS.UP:
                    requestString += "U";
                    break;

                case DIRECTIONS.DOWN:
                    requestString += "D";
                    break;

                case DIRECTIONS.LEFT:
                    requestString += "L";
                    break;

                case DIRECTIONS.RIGHT:
                    requestString += "R";
                    break;
                }

                HttpWebRequest webRequest = WebRequest.CreateHttp(requestUrl + requestString);

                using (WebResponse webResponse = webRequest.GetResponse()) {
                    using (Stream responseStream = webResponse.GetResponseStream()) {
                        using (StreamReader reader = new StreamReader(responseStream)) {
                            responseString = reader.ReadToEnd();
                            if (DEBUG)
                            {
                                Console.Write(requestString + " ");
                            }
                            else
                            {
                                Console.Write("#");
                            }
                        }
                    }
                }

                if (Regex.IsMatch(responseString, "keep moving"))
                {
                    return(MAZE.POSSIBLE);
                }
                if (Regex.IsMatch(responseString, "boom"))
                {
                    return(MAZE.BLOCKED);
                }
                if (Regex.IsMatch(responseString, "off the edge of the world"))
                {
                    return(MAZE.EDGE);
                }
                Console.WriteLine(responseString);
                return(MAZE.END);
            }
예제 #12
0
    public virtual void Start()
    {
        ObjectsInRange = new List <GameObject>();
        // get the player object at start
        playerObject = GameObject.FindGameObjectWithTag("Player");
        ratObject    = GameObject.FindGameObjectWithTag("Prey");
        kittenObject = GameObject.FindGameObjectWithTag("Kitten");

        viewDir = startingDir;
    }
예제 #13
0
    /// <summary>
    /// Call this to check if they detected a target through the wall
    /// If the direction to the target is not empty
    /// It means it was through the wall
    /// </summary>
    /// <param name="dirToCheck">The direction to check</param>
    /// <returns> returns true if its clear </returns>
    public bool CheckIfClear(DIRECTIONS dirToCheck, Vector2 targetPosition)
    {
        Vector2Int currentTilePos = MapManager.Instance.GetWorldToTilePos(transform.position);
        Vector2Int targetTilePos  = MapManager.Instance.GetWorldToTilePos(targetPosition);

        // Debug.Log("Distance between : " + Vector2Int.Distance(targetTilePos, currentTilePos));

        if (Vector2Int.Distance(targetTilePos, currentTilePos) <= 1)
        {
            if (MapManager.Instance.IsThereTileOnMap(currentTilePos) == false && MapManager.Instance.IsThereTileOnMap(targetTilePos) == false)
            {
                return(true);
            }
        }

        //Debug.Log("Direction" + dirToCheck);
        //Debug.Log("Original Position : " + currentTilePos);

        switch (dirToCheck)
        {
        case Detection.DIRECTIONS.UP:
            currentTilePos.y++;
            break;

        case Detection.DIRECTIONS.DOWN:
            currentTilePos.y--;
            break;

        case Detection.DIRECTIONS.LEFT:
            currentTilePos.x--;
            break;

        case Detection.DIRECTIONS.RIGHT:
            currentTilePos.x++;
            break;

        case Detection.DIRECTIONS.NONE:
            break;

        default:
            break;
        }

        //Debug.Log("Check Position" + currentTilePos);


        if (MapManager.Instance.IsThereTileOnMap(currentTilePos) == false)
        {
            return(true);
        }


        return(false);
    }
예제 #14
0
 /// <summary>
 /// The player has hit the edge of the screen
 /// this will set up this script to start moving the camera
 /// </summary>
 /// <param name="a_Dir">Which direction to move</param>
 public void hitEdge(DIRECTIONS a_Dir)
 {
     //if it's already moving then it's probably a mistake
     if (m_CameraMoving)
     {
         return;
     }
     //set up script
     Time.timeScale    = 0.0f;     //stop player/AI from moving
     m_CameraDirection = a_Dir;
     m_CameraMoving    = true;
 }
예제 #15
0
파일: ConveyorMover.cs 프로젝트: jabza/LD30
    void OnMouseUp()
    {
        if(mLastLoc == transform.position)
        {
            if(mDirection == DIRECTIONS.WEST)
                mDirection = DIRECTIONS.NORTH;
            else
                mDirection++;

            transform.rotation *= Quaternion.AngleAxis(-90, Vector3.forward);
        }
    }
예제 #16
0
    //Use this for intialization
    void Start()
    {
        //get the player object's animator component
        animator = GetComponent <Animator>();

        //get the player object's sprite renderer component
        flip = GetComponent <SpriteRenderer>();

        //starting direction
        CurrentDirection = DIRECTIONS.Down;

        lastPos = transform.position;
    }
예제 #17
0
    private bool canIMove(Vector2 newPosition, DIRECTIONS direction)
    {
        bool result = true;

        if ((newPosition.x <= 0 && direction == DIRECTIONS.WEST) || (newPosition.x >= worldBoundaries.x && direction == DIRECTIONS.EAST))
        {
            result = false;
        }
        if ((newPosition.y <= 0 && direction == DIRECTIONS.NORTH) || (newPosition.y >= worldBoundaries.y && direction == DIRECTIONS.SOUTH))
        {
            result = false;
        }
        return(result);
    }
예제 #18
0
파일: PackageMover.cs 프로젝트: jabza/LD30
    void OnTriggerExit2D(Collider2D other)
    {
        if(other.tag.Contains("Conveyor"))
            mColliderCount--;

        if(mColliderCount <= 0 && other.tag != "DestroyedPackage")
        {
            gameObject.tag = "DestroyedPackage";

            mDirection = DIRECTIONS.NONE;
            mDestination = DESTINATION.NONE;

            updateSprite();
        }
    }
예제 #19
0
    public void ListCheck(DIRECTIONS direction, List <BoxScript> list)
    {
        if (!FreePlace)
        {
            if (!list.Contains(this))
            {
                list.Add(this);
            }
            switch (direction)
            {
            case DIRECTIONS.X:
                if (BoxX != null)
                {
                    BoxX.GetComponent <BoxScript>().ListCheck(direction, list);
                }
                break;

            case DIRECTIONS.MINUS_X:
                if (BoxMinusX != null)
                {
                    BoxMinusX.GetComponent <BoxScript>().ListCheck(direction, list);
                }
                break;

            case DIRECTIONS.Z:
                if (BoxZ != null)
                {
                    BoxZ.GetComponent <BoxScript>().ListCheck(direction, list);
                }
                break;

            case DIRECTIONS.MINUS_Z:
                if (BoxMinusZ != null)
                {
                    BoxMinusZ.GetComponent <BoxScript>().ListCheck(direction, list);
                }
                break;

            default:
                break;
            }
        }
    }
예제 #20
0
파일: TileIce.cs 프로젝트: Xelareip/Tiles
    public override void TileReached()
    {
        Quaternion quat = Quaternion.FromToRotation(Vector3.up, transform.position - TilePlayer.Instance.lastPosition);
        DIRECTIONS dir  = AngleToDirection(quat.eulerAngles.z);

        TilePlayer.Instance.ForceTile(neighbors[(int)dir]);

        base.TileReached();

        /*
         * Array directions = Enum.GetValues(typeof(DIRECTIONS));
         * for (int direction = 0; direction < directions.Length; ++direction)
         * {
         *      if (TilePlayer.Instance.LastTile(1).neighbors[direction] == this)
         *      {
         *              TilePlayer.Instance.ForceTile(neighbors[direction]);
         *              return;
         *      }
         * }*/
    }
예제 #21
0
    private TileBase MoveDirection(string dir, bool force = false)
    {
        DIRECTIONS direction = (DIRECTIONS)Enum.Parse(typeof(DIRECTIONS), dir);
        TileBase   rootTile  = GetRootTile();

        if (rootTile == false)
        {
            return(null);
        }
        TileBase target = rootTile.neighbors[(int)direction];

        if (target == null)
        {
            return(null);
        }
        if (!force && !clickableTiles.Contains(target))
        {
            return(null);
        }
        QueueTile(target);
        return(target);
    }
예제 #22
0
    private void move()
    {
        Random rndDirection = new Random();

        canMove = false;
        DIRECTIONS wayDir = (DIRECTIONS)rndDirection.Next(5);

        switch (wayDir)
        {
        case DIRECTIONS.NORTH:
            dir.x = 0;
            dir.y = -speed;
            break;

        case DIRECTIONS.EAST:
            dir.x = speed;
            dir.y = 0;
            break;

        case DIRECTIONS.WEST:
            dir.x = -speed;
            dir.y = 0;
            break;

        case DIRECTIONS.SOUTH:
            dir.x = 0;
            dir.y = speed;
            break;
        }
        cooldown.WaitTime = 1;
        cooldown.Start();

        canMove = canIMove(this.Position + this.dir, wayDir);

        if (!canMove)
        {
            this.dir = -dir;
        }
    }
예제 #23
0
        private void sendUdpMessageNAVZONES(DIRECTIONS d)
        {
            string msgToSend = "NAV ROTATE ";

            switch (d)
            {
            case DIRECTIONS.DIRECTIONS_LEFT:
                msgToSend += "left";
                break;

            case DIRECTIONS.DIRECTIONS_RIGHT:
                msgToSend += "right";
                break;

            case DIRECTIONS.DIRECTIONS_UP:
                msgToSend += "up";
                break;

            case DIRECTIONS.DIRECTIONS_DOWN:
                msgToSend += "down";
                break;
            }
            sendUdpMessage(msgToSend);
        }
예제 #24
0
        public void deplaceJoueur(DIRECTIONS dir)
        {
            int direction = 0;

            switch (dir)
            {
                case DIRECTIONS.LEFT:
                    if (!CurrentRoom.WallLeft)
                        direction = -1;
                    break;

                case DIRECTIONS.UP:
                    if (!CurrentRoom.WallUp)
                        direction = -5;
                    break;

                case DIRECTIONS.RIGHT:
                    if (!CurrentRoom.WallRight)
                        direction = -1;
                    break;

                case DIRECTIONS.DOWN:
                    if (!CurrentRoom.WallDown)
                        direction = 5;
                    break;
            }

            if (direction == 0)
            {
                SoundManager.playSound(@"media\invalid.wav");
                Thread.Sleep(700);
            }
                
            CurrentRoom = CurrentLevel.Rooms[CurrentRoom.Position + direction];
            CurrentRoom.Echo();
        }
예제 #25
0
    /// <summary>
    /// turns DIRECTIONS enum into a unit vector with the direction of the enum
    /// </summary>
    /// <param name="a_Dir">direction to transfer into a vector</param>
    /// <returns>vector of a_Dir</returns>
    public Vector2 getDirectionFromDirection(DIRECTIONS a_Dir)
    {
        Vector3 direction = Vector2.zero;

        switch (a_Dir)
        {
        case DIRECTIONS.LEFT:
            direction.x = -1;
            break;

        case DIRECTIONS.RIGHT:
            direction.x = 1;
            break;

        case DIRECTIONS.DOWN:
            direction.y = -1;
            break;

        case DIRECTIONS.UP:
            direction.y = 1;
            break;
        }
        return(direction);
    }
 public void SetDir(DIRECTIONS dir)
 {
     lookingDir = dir;
 }
예제 #27
0
 public void SetViewDirection(DIRECTIONS movingDirection)
 {
     viewDir = movingDirection;
 }
예제 #28
0
    public bool DetectPlayer()
    {
        // get the tile position
        Vector2Int playerTilePosition = MapManager.Instance.GetWorldToTilePos(playerObject.transform.position);

        // get the current tile position
        Vector2Int kittenTilePosition = MapManager.Instance.GetWorldToTilePos(transform.position);

        DIRECTIONS playerDirection = GetTargetDirection(playerObject.transform.position);

        if (CheckIfClear(playerDirection, playerObject.transform.position))
        {
            // if within 1 tiles
            if (Vector2Int.Distance(playerTilePosition, kittenTilePosition) <= 1)
            {
                if (MapManager.Instance.IsThereTileOnMap(playerTilePosition) == false)
                {
                    DetectPlayerBehvaiour();
                    return(true);
                }
            }
            // Checking for the diagonal
            else if (Vector2Int.Distance(playerTilePosition, kittenTilePosition) <= 2)
            {
                // Check if its above or below
                // if player  is less than the kitten y pos
                if (playerTilePosition.y < kittenTilePosition.y)
                {
                    // player is below
                    // Check if the tile below is empty
                    Vector2Int tileToCheck = kittenTilePosition;
                    tileToCheck.y -= 1;
                    if (MapManager.Instance.IsThereTileOnMap(tileToCheck) == false)
                    {
                        // if that tile is clear
                        // check if the player tile is clear
                        if (MapManager.Instance.IsThereTileOnMap(playerTilePosition) == false)
                        {
                            DetectPlayerBehvaiour();
                            return(true);
                        }
                    }
                }
                if (playerTilePosition.y > kittenTilePosition.y)
                {
                    // it is ontop
                    Vector2Int tileToCheck = kittenTilePosition;
                    tileToCheck.y += 1;
                    if (MapManager.Instance.IsThereTileOnMap(tileToCheck) == false)
                    {
                        // if that tile is clear
                        // check if the player tile is clear
                        if (MapManager.Instance.IsThereTileOnMap(playerTilePosition) == false)
                        {
                            DetectPlayerBehvaiour();
                            return(true);
                        }
                    }
                }
                if (playerTilePosition.x < kittenTilePosition.x)
                {
                    // it is ontop
                    Vector2Int tileToCheck = kittenTilePosition;
                    tileToCheck.x -= 1;
                    if (MapManager.Instance.IsThereTileOnMap(tileToCheck) == false)
                    {
                        // if that tile is clear
                        // check if the player tile is clear
                        if (MapManager.Instance.IsThereTileOnMap(playerTilePosition) == false)
                        {
                            DetectPlayerBehvaiour();
                            return(true);
                        }
                    }
                }
                if (playerTilePosition.x > kittenTilePosition.x)
                {
                    // it is ontop
                    Vector2Int tileToCheck = kittenTilePosition;
                    tileToCheck.x += 1;
                    if (MapManager.Instance.IsThereTileOnMap(tileToCheck) == false)
                    {
                        // if that tile is clear
                        // check if the player tile is clear
                        if (MapManager.Instance.IsThereTileOnMap(playerTilePosition) == false)
                        {
                            DetectPlayerBehvaiour();
                            return(true);
                        }
                    }
                }
                Debug.Log("its 2");
            }
        }


        return(false);
    }
예제 #29
0
파일: PackageMover.cs 프로젝트: jabza/LD30
    void OnTriggerStay2D(Collider2D other)
    {
        if(other.tag.Contains("Conveyor"))
        {
            ConveyorMover con = other.GetComponent<ConveyorMover>();
            if(mDirection == DIRECTIONS.NORTH)
            {
                if(transform.position.y >= other.transform.position.y && transform.position.x > other.transform.position.x-0.5 && transform.position.x < other.transform.position.x+0.5)
                    mDirection = con.getDirection();
            }
            else if(mDirection == DIRECTIONS.EAST)
            {
                if(transform.position.x >= other.transform.position.x && transform.position.y > other.transform.position.y-0.5 && transform.position.y < other.transform.position.y+0.5)
                    mDirection = con.getDirection();
            }
            else if(mDirection == DIRECTIONS.SOUTH)
            {
                if(transform.position.y <= other.transform.position.y && transform.position.x > other.transform.position.x-0.5 && transform.position.x < other.transform.position.x+0.5)
                    mDirection = con.getDirection();
            }
            else if(mDirection == DIRECTIONS.WEST)
            {
                if(transform.position.x <= other.transform.position.x && transform.position.y > other.transform.position.y-0.5 && transform.position.y < other.transform.position.y+0.5)
                    mDirection = con.getDirection();
            }

        }
    }
예제 #30
0
    public override bool DetectRadius()
    {
        // Clear the objects in range
        if (ObjectsInRange.Count > 0)
        {
            ObjectsInRange.Clear();
        }

        // If it detects any objects in it's radius
        if (base.DetectRadius())
        {
            // if both are in the list at the same time
            // check if they are both within range to chase the cat
            if (ObjectsInRange.Contains(playerObject) && ObjectsInRange.Contains(kittenObject))
            {
                DIRECTIONS playerDirection = GetTargetDirection(playerObject.transform.position);
                DIRECTIONS kittenDirection = GetTargetDirection(kittenObject.transform.position);

                // if both are clear
                //  then both can chase the cat
                if (CheckIfClear(playerDirection, playerObject.transform.position) && CheckIfClear(kittenDirection, kittenObject.transform.position))
                {
                    // set the kitten object as the target
                    // it should prioritise the kitten
                    targetObject = kittenObject;
                    targetDir    = GetTargetDirection();

                    // is shocked should only trigger once
                    // to stop it from repeating multiple times
                    if (isTrapped == false)
                    {
                        isShocked           = true;
                        TrappedTilePosition = MapManager.Instance.GetWorldToTilePos(transform.position);
                    }

                    if (m_ShockUI != null)
                    {
                        m_ShockUI.gameObject.SetActive(true);
                    }

                    isTrapped = true;
                }
                else
                {
                    isTrapped = false;
                }
            }
            else
            {
                isTrapped = false;
            }

            // if it is trapped, it shouldnt be able to do anything else
            if (isTrapped)
            {
                return(false);
            }

            //// If it already has a target that it is running from
            //if (targetObject != null)
            //    return false;

            // Loop through the detected objects
            string successfulTag = "";
            foreach (GameObject detectedObj in ObjectsInRange)
            {
                // It will only look for these two objects
                if (detectedObj.tag == "Player" || detectedObj.tag == "Kitten")
                {
                    // Only detect when its idle
                    if (characterState == STATE.IDLE)
                    {
                        //THIS IS A HACK, STORE PREV DATA
                        GameObject PREVtargetObject = targetObject;
                        DIRECTIONS prevTargetDir    = targetDir;

                        // Get the target object
                        targetObject = detectedObj;
                        // Check for the target direction
                        targetDir = GetTargetDirection();

                        // Check if the path to the detected object is clear
                        if (CheckIfClear(targetDir, targetObject.transform.position) == false)
                        {
                            // that target isnt available a danger to the mouse
                            if (successfulTag == "") //if theres nothing just reset
                            {
                                StopMovement();
                            }

                            //reset the data
                            targetObject = PREVtargetObject;
                            targetDir    = prevTargetDir;

                            // check the next if there is
                            continue;
                        }

                        isShocked = true;

                        if (detectedObj.tag == "Kitten")
                        {
                            if (m_ShockUI != null)
                            {
                                m_ShockUI.gameObject.SetActive(true);
                            }
                        }
                        else
                        {
                            elapsedTime = 0.0f;
                        }

                        ////HACK PRIROTIZE KITTEN
                        //if (successfulTag == "Kitten" && detectedObj.tag == "Player")
                        //{
                        //    targetObject = PREVtargetObject;
                        //    targetDir = prevTargetDir;
                        //}
                        //else
                        //{
                        //    // reset it if it tracks the player
                        //    if (detectedObj.tag == "Player")
                        //        elapsedTime = 0.0f;
                        //}

                        // Debug.Log("Mouse IsShocked Changed in line 197" + isShocked);
                        successfulTag = detectedObj.tag;
                    }
                    // if it is a running state when it detects a enemy
                    else if (characterState == STATE.RUNNING)
                    {
                        // if it detects a new enemy while running from the player
                        if (detectedObj != targetObject && targetObject.tag == "Player")
                        {
                            DIRECTIONS detectedObjDir = GetTargetDirection(detectedObj.transform.position);

                            // if the object detected is behind a wall
                            // skip this object because it's not a threat
                            if (CheckIfClear(detectedObjDir, detectedObj.transform.position) == false)
                            {
                                continue;
                            }

                            // it has to be shocked
                            isShocked = true;
                            // Debug.Log("Mouse IsShocked Changed in line 219" + isShocked);
                            StartCoroutine(PlayerShockUITime());

                            StopMovement();
                            mouseMovement.StopMovement();
                            mouseMovement.ResetMovementList();
                        }
                    }
                }

                // If it spots the player or kitten
                // it will try to run away
                //if (detectedObj.tag == "Player" || detectedObj.tag == "Kitten" )
                //{
                //    // if it already has a target
                //    if (targetObject != null)
                //    {
                //        // If it detects the kitten while being chased by the player
                //        if (targetObject != detectedObj && targetObject.tag == "Player")
                //        {
                //            // Make it shocked
                //            isShocked = true;

                //            // stop both the movement
                //            StopMovement();
                //            mouseMovement.StopMovement();
                //            mouseMovement.ResetMovementList();
                //        }
                //    }

                //    // Set the player object as it's current target
                //    targetObject = detectedObj;

                //    targetDir = GetTargetDirection();

                //    // Check the direction if its clear
                //    // if it isn't then they detected an enemy through the wall
                //    //if (CheckIfClear(targetDir) == false && targetObject.tag != "Player")
                //    //{
                //    //    if (characterState == STATE.RUNNING)
                //    //    {
                //    //        mouseMovement.ResetMovementList();
                //    //        mouseMovement.StopMovement();
                //    //    }

                //    //    StopMovement();

                //    //    continue;
                //    //}

                //    // shocked
                //    if (characterState != STATE.RUNNING)
                //        isShocked = true;

                //}
            }

            //if (isShocked && characterState == STATE.IDLE)
            //{
            //    if (targetObject.tag == "Player")
            //        StartCoroutine(PlayerShockUITime());
            //}
        }
        else
        {
            isShocked = false;
        }
        //else
        //{
        //    characterState = STATE.IDLE;
        //    targetObject = null;
        //    targetDir = DIRECTIONS.NONE;
        //}


        return(false);
    }
예제 #31
0
파일: PackageMover.cs 프로젝트: jabza/LD30
 public void setDirection(DIRECTIONS direction)
 {
     mDirection = direction;
 }
예제 #32
0
 private TileBase MoveDirection(DIRECTIONS dir, bool force = false)
 {
     return(MoveDirection(dir.ToString(), force));
 }
예제 #33
0
파일: ConveyorMover.cs 프로젝트: jabza/LD30
 // Use this for initialization
 void Start()
 {
     mDirection = DIRECTIONS.NORTH;
 }
예제 #34
0
    Vector3 getRandomDir()
    {
        DIRECTIONS dir = (DIRECTIONS)Random.Range(0, 4);

        return(directions [(int)dir]);
    }