Exemple #1
0
 public override void DestroySenceObject(SenceGameObject obj_data)
 {
     SenceObjects.Remove(obj_data.SenceObject.ID);
     if (obj_data != null)
     {
         Destroy(obj_data.gameObject);
     }
 }
Exemple #2
0
    // 刷新场景内所有物体
    public void Refresh(List <RootObject> temp_dic)
    {
        //服务器里没有本地有
        foreach (RootObject value in temp_dic)
        {
            if (SenceObjects.ContainsKey(value.ID) &&
                value.state == ObjectState.Destroy)
            {
                //Debug.Log(SenceObjects.ContainsKey(temptest) + ":::value.contains过滤后"+value.Name + ":::value.name");

                //Ai销毁时,销毁对应的导弹
                if (value.type == ObjectType.AI && guideddestroy.ContainsKey(value.ID))
                {
                    Destroy(guideddestroy[value.ID], 1f);
                }
                //不销毁Boss,只隐藏
                if (value.type == ObjectType.AI)
                {
                    AI ai = value as AI;
                    if (ai.ai_type == AIType.LifeAndAttack && SenceObjects.ContainsKey(value.ID) && SenceObjects[value.ID] != null)
                    {
                        SenceObjects[value.ID].gameObject.SetActive(false);
                        Destroy(SenceObjects[value.ID].GetComponent <SenceGameObject>());
                    }
                    else
                    {
                        DestroySenceObject(SenceObjects[value.ID]);
                    }
                }
                else
                {
                    DestroySenceObject(SenceObjects[value.ID]);
                }
            }
            else if (value.type == ObjectType.AI && SenceObjects.ContainsKey(value.ID) &&
                     value.state != ObjectState.Destroy)
            {
            }
        }

        foreach (RootObject value in temp_dic)
        {
            //本地包含服务器物体
            if (Recever.rInstance.SenceObjects.ContainsKey(value.ID) && value != null)
            {
                RefreshObject(value);
            }
            //本地不包含服务器物体
            else if (!roleViews.ContainsKey(value.ID) && value.state != ObjectState.Destroy)
            {
                GameObject      obj;
                Role            player;
                AI              ai;
                Bullet          bullet;
                SenceGameObject obj_data;
                HP_View         hpview;
                switch (value.type)
                {
                case ObjectType.Player:
                    player = value as Role;
                    //Debug.Log("<color.red>"+player.Index+"</color>");
                    obj                = Instantiate(RolePrefabs[player.Index]) as GameObject;
                    obj_data           = obj.AddComponent <SenceGameObject>();
                    playerData         = obj.AddComponent <PlayerController>();
                    playerData.prefabs = this.BulletPrefabs;
                    obj_data.Player    = obj.transform.FindChild("_player").gameObject;
                    GradeTx            = obj_data.Player.transform.FindChild("Grade").GetComponent <TextMesh>();
                    PlayerHPText       = obj_data.Player.transform.FindChild("PlayerHPText").GetComponent <TextMesh>();
                    topworming         = obj_data.Player.transform.FindChild("Canvas").FindChild("Image_info").GetComponentInChildren <TextMesh>();
                    rightrange         = obj_data.Player.transform.FindChild("RightRange").GetComponent <TextMesh>();
                    leftrange          = obj_data.Player.transform.FindChild("LeftRange").GetComponent <TextMesh>();
                    RefreshPlayerGrad(player.HP, player.Grade);
                    obj_data.RightBattery = obj_data.Player.transform.FindChild("FireRR").gameObject.AddComponent <LookAt>();
                    obj_data.LeftBattery  = obj_data.Player.transform.FindChild("FireLL").gameObject.AddComponent <LookAt>();

                    //obj_data.RightBattery.transform.FindChild("PaoL").gameObject.AddComponent<Gunrotate>();
                    //obj_data.LeftBattery.transform.FindChild("PaoR").gameObject.AddComponent<Gunrotate>();

                    obj_data.LeftFirePoint  = obj_data.LeftBattery.transform.FindChild("FirePoint").gameObject;
                    obj_data.RightFirePoint = obj_data.RightBattery.transform.FindChild("FirePoint").gameObject;

                    FirePointcontroller temp1 = obj_data.LeftBattery.transform.FindChild("FirePoint").gameObject.AddComponent <FirePointcontroller>();
                    FirePointcontroller temp2 = obj_data.RightBattery.transform.FindChild("FirePoint").gameObject.AddComponent <FirePointcontroller>();
                    temp1.Init(false, true);
                    temp2.Init(false, true);



                    obj_data.RightRein = obj.transform.FindChild("Controller (right)").gameObject;
                    obj_data.LeftRein  = obj.transform.FindChild("Controller (left)").gameObject;
                    //obj_data.Camera = obj.transform.FindChild("Camera (head)").gameObject;
                    hpview = obj.AddComponent <HP_View>();
                    roleViews.Add(value.ID, hpview);
                    hpview.role = value as Role;
                    //  Debug.Log("<color.red>obj_data._weapon " + obj_data._weapon+"******************</color>");
                    hpview.Init();

                    obj_data.SenceObject = value;
                    DefaultWeapon        = obj_data._player.useWeapon.Name;
                    PlayerData           = obj_data;
                    SenceObjects.Add(value.ID, obj_data);
                    send_player.Add(value.ID, obj_data);
                    obj.transform.parent = this.transform;
                    obj.name             = "id_" + value.ID.ToString() + "_" + value.Name;
                    //network_server.isScreening = false;
                    break;

                case ObjectType.AI:
                    ai = value as AI;
                    //Debug.Log("<color=yellow>"+ai.Position+"</color>");
                    obj = null;
                    switch (ai.ai_type)
                    {
                    case AIType.Lithe:
                        obj = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        break;

                    case AIType.Attack:
                        obj           = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        Aiattack_more = ai.Index;
                        break;

                    case AIType.LifeAndAttack:

                        if (Boss == null)
                        {
                            obj = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        }
                        else
                        {
                            obj = Boss;
                        }
                        Aiattack_max = ai.Index;
                        //  初始化 AI只为大怪添加血条

                        hpview = obj.AddComponent <HP_View>();
                        roleViews.Add(value.ID, hpview);
                        hpview.role = value as AI;
                        hpview.Init();

                        break;

                    case AIType.SmartAI:
                        obj          = Instantiate(AiPrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        Aiattack_min = ai.Index;
                        break;

                    case AIType.Stone:
                        obj = Instantiate(StonePrefabs[ai.Index], ai.Position, ai.Rotation) as GameObject;
                        break;

                    default:
                        Debug.LogError("没有对应的aitype");
                        break;
                    }


                    obj.SetActive(true);
                    obj_data = obj.AddComponent <SenceGameObject>();

                    obj_data.EnemyEffect = obj.transform.FindChild("Enemy Explode").gameObject;

                    obj_data.gameObject.tag = SenceGameObject.AI_TAG;
                    if (ai.ai_type != AIType.Stone)
                    {
                        obj.AddComponent <Follo>();
                        obj.GetComponent <BoxCollider>().size = new Vector3(5f, 2.5f, 5f);
                    }

                    obj_data.SenceObject = value;
                    SenceObjects.Add(value.ID, obj_data);
                    obj.transform.parent = this.transform;
                    obj.name             = "id_" + value.ID.ToString() + "_" + value.Name;

                    break;

                case ObjectType.Bullet:
                    bullet      = value as Bullet;
                    strs        = bullet.Name.Split('_');
                    id          = int.Parse(strs[0]);
                    bullet.Name = strs[1];
                    obj_data    = CreateBullet(bullet, false);
                    //Debug.Log(SenceObjects[id]._pc_man.Index+">>>>>"+Aiattack_min+">>>>>"+Aiattack_more+">>>>>>"+Aiattack_max);
                    /*生成敌机子弹时播放音效*/
                    if (SenceObjects.ContainsKey(id) && SenceObjects[id]._pc_man.Index == Aiattack_more)
                    {
                        //      Audiocontroller.instans.PlayGameAudio("Ss01");
                    }
                    if (SenceObjects.ContainsKey(id) && SenceObjects[id]._pc_man.Index == Aiattack_max)
                    {
                        //      Audiocontroller.instans.PlayGameAudio("kehuan");
                    }
                    if (SenceObjects.ContainsKey(id) && SenceObjects[id]._pc_man.Index == Aiattack_min)
                    {
                        //     Audiocontroller.instans.PlayGameAudio("Ss02");
                    }


                    if (SenceObjects.ContainsKey(id))
                    {
                        //SenceObjects[id].transform.FindChild("Enemy").FindChild("FireFlower").gameObject.SetActive(true);
                        if (SenceObjects[id]._pc_man.ai_type != AIType.LifeAndAttack)
                        {
                            if (SenceObjects[id].GetComponentInChildren <LookAtPlayer>())
                            {
                                obj_data.gameObject.transform.position = SenceObjects[id].GetComponentInChildren <LookAtPlayer>().gameObject.transform.position;
                            }
                            else
                            {
                                Debug.LogError("没有找到lookatplayer");
                                obj_data.gameObject.transform.position = SenceObjects[id].transform.position;
                            }
                        }
                        else
                        {
                            Debug.LogError("生成子弹时找不到对应的发射点");
                            obj_data.gameObject.transform.position = value.Position;
                        }

                        //控制开火特效
                        if (SenceObjects[id] != null && SenceObjects[id].GetComponentInChildren <LookAtPlayer>() && SenceObjects[id]._pc_man.ai_type != AIType.Stone)
                        {
                            //Debug.Log("<color=yellow>"+SenceObjects[id].name+"</color>");
                            SenceObjects[id].GetComponentInChildren <LookAtPlayer>().isFire = true;
                        }
                        else
                        {
                            Debug.LogError("没有找到;LookAtPlayer;");
                        }
                    }
                    else
                    {
                        Debug.LogError("生成子弹时找不到对应的发射点");
                        obj_data.gameObject.transform.position = value.Position;
                    }

                    obj_data.gameObject.transform.rotation = value.Rotation;
                    ray = new Ray(obj_data.transform.position, obj_data.transform.forward);
                    if (Physics.Raycast(ray, out hit) &&
                        hit.transform.gameObject.CompareTag(SenceGameObject.PLAYER_TAG) &&
                        !HurtPoints.ContainsKey(obj_data.SenceObject.ID))
                    {
                        HurtPoints.Add(obj_data.SenceObject.ID, hit.point);
                    }
                    obj_data.gameObject.GetComponent <Rigidbody>().AddForce(obj_data.transform.forward * MsgCenter.LUACH_FORCE * 2);
                    obj_data.gameObject.tag = SenceGameObject.AI_BULLET_TAG;
                    Destroy(obj_data.gameObject, 10f);
                    //SenceObjects.Add(value.ID, obj_data);
                    break;

                case ObjectType.PlayerBullet:

                    //bullet = value as Bullet;
                    //obj_data = CreateBullet(bullet,false);
                    //obj_data.gameObject.transform.position = value.Position;
                    //obj_data.gameObject.transform.rotation = value.Rotation;
                    //SenceObjects.Add(value.ID, obj_data);
                    break;

                case ObjectType.Weapon:
                    //   if (value.state != ObjectState.Destroy)
                {
                    string     temppath = dropOut.ReadXML(value.Name);
                    GameObject tempobj  = Resources.Load(temppath) as GameObject;
                    // Debug.Log("<color=yellow>生成掉;落物" + value.Name +value.Position+ "</color>");

                    GameObject OBJ = Instantiate(tempobj, value.Position, value.Rotation) as GameObject;
                    OBJ.AddComponent <BOX_co>();
                    BoxCollider box = OBJ.GetComponent <BoxCollider>();
                    box.center = Vector3.zero;
                    box.size   = Vector3.one;
                    SenceGameObject objdate = OBJ.AddComponent <SenceGameObject>();
                    objdate.SenceObject = value;
                    SenceObjects.Add(value.ID, objdate);
                    //OBJ.transform.position = value.Position;
                    //OBJ.transform.rotation = value.Rotation;
                    OBJ.SetActive(true);
                }

                break;

                case ObjectType.UI:
                    UIMenu          ui        = value as UIMenu;
                    SenceGameObject mune_data = Recever.rInstance.DisplayMenu(ui.IsStart);
                    if (ui.IsStart)
                    {
                        GameState = Datas.GameState.Start;
                    }
                    else
                    {
                        GameState = Datas.GameState.End;
                    }
                    mune_data.SenceObject = ui;
                    SenceObjects.Add(mune_data.SenceObject.ID, mune_data);
                    if (ui.PageTab != null && sort.Count <= 10)
                    {
                        sort.Add(ui.PageTab);
                    }
                    else
                    {
                        Debug.Log("<color=red>分数数组长度" + sort.Count + "</color>");
                    }
                    if (ui.Name != null && rankingname.Count <= 10)
                    {
                        rankingname.Add(ui.Name);
                    }
                    else
                    {
                        Debug.Log("<color=red>名字数组长度" + rankingname.Count + "</color>");
                    }
                    break;

                case ObjectType.Ranking:
                    ranking              = value as Ranking;
                    obj                  = new GameObject();
                    obj_data             = obj.AddComponent <SenceGameObject>();
                    obj_data.SenceObject = ranking;
                    SenceObjects.Add(ranking.ID, obj_data);
                    break;

                case ObjectType.GuidedMissile:

                    GuidedMissile gu = value as GuidedMissile;
                    Debug.Log(gu.type);
                    GameObject guided = Instantiate(Bullets["weapon3"]);
                    // guided.AddComponent<Collider_items>();
                    obj_data             = guided.AddComponent <SenceGameObject>();
                    obj_data.SenceObject = value;
                    guided.tag           = SenceGameObject.PLAYER_BULLET_TAG;
                    //if(gu.Name == "right")
                    //{
                    //    guided.GetComponent<Rigidbody>().velocity = PlayerData.RightRein.transform.forward;
                    //}else{
                    //    guided.GetComponent<Rigidbody>().velocity = PlayerData.LeftRein.transform.forward;
                    //}
                    guided.transform.position = gu.Position;
                    Guided guid = guided.AddComponent <Guided>();
                    if (gu.target_id == null ||
                        !SenceObjects.ContainsKey(gu.target_id))
                    {
                        guid.Target = null;
                    }
                    else
                    {
                        //导弹目标为掉落物时没有爆炸效果
                        if (SenceObjects[gu.target_id].type != ObjectType.Weapon)
                        {
                            obj_data.EnemyEffect = guided.transform.FindChild("Enemy Explode").gameObject;
                        }

                        //设置导弹的目标,及与目标对应,一起消失
                        guid.Target = SenceObjects[gu.target_id].transform;
                        if (!guideddestroy.ContainsKey(gu.target_id))
                        {
                            guideddestroy.Add(gu.target_id, guided);
                        }
                    }
                    SenceObjects.Add(gu.ID, obj_data);
                    break;
                }
            }
        }
    }