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)); }
/// <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)); }
private static bool IsInSkillRange(Transform trans1, Transform trans2, proto.SkillReference reference, int vol) { int shapType = reference.shape_type; int length = reference.radiate_len; int width = reference.radiate_wid; int angle = reference.cast_angle; int range = reference.cast_range; if (shapType == Def.ShapeType.Rectangle) { return(IsInRectangle(trans1, trans2, width, length, vol)); } else { return(IsInSector(trans1, trans2, angle, range, vol)); } }
/// <summary> /// 施放技能 /// </summary> /// <param name="skill"></param> /// <param name="spell"></param> public void UseSkill(proto.UseSkill skill) { proto.SkillReference skillReference = GlobalConfig.GetSkillReference(skill.skillid); if (skillReference == null) { Debug.Log("cant find skill reference:" + skill.skillid); return; } if (skill.skillstage == Def.SkillStage.Sing) { SingSkill(GetSkill(skill.partid)); } else if (skill.skillstage == Def.SkillStage.Casting) { StartCoroutine(CastSkill(skill)); } }
public void Init(ClientShip clientShip, Ship ship, List <GameObject> shipList, bool bPlayer) { IsDead = false; RootGo_ = new GameObject("Root_" + (bPlayer ? "Player" : "Enemy") + "_"); //+ clientShip.Reference.name ); RootGo_.transform.position = clientShip.Position; ClientShip_ = clientShip; //Ship_ = ship; Vector3[] tempFormationList = clientShip.FormationList; for (int i = 0; i < shipList.Count; i++) { ShipDisplay display = shipList[i].AddComponent <ShipDisplay>(); display.Init(this, ship, clientShip.Position, tempFormationList == null ? Vector3.zero : tempFormationList[i], bPlayer); ShipList_.Add(display); } bool isAdvancedShip = (clientShip.Reference.id == 40000 || clientShip.Reference.id == 60000);//暂时这样写,到时候根据tag来 BattleShipInfo_ = BattleShipInfo.Create(RootGo_.transform, this, clientShip.Name, ship.shieldRadius, bPlayer, isAdvancedShip); foreach (var iter in clientShip.PartsList) { float atkRangeMin = iter.Reference.atk_range_min; float atkRangeMax = iter.Reference.atk_range_max; float atkMoveRange = iter.Reference.attack_move_range; float angle = iter.Reference.atk_angle; // 最近和最远的攻击范围 AttackRangeDisplayList_.Add(AttackRangeDisplay.InitSectorAttackRange(bPlayer, RootGo_.transform, atkRangeMin, atkRangeMax, angle, Color.red)); // 移动攻击范围 AttackRangeDisplayList_.Add(AttackRangeDisplay.InitSectorAttackRange(bPlayer, RootGo_.transform, 0, atkMoveRange, angle, Color.gray)); } // 是玩家并且是旗舰,生成技能范围 if (bPlayer && clientShip.IsCommanderShip()) { for (int i = 0; i < 3; i++) { ClientSkill skill = clientShip.GetSkillByIndex(i); AttackRangeDisplay display = null; if (skill != null) { proto.SkillReference reference = skill.Prop; // 扇形 if (reference.skill_select_type == Def.SkillSelectType.CastScope) { display = AttackRangeDisplay.InitSectorAttackRange(true, RootGo_.transform, 0, reference.cast_range, reference.cast_angle, Color.blue); } //else if( reference.skill_select_type == Def.SkillSelectType.PlayerSelect ) { // 圆形 //if( reference.shape_type == Def.ShapeType.Circle ) { // display = AttackRangeDisplay.InitCircleAttackRange( RootGo_.transform, reference.aoe_range, Color.blue ); //} //} else if (reference.skill_select_type == Def.SkillSelectType.NoSelection) { // 矩形或圆形 if (reference.shape_type == Def.ShapeType.Rectangle) { display = AttackRangeDisplay.InitRectangleAttackRange(RootGo_.transform, reference.radiate_len, reference.radiate_wid * 2, Color.blue); } else if (reference.shape_type == Def.ShapeType.Circle) { display = AttackRangeDisplay.InitCircleAttackRange(RootGo_.transform, reference.aoe_range, Color.blue); } } if (display != null) { display.gameObject.name += "_skill"; } } SkillAttackRangeDisplayList.Add(display); } } if (HaloTemplate_ == null) { HaloTemplate_ = Resources.Load("Effect/Halo"); } HaloGo_ = GameObject.Instantiate(HaloTemplate_) as GameObject; HaloGo_.transform.GetChild(0).localPosition = Vector3.zero; HaloGo_.transform.parent = RootGo_.transform; HaloGo_.transform.localEulerAngles = Vector3.zero; HaloGo_.transform.localPosition = Vector3.zero + new Vector3(0, -1, 0); HaloGo_.transform.localScale = Vector3.one * clientShip.Reference.vol; }
public static void AnalyzeBin(byte[] bytes) { var tempManager = new proto.ReferenceManager(); tempManager.Parse(bytes, 0, bytes.Length); for (int i = 0; i < tempManager.units_res_size(); i++) { proto.UnitReference unit = tempManager.units_res(i); UnitReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.defensive_units_res_size(); i++) { proto.DefensiveUnitsReference unit = tempManager.defensive_units_res(i); DefensiveUnitsReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.buff_res_size(); i++) { proto.BuffReference unit = tempManager.buff_res(i); BuffReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.parts_replace_team_res_size(); i++) { proto.PartsReplaceTeamReference unit = tempManager.parts_replace_team_res(i); PartsReplaceTeamReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.shuttle_res_size(); i++) { proto.ShuttleReference unit = tempManager.shuttle_res(i); ShuttleReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.shuttle_team_res_size(); i++) { proto.ShuttleTeamReference unit = tempManager.shuttle_team_res(i); ShuttleTeamReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.skill_res_size(); i++) { proto.SkillReference unit = tempManager.skill_res(i); SkillReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.parts_res_size(); i++) { proto.PartReference unit = tempManager.parts_res(i); PartReferenceList.Add(unit.id, unit); } for (int i = 0; i < tempManager.battlefield_res_size(); i++) { proto.BattlefieldReference battle = tempManager.battlefield_res(i); BattlefieldReferenceList.Add(battle.id, battle); } List <proto.LevelDeployUnitReference> levelDelpoyUnitList = null; for (int i = 0; i < tempManager.leveldeployunit_res_size(); i++) { proto.LevelDeployUnitReference levelDeployUnit = tempManager.leveldeployunit_res(i); if (LevelDeployReferenceDic.ContainsKey(levelDeployUnit.battlefield_id)) { levelDelpoyUnitList = LevelDeployReferenceDic[levelDeployUnit.battlefield_id]; } else { levelDelpoyUnitList = new List <proto.LevelDeployUnitReference>(); LevelDeployReferenceDic.Add(levelDeployUnit.battlefield_id, levelDelpoyUnitList); } levelDelpoyUnitList.Add(levelDeployUnit); } }