Ejemplo n.º 1
0
 /// <summary>
 /// Call this method to get shift point.
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 public Transform GetScreenTeleportPos(InvisibleType type)
 {
     if (type == InvisibleType.BottomInvisible)
     {
         return(_TopWallObject);
     }
     else
     {
         return(null);
     }
 }
Ejemplo n.º 2
0
 internal void SetLODVisible(bool visible)
 {
     if (visible)
     {
         invisibleType &= ~InvisibleType.LOD;
     }
     else
     {
         invisibleType |= InvisibleType.LOD;
     }
 }
Ejemplo n.º 3
0
    /// <summary>
    /// Call this method to do diving action to the player
    /// </summary>
    private void Diving()
    {
        // Unregistered from formation.
        _enemyFormation.RemoveEnemy(this);

        // If it's still on path.
        if (_currentIndex < _path.BezierPathList.Count)
        {
            float distance = Vector3.Distance(_path.BezierPathList[_currentIndex], transform.position);
            transform.position = Vector3.MoveTowards(transform.position, _path.BezierPathList[_currentIndex], _speed * Time.deltaTime);
            EnemyRotation(_path.BezierPathList[_currentIndex]);

            if (distance <= _reachOffset)
            {
                _currentIndex++;
            }
        }
        // Else, move toward to the last known player's spot.
        else
        {
            if (_target == null)
            {
                _target = GameManager.Instance.PlayerObject.transform;
                EnemyRotation(_target.position);
                _direction = _target.position - transform.position;
                _direction.Normalize();
            }

            transform.position += _direction * Speed * Time.deltaTime;

            InvisibleType visibleResult = GameManager.Instance.CheckObjectVisible(transform.position);
            if (visibleResult == InvisibleType.BottomInvisible)
            {
                _target = null;
                Transform refPos = GameManager.Instance.GetScreenTeleportPos(visibleResult);
                transform.position = new Vector3(transform.position.x, refPos.position.y, transform.position.z);
                ResetData();
            }
        }

        // Shoot the bullet when it's ready.
        if (_lastShotTime <= 0)
        {
            ShootBullet();
        }
        else
        {
            _lastShotTime -= Time.deltaTime;
        }
    }
Ejemplo n.º 4
0
    /// <summary>
    /// Call this method to leave the screen and move to the other side of the screen.
    /// </summary>
    /// <returns></returns>
    private IEnumerator LeaveScreen()
    {
        InvisibleType visibleResult = GameManager.Instance.CheckObjectVisible(transform.position);

        while (visibleResult == InvisibleType.Visible)
        {
            transform.position += Vector3.down * Speed * Time.deltaTime;
            visibleResult       = GameManager.Instance.CheckObjectVisible(transform.position);
            yield return(new WaitForEndOfFrame());
        }

        Transform refPos = GameManager.Instance.GetScreenTeleportPos(visibleResult);

        transform.position = new Vector3(transform.position.x, refPos.position.y, transform.position.z);
        _enemyState        = EnemyStates.PathFormation;
        _currentIndex      = 0;
        _isShooting        = false;
    }
Ejemplo n.º 5
0
    /// <summary>
    /// Call this method to do diving action to the player
    /// </summary>
    private void Diving()
    {
        // Unregistered from formation.
        _enemyFormation.RemoveEnemy(this);

        // If it's still on path.
        if (_currentIndex < _path.BezierPathList.Count)
        {
            float distance = Vector3.Distance(_path.BezierPathList[_currentIndex], transform.position);
            transform.position = Vector3.MoveTowards(transform.position, _path.BezierPathList[_currentIndex], _speed * Time.deltaTime);
            EnemyRotation(_path.BezierPathList[_currentIndex]);

            if (distance <= _reachOffset)
            {
                _currentIndex++;
            }
        }
        // Else, move toward to the last known player's spot.
        else
        {
            if (_target == null)
            {
                _target = GameManager.Instance.PlayerObject.transform;
                EnemyRotation(_target.position);
                _direction = _target.position - transform.position;
                _direction.Normalize();
            }

            transform.position += _direction * Speed * Time.deltaTime;

            // If it move out of the camera, move it to the other side of the camera and move back to it's formation.
            InvisibleType visibleResult = GameManager.Instance.CheckObjectVisible(transform.position);
            if (visibleResult == InvisibleType.BottomInvisible)
            {
                _target = null;
                Transform refPos = GameManager.Instance.GetScreenTeleportPos(visibleResult);
                transform.position = new Vector3(transform.position.x, refPos.position.y, transform.position.z);
                _enemyState        = EnemyStates.PathFormation;
                _currentIndex      = 0;
            }
        }
    }
Ejemplo n.º 6
0
        /// <summary>
        /// интерфейс для увеличения производительности клиентов и удобства игроков
        /// </summary>
        /// <param name="player"> игрок, для которого происходит обновление интерфейса </param>
        /// <param name="playersList"> все те игроки сущности который обновляются для "player" </param>
        /// <param name="type"> тип изменённого интерфейса </param>
        public static void TakeInvisible(Player player, Player[] playersList, InvisibleType type = InvisibleType.AdditionMembers)
        {
            if (type == InvisibleType.None)
            {
                Type.TryGetValue(player.Username, out type);
            }
            else
            {
                Type[player.Username] = type;
            }
            //if (type == InvisibleType.All || type == InvisibleType.AdditionMembers)
            //{
            bool Continue = false;

            foreach (Player p in playersList)
            {
                if (p.Permission != "GUEST")
                {
                    continue;
                }
                //this code can be edited <begin>
                Island island = null;
                SkyBlock.Islands.TryGetValue(player.Username, out island);
                if (island != null && island != new Island(player.Level) && type != InvisibleType.All)
                {
                    if (p.Username == island.Owner)
                    {
                        p.SpawnToPlayers(new Player[] { player });
                        continue;
                    }
                    foreach (string member in island.Members)
                    {
                        if (member == p.Username)
                        {
                            Console.WriteLine("bag1");
                            p.SpawnToPlayers(new Player[] { player });
                            Continue = true;
                            break;
                        }
                    }
                }
                //this code can be edited <end>
                if (Continue)
                {
                    Continue = false;
                    continue;
                }

                if (type == InvisibleType.All || type == InvisibleType.AdditionMembers)
                {
                    p.DespawnFromPlayers(new Player[] { player });
                }
                if (type == InvisibleType.Anyone)
                {
                    p.SpawnToPlayers(new Player[] { player });
                }
            }
            //}
            //if (type == InvisibleType.Anyone)
            //{
            //    foreach (Player p in playersList)
            //    {
            //        p.SpawnToPlayers(new Player[] { player });
            //    }
            //}
        }