// GET: /AccountInfo/ public ActionResult AccountInformation(string id) { Response.Cookies.Remove("UserId"); // Account a = logic.Get(id); List <Membership> mems = a.Memberships.ToList(); List <TeamDisplay> teamDisplay = new List <TeamDisplay>(); foreach (Membership m in mems) { if (m.Status.IsMember()) { Team team = tLogic.Get(m.TeamId); TeamDisplay td = new TeamDisplay(team.Name, m.Status, team.Id); teamDisplay.Add(td); } } AccountInformationViewModel aivm = new AccountInformationViewModel(); aivm.Birthdate = a.Birthdate; aivm.EarnedBadges = EarnedBadges(a); aivm.FullName = a.FullName; aivm.Height = a.Height; aivm.PictureUrl = a.PictureUrl; aivm.PreferredName = a.PreferredName; aivm.Sex = a.Sex; aivm.Teams = teamDisplay; aivm.UnearnedBadges = UnearnedBadges(a); aivm.Weight = a.Weight; aivm.Zip = a.Zip; return(View(aivm)); }
/// <summary> /// 最近的建筑 /// </summary> /// <param name="list"></param> /// <returns></returns> private static List <TeamDisplay> GetClosestBuilding(Transform shipTrans, List <TeamDisplay> list) { List <TeamDisplay> result = new List <TeamDisplay>(); List <TeamDisplay> all = GetAllBuilding(list); float resultDistance = float.MaxValue; float distance = float.MaxValue; TeamDisplay trans = null; for (int i = 0; i < list.Count; i++) { Transform tempTrans = all[i].GetTeamGo().transform; // 获取距离最远的 distance = GetDistance(shipTrans, tempTrans); if (resultDistance > distance) { resultDistance = distance; trans = all[i]; } } if (trans != null) { result.Add(trans); } return(result); }
/// <summary> /// 能量最低的船 /// </summary> /// <param name="list"></param> /// <returns></returns> private static List <TeamDisplay> GetEnergyLowestShip(List <TeamDisplay> list) { List <TeamDisplay> result = new List <TeamDisplay>(); float tempValue = float.MaxValue; TeamDisplay trans = null; for (int i = 0; i < list.Count; i++) { // 获取能量最低的 ClientShip ship = list[i].GetShip(); if (ship == null) { continue; } if (tempValue > ship.Energy) { tempValue = ship.Energy; trans = list[i]; } } if (trans != null) { result.Add(trans); } return(result); }
public static BattleShipInfo Create(Transform parentTrans, TeamDisplay team, string name, float radius, bool isPlayer, bool isAdvancedShip) { GameObject go = new GameObject("BattleShipInfo_" + (isPlayer ? "Player" : "Enemy")); go.transform.parent = UIManager.SceneUICanvas.transform; go.transform.localPosition = new Vector3(99999, 99999, 99999); go.transform.localEulerAngles = Vector3.zero; go.transform.localScale = Vector3.one; string prefabName; if (isPlayer) { prefabName = isAdvancedShip ? "battleshipinfo_ad_p" : "battleshipinfo_low_p"; } else { prefabName = isAdvancedShip ? "battleshipinfo_ad_e" : "battleshipinfo_low_e"; } Global.CreateUI(prefabName, go); BattleShipInfo uiScript = go.AddComponent <BattleShipInfo>(); uiScript.Init(parentTrans, team, name, radius); return(uiScript); }
private static bool IsInSkillRange(Transform trans1, TeamDisplay ship2, proto.SkillReference reference) { int vol = ship2.GetShip().Reference.vol; Transform trans2 = ship2.GetTeamGo().transform; return(IsInSkillRange(trans1, trans2, reference, vol)); }
private IEnumerator ShowAOE(List <BulletTarget> targetList, Vector3 position, ClientSkill skill) { if (skill.Prop.skill_select_type != Def.SkillSelectType.PlayerSelect) { StartCoroutine(UpdatePosition()); CoroutineJoin join = new CoroutineJoin(AssetLoader.Instance); for (int i = 0; i < targetList.Count; i++) { BulletTarget bulletTarget = targetList[i]; TeamDisplay target = bulletTarget.Target; if (target == null) { continue; } join.StartSubtask(ShowHurtEffect(target, bulletTarget.delayFrame)); } yield return(join.WaitForAll()); } else { Global.ShowHurtEffect(null, HurtEffect_, position); } yield return(null); StartCoroutine(WaitAndDestroy(true, 2f)); }
/// <summary> /// 在list里找到和shipTrans最远的船 /// </summary> /// <param name="shipTrans"></param> /// <param name="list"></param> /// <returns></returns> private static List <TeamDisplay> GetFarthestShip(Transform shipTrans, List <TeamDisplay> list) { List <TeamDisplay> result = new List <TeamDisplay>(); if (list == null) { return(result); } float resultDistance = 0; float distance = 0; TeamDisplay trans = null; for (int i = 0; i < list.Count; i++) { Transform tempTrans = list[i].GetTeamGo().transform; // 获取距离最远的 distance = GetDistance(shipTrans, tempTrans); if (resultDistance < distance) { resultDistance = distance; trans = list[i]; } } if (trans != null) { result.Add(trans); } return(result); }
private IEnumerator ShowHurtEffect(TeamDisplay targetTeam, float delayFrame) { yield return(new WaitForSeconds(FightServiceDef.FRAME_INTERVAL_TIME_F * delayFrame)); ShipDisplay targetShip = targetTeam.GetHurtShip(); if (targetTeam == null) { yield break; } if (AttackTrans_ == null) { yield break; } if (targetShip == null) { yield break; } Transform trans = targetShip.GetTransformByName(targetShip.GetHitPoint(AttackTrans_.position.x, SpellType_)); if (trans == null) { trans = targetShip.Trans; } Global.ShowHurtEffect(trans, HurtEffect_, trans.position); }
/// <summary> /// 通过id得到所属队伍 /// </summary> /// <param name="fightID"></param> /// <returns></returns> public TeamDisplay GetTeamDisplay(int fightID) { Dictionary <int, TeamDisplay> list = GetTeamDisplayList(fightID); TeamDisplay result = null; list.TryGetValue(fightID, out result); return(result); }
private IEnumerator CreateShip(bool bPlayer, ClientShip clientShip) { if (clientShip == null) { Debug.LogError("can't create,clientShip is null"); yield break; } Ship ship = AssetLoader.GetShipDefine(clientShip.Reference.model_res); if (ship == null) { Debug.LogError("can't create ship,id is:" + clientShip.Reference.id + ",modelres is:" + clientShip.Reference.model_res); yield break; } TeamDisplay display = new TeamDisplay(); List <GameObject> shipList = new List <GameObject>(); int stackNum = 1; if (clientShip.Reference.stack) { stackNum = clientShip.Reference.stack_num; } for (int i = 0; i < stackNum; i++) { GameObject shipGo = AssetLoader.GetInstantiatedGameObject(ship.ModelPath); if (!shipGo) { yield return(StartCoroutine(AssetLoader.PreloadShipModel(ship))); shipGo = AssetLoader.GetInstantiatedGameObject(ship.ModelPath); } AssetLoader.ReplaceShader(shipGo); shipGo.name = (bPlayer ? "PlayerShip" : "EnemyShip") + clientShip.InFightID; if (clientShip.IsCommanderShip()) { shipGo.name += "_Commander"; } AssetLoader.SetShowParts(ship, shipGo); Animation animation = shipGo.GetComponent <Animation>(); if (animation != null) { animation.cullingType = AnimationCullingType.AlwaysAnimate; } shipList.Add(shipGo); } display.Init(clientShip, ship, shipList, bPlayer); if (bPlayer) { PlayerTeamDisplayList.Add(clientShip.InFightID, display); } else { EnemyTeamDisplayList.Add(clientShip.InFightID, display); } }
/// <summary> /// 战斗回调 /// </summary> /// <param name="obj"></param> private void BattleSys_EventOnFightFrameInfo(proto.S2CFightFrameInfo obj) { if (UserStatusPanel.Instance != null) { UserStatusPanel.Instance.ShowTime(obj.fighttick / 1000); } for (int i = 0; i < obj.underattacklist_size(); i++) { proto.UnderAttackInfo underAttackInfo = obj.underattacklist(i); TeamDisplay display = GetTeamDisplay(underAttackInfo.unitid); display.ModifyHp(underAttackInfo); } for (int i = 0; i < obj.behaviorsequences_size(); i++) { proto.UnitBehavior unit = obj.behaviorsequences(i); TeamDisplay display = GetTeamDisplay(unit.unitid); if (unit.breakaway) { display.BreakAway(); continue; } if (unit.has_position()) { display.Move(((float)unit.position.posx) / 10000f, ((float)unit.position.posz) / 10000f, unit.position.movetype); } // 部件开火信息表 for (int eventIndex = 0; eventIndex < unit.partfireevent_size(); eventIndex++) { proto.PartFireEvent fireEvent = unit.partfireevent(eventIndex); if (fireEvent == null) { Debug.LogError("PartFireEvent is null"); continue; } display.ShipFire(fireEvent); } } for (int i = 0; i < obj.useskill_size(); i++) { proto.UseSkill skill = obj.useskill(i); if (skill.skillstage == Def.SkillStage.Sing && EventOnSkillSing != null) { EventOnSkillSing(skill.skillid); } else if (skill.skillstage == Def.SkillStage.Casting && EventOnSkillTrigger != null) { EventOnSkillTrigger(skill.skillid); } TeamDisplay display = GetTeamDisplay(skill.unitid); display.UseSkill(skill); } }
/// <summary> /// 检查旗舰的范围显示是否需要重置 /// </summary> public static void CheckCommanderAttackRange() { TeamDisplay team = GetCommanderShipTeam(); if (team == null) { return; } team.CheckSkillRange(); }
public void FoldSkillPanel() { TeamDisplay display = BattleSceneDisplayManager.GetCommanderShipTeam(); if (display == null) { return; } PanelAnim_.SetTrigger("skill_panel_hide"); BattleSceneDisplayManager.ResetSkill(); }
/// <summary> /// 显示旗舰技能范围 /// </summary> public static void ShowCommanderShipSkillRange() { TeamDisplay team = GetCommanderShipTeam(); if (team == null) { return; } team.ShowRange(false); team.ShowSkillRange(true, SelectedSkillIndex); Instance.CheckCommanderShipSkillTarget(); }
void accept() { Character a = currentCharacter; Team.team[Team.nbSelected] = a; TeamDisplay t = GameObject.Find("Team").GetComponent <TeamDisplay>(); t.AddCharacter(Team.nbSelected); Team.nbSelected += 1; currentPlayer.GetComponent <PlayerAnimation>().accept(); // change light for 1.5 sec StartCoroutine(changeColor(new Color32(50, 150, 30, 255))); // TODO: add noise }
/// <summary> /// ship是否在pos为圆心的范围内 /// </summary> /// <param name="pos"></param> /// <param name="ship"></param> /// <param name="skill"></param> /// <returns></returns> private static bool IsInSkillRange(Vector3 pos, TeamDisplay ship, ClientSkill skill) { proto.SkillReference reference = skill.Prop; int shapType = reference.shape_type; if (shapType != Def.ShapeType.Circle) { return(false); } int angle = 360; int range = reference.aoe_range; int vol = ship.GetShip().Reference.vol; return(IsInSector(pos, ship.GetTeamGo().transform, angle, range, vol)); }
/// <summary> /// 显示trans所属队伍的攻击范围,关闭所属队伍列表内其他队伍的攻击范围 /// </summary> /// <param name="trans"></param> private void ShowRange(Transform trans) { Dictionary <int, TeamDisplay> teamList = GetTeamDisplayList(trans); ResetRange(teamList); if (trans == null) { return; } TeamDisplay display = GetTeamDisplay(trans); if (display != null) { display.ShowRange(true); } }
/// <summary> /// 根据技能配置,距离,角度得到最终的目标表 /// </summary> /// <param name="shipTrans"></param> /// <param name="skill"></param> /// <returns></returns> public static List <TeamDisplay> FindSkillTarget(TeamDisplay ship, ClientSkill skill) { // 目标表 List <TeamDisplay> result = new List <TeamDisplay>(); if (skill.Prop.cast_target_type != Def.CastTargetType.Self) { Dictionary <int, TeamDisplay> playerList = BattleSceneDisplayManager.Instance.GetTeamDisplayList(true); Dictionary <int, TeamDisplay> enemyList = BattleSceneDisplayManager.Instance.GetTeamDisplayList(false); result.AddRange(FindSkillTarget(ship.GetTeamGo().transform, skill, playerList, enemyList)); } else { result.Add(ship); } return(result); }
private static void CheckClickSkillTarget(GameObject go) { if (go == null) { return; } // 判断点击的是否是可被点击的船 TeamDisplay display = Instance.GetTeamDisplay(go.transform); List <TeamDisplay> list = SkillTargetSelector.FindSkillTarget(GetCommanderShipTeam(), SelectedSkill); if (!list.Contains(display)) { return; } Instance.SkillSelectParam_ = display; IsSelectedSkillTarget = true; }
/// <summary> /// 释放当前选中的技能, by lxl /// </summary> private void FireSkill(int currentClickIndex) { // 旗舰 ClientShip commandShip = BattleSys.GetCommanderShip(); if (commandShip == null) { return; } bool isSelectedSkillTarget = BattleSceneDisplayManager.IsSelectedSkillTarget; // 玩家还没选择目标,给提示 if (!isSelectedSkillTarget) { // 提示玩家选择目标 ShowSelecteTargetNotice(); return; } // 得到选中的技能 ClientSkill skill = BattleSceneDisplayManager.SelectedSkill; Vector3 pos = Vector3.zero; int fightID = -1; // 如果是玩家选择的技能 if (skill.Prop.skill_select_type == Def.SkillSelectType.PlayerSelect) { // 得到玩家选择的位置或目标 if (skill.Prop.shape_type == Def.ShapeType.Default) { TeamDisplay display = (TeamDisplay)BattleSceneDisplayManager.Instance.SkillSelectParam; fightID = display.GetShip().InFightID; } else if (skill.Prop.shape_type == Def.ShapeType.Circle) { pos = (Vector3)BattleSceneDisplayManager.Instance.SkillSelectParam; } } // 使用技能 FightService.Instance.UseCommanderSkill(commandShip.InFightID, skill.ID, fightID, pos); // 技能释放完毕后要重设选择状态 BattleSceneDisplayManager.CastSkillComplete(); BattleSceneDisplayManager.CheckCommanderAttackRange(); }
/// <summary> /// 得到所有舰船 /// </summary> /// <param name="list"></param> /// <returns></returns> private static List <TeamDisplay> GetAllShip(Dictionary <int, TeamDisplay> list) { List <TeamDisplay> result = new List <TeamDisplay>(); foreach (var iter in list) { if (iter.Value == null) { continue; } if (iter.Value.IsDead) { continue; } TeamDisplay tempTrans = iter.Value; result.Add(tempTrans); } return(result); }
/// <summary> /// 部件开火 /// </summary> /// <param name="fireEvent"></param> /// <param name="part"></param> private void CastPartFire(proto.PartFireEvent fireEvent, Part part) { ShowCast(part); // 范围攻击,只生成一个子弹 if (part.partType == SpellType.AOE) { List <BulletTarget> targetList = new List <BulletTarget>(); for (int i = 0; i < fireEvent.fireinfo_size(); i++) { proto.PartFireInfo info = fireEvent.fireinfo(i); TeamDisplay target = BattleSceneDisplayManager.Instance.GetTeamDisplay(info.targetid); if (target == null) { continue; } BulletTarget bulletTarget = new BulletTarget(); bulletTarget.delayFrame = info.delayframe; bulletTarget.Target = target; targetList.Add(bulletTarget); } ClientParts parts = Team_.GetPartsByID(part.partID); ShowBullet(parts, targetList, part.partType, part.attackPoint, part.bulletPath, part.hitEffect, Vector3.zero); return; } // 个体攻击,每个对象都生成子弹 for (int i = 0; i < fireEvent.fireinfo_size(); i++) { proto.PartFireInfo info = fireEvent.fireinfo(i); TeamDisplay target = BattleSceneDisplayManager.Instance.GetTeamDisplay(info.targetid); if (target == null) { continue; } List <BulletTarget> targetList = new List <BulletTarget>(); BulletTarget bulletTarget = new BulletTarget(); bulletTarget.delayFrame = info.delayframe; bulletTarget.Target = target; targetList.Add(bulletTarget); ClientParts parts = Team_.GetPartsByID(part.partID); ShowBullet(parts, targetList, part.partType, part.attackPoint, part.bulletPath, part.hitEffect, Vector3.zero); } }
public void CheckCommanderShipSkillTarget() { // 停止之前的技能目标锁定 StopCoroutine("DelayCheckCommanderShipSkillTarget"); // 清除所有的目标框 ClearArrowGroupList(); TeamDisplay display = GetCommanderShipTeam(); if (display == null) { return; } ClientSkill skill = SelectedSkill; if (skill == null) { return; } // 开始新的技能目标锁定 StartCoroutine("DelayCheckCommanderShipSkillTarget"); }
/// <summary> /// 初始化 /// </summary> /// <param name="ship"></param> /// <param name="bPlayer"></param> /// <param name="pos"></param> public void Init(TeamDisplay team, Ship ship, Vector3 pos, Vector3 offsetPos, bool bPlayer) { if (Trans_ == null) { Trans_ = GetComponent <Transform>(); } TargetRef_ = new Dictionary <string, Transform>(); EnumerateChildren(TargetRef_, Trans_); KineticArmorGo_ = AssetLoader.GetInstantiatedGameObject(GlobalEffectDefine.PhysicsShield); if (KineticArmorGo_ != null) { AssetLoader.ReplaceShader(KineticArmorGo_); KineticArmorGo_.transform.parent = transform; KineticArmorGo_.transform.localPosition = Vector3.zero; KineticArmorGo_.transform.localEulerAngles = Vector3.zero; KineticArmorGo_.transform.localScale = Vector3.one * ship.shieldRadius * 2; KineticArmorGo_.SetActive(false); } EnergyArmorGo_ = AssetLoader.GetInstantiatedGameObject(GlobalEffectDefine.PhysicsShield); if (EnergyArmorGo_ != null) { AssetLoader.ReplaceShader(EnergyArmorGo_); EnergyArmorGo_.transform.parent = transform; EnergyArmorGo_.transform.localPosition = Vector3.zero; EnergyArmorGo_.transform.localEulerAngles = Vector3.zero; EnergyArmorGo_.transform.localScale = Vector3.one * ship.shieldRadius * 2; EnergyArmorGo_.SetActive(false); } Team_ = team; Ship_ = ship; OffsetPosition_ = offsetPos; pos += OffsetPosition_; Trans_.position = pos; Trans_.eulerAngles = new Vector3(0, bPlayer ? 0 : 180, 0); OffsetPosition_ -= new Vector3(0, OffsetPosition_.y, 0); }
/// <summary> /// 显示trans所属队伍的选中状态,关闭所属队伍列表内其他队伍的选中状态 /// </summary> /// <param name="trans"></param> private void ShowSelect(Transform trans) { if (trans == null) { return; } Dictionary <int, TeamDisplay> teamList = GetTeamDisplayList(trans); TeamDisplay display = GetTeamDisplay(trans); if (display == null) { return; } ResetSelect(teamList, display.IsPlayerShip()); display.SetSelect(true); if (!display.IsPlayerShip()) { return; } GameObject teamGo = display.GetTeamGo(); if (teamGo == null) { return; } Transform teamGoTrans = teamGo.transform; ClientShip ship = display.GetShip(); float vol = ship.Reference.vol; if (SelectedPlayerShipArrowGroup_ == null) { SelectedPlayerShipArrowGroup_ = BattleArrowGroup.InitArrowGroup(teamGoTrans, vol, false); } else { SelectedPlayerShipArrowGroup_.ChangeParent(teamGoTrans, vol); } }
private void Init(Transform parentTrans, TeamDisplay team, string name, float radius) { Team_ = team; ParentTrans_ = parentTrans; UI_ = transform.GetChild(0).gameObject; Trans_ = transform; GameObject go = CameraManager.Instance.MainCamera; WorldCamera_ = go.GetComponent <Camera>(); UICamera_ = CameraManager.Instance.UICamera; PanelAnimator_ = UI_.transform.GetComponent <Animator>(); DurabilityImage_ = UI_.transform.FindChild("Image_Decor/Image_Hp/Image").GetComponent <Image>(); ArmouredImage_ = UI_.transform.FindChild("Image_Decor/Image_En/Image").GetComponent <Image>(); Button button = UI_.transform.FindChild("Image_Circle").gameObject.AddComponent <Button>(); button.onClick.AddListener(OnCircleClick); // 初始化血条信息的状态 PanelAnimator_.SetTrigger("ShipUnderAttack"); // 初始化隐藏 ShowInfo(false); }
/// <summary> /// 得到攻击范围内所有 /// </summary> /// <param name="pos"></param> /// <param name="skill"></param> /// <param name="list"></param> /// <returns></returns> private static List <TeamDisplay> GetInAttackRangeAllShip(Vector3 pos, ClientSkill skill, Dictionary <int, TeamDisplay> list) { List <TeamDisplay> result = new List <TeamDisplay>(); foreach (var iter in list) { if (iter.Value == null) { continue; } if (iter.Value.IsDead) { continue; } // 需要在范围内 if (!IsInSkillRange(pos, iter.Value, skill)) { continue; } TeamDisplay tempTrans = iter.Value; result.Add(tempTrans); } return(result); }
private static bool IsInSkillRange(Transform trans1, TeamDisplay ship2, ClientSkill skill) { return(IsInSkillRange(trans1, ship2, skill.Prop)); }
/// <summary> /// 显示旗舰技能目标的框 /// </summary> /// <returns></returns> private IEnumerator DelayCheckCommanderShipSkillTarget() { GameObject shipGo = GetCommanderShipObj(); if (shipGo == null) { yield break; } TeamDisplay commanderDisplay = GetCommanderShipTeam(); if (commanderDisplay == null) { yield break; } ClientSkill skill = SelectedSkill_; if (skill == null) { yield break; } // 技能选择时的标志 while (true) { // 如果旗舰不存在了 if (shipGo == null) { yield break; } if (skill.Prop.skill_select_type == Def.SkillSelectType.CastScope || skill.Prop.skill_select_type == Def.SkillSelectType.NoSelection) { List <TeamDisplay> list1 = SkillTargetSelector.FindSkillTarget(commanderDisplay, skill); // 矩形 if (skill.Prop.shape_type == Def.ShapeType.Rectangle) { CheckLastFrameArrowGroupList(list1); CheckAllSkillTarget(list1); } // 圆形或扇形 else if (skill.Prop.shape_type == Def.ShapeType.Circle || skill.Prop.shape_type == Def.ShapeType.Default) { CheckLastFrameArrowGroupList(list1); CheckAllSkillTarget(list1); } } else if (skill.Prop.skill_select_type == Def.SkillSelectType.PlayerSelect) { // 为0时让玩家点击屏幕选择舰船或空处,显示可点击的舰船 if (!IsSelectedSkillTarget) { List <TeamDisplay> list2 = SkillTargetSelector.FindSkillTarget(commanderDisplay, skill); CheckLastFrameArrowGroupList(list2); CheckAllSkillTarget(list2); } // 根据玩家点击的地方做显示 else { if (SelectedSkill.Prop.shape_type == Def.ShapeType.Circle) { // 知道玩家点击的位置了,需要根据这个位置得到周围的目标舰船 Vector3 targetPosition = (Vector3)SkillSelectParam_; List <TeamDisplay> list3 = SkillTargetSelector.FindSkillTarget(targetPosition, skill); CheckLastFrameArrowGroupList(list3); CheckAllSkillTarget(list3); } else if (SelectedSkill.Prop.shape_type == Def.ShapeType.Default) { TeamDisplay targetDisplay = (TeamDisplay)SkillSelectParam_; if (targetDisplay != null && !targetDisplay.IsDead) { List <TeamDisplay> list4 = new List <TeamDisplay>(); list4.Add(targetDisplay); CheckLastFrameArrowGroupList(list4); CheckAllSkillTarget(list4); } else { // 如果目标船死亡了,那么玩家要重新指定一个目标 IsSelectedSkillTarget = false; } } } } yield return(null); } }
/// <summary> /// ship2是否在ship1的技能范围内 /// </summary> /// <param name="ship1"></param> /// <param name="ship2"></param> /// <param name="skill"></param> /// <returns></returns> private static bool IsInSkillRange(TeamDisplay ship1, TeamDisplay ship2, ClientSkill skill) { Transform trans1 = ship1.GetTeamGo().transform; return(IsInSkillRange(trans1, ship2, skill)); }