public bool PickHitPoint(Vector2 screenPos, out IHitPoint hitPoint, out GameObject targetGo) { Ray ray = Camera.main.ScreenPointToRay(screenPos); RaycastHit hit; hitPoint = null; targetGo = null; if (Physics.Raycast(ray, out hit, Mathf.Infinity, DefineMaskLayer.MASK_TARGET)) { foreach (IHitPoint c in mHitPoints) { if (c.gameObject == hit.transform.gameObject) { hitPoint = c; targetGo = hit.transform.gameObject; break; } } if (hitPoint == null) { return(false); } return(true); } return(false); }
// TODO: 将继承FSMBase的类整理统一处理 private void OnPlayerInput() { for (int i = 0; i < Define.MAX_PLAYER_NUMBER; ++i) { Player player = ioo.playerManager.GetPlayer(i); // 玩家进入游戏 if (ioo.playerManager.IsPlaying(i)) { // 水标显示 Vector3 pos = Vector3.zero; Camera camera = ioo.gameMode.UICamera; Canvas canvas = ioo.gameMode.UICanvas; if (RectTransformUtility.ScreenPointToWorldPointInRectangle(canvas.transform as RectTransform, screenPos[i], camera, out pos)) { ioo.playerManager.SetWaterPosition(i, pos); } ICharacter character = null; IHitPoint hitPoint = null; GameObject goBind = null; // 选角色图像 if (!ioo.playerManager.HasHead(i) && ioo.gameMode.State == E_GameState.SelectCharacter) { if (ioo.characterSystem.PickSelectCharacter(screenPos[i], out character, out goBind)) { character.UnderAttack(player); } } // 选地图 if (ioo.gameMode.State == E_GameState.SelectMap) { if (ioo.characterSystem.PickSelectMap(screenPos[i], out character, out goBind)) { character.UnderAttack(player); } } if (player.FireTime >= Define.GAME_CONFIG_WATER_DAMAGE_INTERVAL) { player.FireTime = 0; // 游戏中 if (ioo.gameMode.State == E_GameState.Play) { if (ioo.characterSystem.PickCharacter(screenPos[i], out character, out goBind)) { character.UnderAttack(player); } if (ioo.characterSystem.PickHitPoint(screenPos[i], out hitPoint, out goBind)) { hitPoint.UnderAttack(player); } } } else { player.FireTime += Time.fixedDeltaTime; } } } }
public void RemoveHitPoint(IHitPoint hitPoint) { mHitPoints.Remove(hitPoint); }
// 射击点 public void AddHitPoint(IHitPoint hitPoint) { mHitPoints.Add(hitPoint); }