Esempio n. 1
0
        private bool ActivateTile(AdvancedTileBase tile)
        {
            // No tile, must be moving through walls
            if (tile == null)
            {
                return(true);
            }

            // Bush Flag
            if (tile.is_bush)
            {
                in_bush = true;
                StartCoroutine(map_manager.GrassRustle(pos));
            }
            else
            {
                in_bush = false;
            }

            return(true);
        }
Esempio n. 2
0
        private void Update()
        {
            // Update Animator
            animator.SetInteger(Constants.DIRECTION_ANIMATION, (int)direction);
            if (walking_animation && !stepping_animation)
            {
                animator.SetBool(Constants.WALK_ANIMATION, moved);
            }
            else if (stepping_animation)
            {
                animator.SetBool(Constants.WALK_ANIMATION, true);
            }
            if (invisible)
            {
                foreach (SpriteRenderer sprite in sprites)
                {
                    sprite.enabled = false;
                }
            }
            else
            {
                foreach (SpriteRenderer sprite in sprites)
                {
                    sprite.enabled = true;
                }
            }
            if (in_bush)
            {
                bush_mask.enabled = true;
            }
            else
            {
                bush_mask.enabled = false;
            }

            // Apply Movement
            if (moved)
            {
                // Activate the tile being moved onto
                if (!tile_activated)
                {
                    Vector3 move_dir = pos - transform.position;
                    tile_activated = ActivateTile(move_dir);
                }

                // Move in that direction
                transform.position = Vector3.MoveTowards(transform.position, pos, Time.deltaTime * speed);
            }

            // Tilemap and Event awareness check
            if ((other_moved || moved) && transform.position == pos)
            {
                // Get neighboring tiles
                AdvancedTileBase[] neighbor_tiles = map_manager.GetNeighborTiles(this);
                on_tile    = neighbor_tiles[0];
                up_tile    = neighbor_tiles[1];
                left_tile  = neighbor_tiles[2];
                right_tile = neighbor_tiles[3];
                down_tile  = neighbor_tiles[4];

                // Notify old neighbor events
                foreach (Event e in neighbor_events)
                {
                    if (e != null)
                    {
                        MoveableCharacter character = e.GetComponent <MoveableCharacter>();
                        if (character != null)
                        {
                            character.other_moved = true;
                        }
                    }
                }

                // Get neighboring events
                neighbor_events = event_manager.GetNeighborEvents(this);
                on_event        = neighbor_events[0];
                up_event        = neighbor_events[1];
                left_event      = neighbor_events[2];
                right_event     = neighbor_events[3];
                down_event      = neighbor_events[4];

                // Notify new neighbor events
                foreach (Event e in neighbor_events)
                {
                    if (e != null)
                    {
                        MoveableCharacter character = e.GetComponent <MoveableCharacter>();
                        if (character != null)
                        {
                            character.other_moved = true;
                        }
                    }
                }

                moved       = false;
                other_moved = false;
                if (!tile_activated)
                {
                    tile_activated = ActivateTile(on_tile);
                }
            }
        }