Example #1
0
    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));
    }
Example #2
0
    /// <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));
    }
Example #3
0
    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));
        }
    }
Example #4
0
 /// <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));
     }
 }
Example #5
0
    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;
    }
Example #6
0
    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);
        }
    }