/// <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); } }
internal void SetLODVisible(bool visible) { if (visible) { invisibleType &= ~InvisibleType.LOD; } else { invisibleType |= InvisibleType.LOD; } }
/// <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; } }
/// <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; }
/// <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; } } }
/// <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 }); // } //} }