Beispiel #1
0
    //public override void InitNetwork()
    //{
    //    network_server = gameObject.AddComponent<NetworkClient>();
    //    network_server.isScreening = false;
    //}

    public override void AddToSendList(SenceGameObject obj_data)
    {
        if (!send_player.ContainsKey(obj_data.SenceObject.ID))
        {
            send_player.Add(obj_data.SenceObject.ID, obj_data);
        }
    }
Beispiel #2
0
    public void StoneWalkLine(SenceGameObject target_data, GameObject LeftFirePoint, GameObject RightFirePoint)
    {
        if ((target_data.transform.position - target_data.ai_end_point).magnitude <= 5)
        {
            MsgCenter.Instance.DestroySenceObject(target_data, 1.0f);
        }

        //  如果到达第一个目标点
        if ((target_data.transform.position - target_data.follow.Target).magnitude <= 20 &&
            !target_data.ai_in_end)
        {
            target_data.follow.Target = target_data.ai_end_point;
            target_data.ai_in_end     = true;
        }
        //Debug.Log(target_data.gameObject.name + "::::" + (target_data.transform.position - MsgCenter.Instance.PlayerData.transform.position).magnitude);
        if (!target_data.ai_in_end && (target_data.transform.position - MsgCenter.Instance.PlayerData.transform.position).magnitude <= 10)
        {
            //Debug.Log("<<<<<<<<<<<<<<");
            _ray = new Ray(target_data.transform.position, target_data.transform.forward);
            if (Physics.Raycast(_ray, out _hit, 1000))
            {
                //Debug.Log("hit.name = " + _hit.transform.gameObject.name);
                if (_hit.transform.gameObject.CompareTag(SenceGameObject.PLAYER_TAG))
                {
                    Debug.Log("hit = " + _hit.transform.gameObject.name);
                    MsgCenter.Instance.HurtPoints.Add(target_data.SenceObject.ID, _hit.point);
                }
            }
        }
    }
Beispiel #3
0
    public void OnLogic(SenceGameObject target_data, GameObject LeftFirePoint, GameObject RightFirePoint)
    {
        switch (target_data._pc_man.ai_type)
        {
        case AIType.Lithe:
            AIWalkLine(target_data, LeftFirePoint, RightFirePoint);
            break;

        case AIType.Attack:
            AIWalkWinding(target_data, LeftFirePoint, RightFirePoint);
            break;

        case AIType.LifeAndAttack:
            BossWalk(target_data, LeftFirePoint, RightFirePoint);
            break;

        case AIType.SmartAI:
            AIWalkNew(target_data, LeftFirePoint, RightFirePoint);
            break;

        case AIType.Stone:
            StoneWalkLine(target_data, LeftFirePoint, RightFirePoint);
            break;
        }

        target_data._pc_man.Position = transform.position;
        target_data._pc_man.Rotation = transform.rotation;
    }
Beispiel #4
0
    public void AIWalkLine(SenceGameObject target_data, GameObject LeftFirePoint, GameObject RightFirePoint)
    {
        //if ((target_data.transform.position - target_data.ai_end_point).magnitude <= 5)
        //{
        //    MsgCenter.Instance.DestroySenceObject(target_data, 1.0f);
        //}

        //  如果到达第一个目标点
        if ((target_data.transform.position - target_data.follow.Target).magnitude <= 20 &&
            !target_data.ai_in_end)
        {
            target_data.follow.Target = target_data.ai_end_point;
            target_data.ai_in_end     = true;
        }

        if (!target_data.ai_in_end)
        {
            target_data.luach_time += Time.deltaTime;
            //Debug.Log(target_data.luach_time + " <= " + target_data._pc_man.LaunchSpeed);
            if (target_data.luach_time >= target_data._pc_man.LaunchSpeed)
            {
                target_data.luach_time = 0;
                LuachBullet(target_data, LeftFirePoint);
                //target_data.LeftFlower.SetActive(true);
                if (target_data.RightFirePoint != null)
                {
                    LuachBullet(target_data, RightFirePoint);
                    //target_data.RightFlower.SetActive(true);
                }
            }
        }
    }
Beispiel #5
0
 public override void DestroySenceObject(SenceGameObject obj_data)
 {
     SenceObjects.Remove(obj_data.SenceObject.ID);
     if (obj_data != null)
     {
         Destroy(obj_data.gameObject);
     }
 }
Beispiel #6
0
    public void BossWalk(SenceGameObject target_data, GameObject LeftFirePoint, GameObject RightFirePoint)
    {
        //  如果到达第一个目标点
        //if (target_data.Stone.enabled &&
        //    (target_data.transform.position - target_data.Stone.Tartget).magnitude <= 30)
        //{
        //    target_data.Stone.enabled = false;
        //    target_data.ai_in_end = true;
        //    //Debug.Log("target_data.Stone.enabled = false;");
        //}
        if (!isone)
        {
            temp = target_data.follow.Target;
        }
        if (target_data.follow.enabled)
        {
            if (Vector3.Distance(target_data.transform.position, target_data.follow.EndPos) <= 2 &&
                !target_data.follow.IsBack)
            {
                target_data.follow.RunSpeed    = 0.1f;
                target_data.follow.RotateSpeed = 0.01f;
                target_data.follow.isTurn      = true;
                target_data.follow.Target      = target_data.follow.UPPos;
                target_data.follow.IsBack      = true;
            }
            else if (target_data.follow.IsBack && Vector3.Distance(target_data.transform.position, target_data.follow.Target) <= 2)
            {
                //   target_data.follow.Target = target_data.follow.Target == MsgCenter.Instance.EndPosition.position ? temp : MsgCenter.Instance.EndPosition.position;
                //target_data.follow.enabled = false;
                target_data.follow.isTurn = true;
                target_data.follow.Target = target_data.follow.Target == target_data.follow.EndPos?target_data.follow.UPPos:target_data.follow.EndPos;
            }
            //Debug.Log("target_data.Stone.enabled = false;");
        }
        else
        {
            target_data.transform.eulerAngles = new Vector3(target_data.transform.eulerAngles.x, Mathf.Lerp(target_data.transform.eulerAngles.y,
                                                                                                            MsgCenter.Instance.EndPosition.eulerAngles.y, 0.002f), target_data.transform.eulerAngles.z);
        }

        if (target_data.follow.IsBack)
        {
            target_data.luach_time += Time.deltaTime;
            //Debug.Log(target_data.luach_time + " <= " + target_data._pc_man.LaunchSpeed);
            if (target_data.luach_time >= target_data._pc_man.LaunchSpeed)
            {
                target_data.luach_time = 0;
                LuachBullet(target_data, LeftFirePoint);
                //target_data.LeftFlower.SetActive(true);
                if (target_data.RightFirePoint != null)
                {
                    LuachBullet(target_data, RightFirePoint);
                    //target_data.RightFlower.SetActive(true);
                }
            }
        }
    }
Beispiel #7
0
    public void CreateWeapon(string weapon_name, Vector3 position)
    {
        //Debug.Log("weapon_nameweapon_name::::::   " + weapon_name);
        if (!string.IsNullOrEmpty(weapon_name))
        {
            //Debug.Log(weaponPool.ContainsKey(weapon_name) + "  是否存在");
            if (weaponPool.ContainsKey(weapon_name))
            {
                //Debug.Log("weaponPool.ContainsKey(weapon_name)");

                GameObject go = weaponPool[weapon_name];
                if (go == null)
                {
                    Init();
                    go = weaponPool[weapon_name];
                }
                if (go.activeSelf)
                {
                    StartCoroutine(CreateWp(weapon_name, go, position));
                }
                else
                {
                    //Debug.Log(go.name + " go.name");
                    SenceGameObject temp = go.GetComponent <SenceGameObject>();
                    if (temp == null)
                    {
                        temp = go.AddComponent <SenceGameObject>();
                    }
                    temp.SenceObject = new Prop(MsgCenter.Instance.GetID(), weapon_name, 0, 0, 0,
                                                position, Quaternion.identity, ObjectState.None, ObjectType.Weapon);
                    if (position.z > 80)
                    {
                        Vector3 tmp_V3 = Camera.main.transform.position - position;
                        temp.transform.position = tmp_V3.normalized * (tmp_V3.magnitude - 80) + position;
                    }
                    else
                    {
                        temp.transform.position   = position;
                        temp.SenceObject.Position = position;
                        temp.SenceObject.Rotation = Quaternion.identity;
                    }
                    temp.isSevice = true;

                    //if(test_bl)
                    //{
                    //    go.tag = SenceGameObject.NONE_TAG;
                    //}
                    test_bl      = true;
                    temp.enabled = true;
                    go.SetActive(true);

                    MsgCenter.Instance.AddToSendList(temp);
                }
            }
        }
    }
Beispiel #8
0
    /// <summary>
    /// 停在某个位置后  朝向玩家发射子弹
    /// </summary>
    /// <param name="target_data"></param>
    /// <param name="LeftFirePoint"></param>
    /// <param name="RightFirePoint"></param>
    public void AIWalkWinding(SenceGameObject target_data, GameObject LeftFirePoint, GameObject RightFirePoint)
    {
        if (target_data.ai_in_end &&
            !target_data.follow.ToStartPosition &&
            (target_data.transform.position - target_data.ai_end_point).magnitude <= 5)
        {
            target_data.follow.degree++;
            target_data.follow.ToStartPosition = true;
            target_data.follow.Target          = target_data.ai_start_position;
            if (target_data.follow.degree >= 3)
            {
                //Debug.Log("destroy : target_data.follow.degree >= 3");
                MsgCenter.Instance.DestroySenceObject(target_data, 1.0f);
            }
        }

        if (target_data.ai_in_end &&
            (target_data.transform.position - target_data.ai_start_position).magnitude <= 5)
        {
            //target_data.follow.degree++;
            target_data.follow.ToStartPosition = false;
            target_data.follow.Target          = target_data.ai_target_point;
            target_data.ai_in_end = false;
        }
        //  如果到达第一个目标点
        if ((target_data.transform.position - target_data.follow.Target).magnitude <= 20 &&
            !target_data.ai_in_end)
        {
            target_data.follow.Target = target_data.ai_end_point;
            target_data.ai_in_end     = true;
        }

        if (!target_data.ai_in_end)
        {
            target_data.luach_time += Time.deltaTime;
            //Debug.Log(target_data.luach_time + " <= " + target_data._pc_man.LaunchSpeed);
            if (target_data.luach_time >= target_data._pc_man.LaunchSpeed)
            {
                target_data.luach_time = 0;
                LuachBullet(target_data, LeftFirePoint);
                //target_data.LeftFlower.SetActive(true);
                if (target_data.RightFirePoint != null)
                {
                    LuachBullet(target_data, RightFirePoint);
                    //target_data.RightFlower.SetActive(true);
                }
            }
        }
    }
Beispiel #9
0
 void OnTriggerEnter(Collider coll)
 {
     if (coll.CompareTag(SenceGameObject.AI_BULLET_TAG) ||
         coll.CompareTag(SenceGameObject.AI_TAG))
     {
         tmp_obj_data = coll.gameObject.GetComponent <SenceGameObject>();
         if (MsgCenter.Instance != null)
         {
             Shake();
             //可以添加护盾音效
             Audiocontroller.instans.PlayEffectAudio("hudun");/*被敌人击中时发出的声音*/
             if (MsgCenter.Instance.HurtPoints.ContainsKey(tmp_obj_data.SenceObject.ID))
             {
                 img = Instantiate(Img) as GameObject;
                 img.gameObject.transform.position =
                     MsgCenter.Instance.HurtPoints[tmp_obj_data.SenceObject.ID];
             }
             else
             {
                 //Debug.LogError("server hurt err:" + tmp_obj_data.gameObject.name);
             }
         }
         else
         {
             // Debug.Log("<color=yellow>击中" + tmp_obj_data.SenceObject + "</color>");
             img = Instantiate(Img) as GameObject;
             if (Recever.rInstance.HurtPoints.ContainsKey(tmp_obj_data.SenceObject.ID))
             {
                 img.gameObject.transform.position = Recever.rInstance.HurtPoints[tmp_obj_data.SenceObject.ID];
             }
             else
             {
                 ray = new Ray(tmp_obj_data.transform.position, transform.position - tmp_obj_data.transform.position);
                 if (Physics.Raycast(ray, out hit))
                 {
                     img.gameObject.transform.position = hit.point;
                 }
             }
         }
         if (img != null)
         {
             img.gameObject.name = "Hurt";
             img.gameObject.transform.LookAt(Camera.main.transform);
             img.gameObject.SetActive(true);
             isShake = true;
         }
     }
 }
Beispiel #10
0
    public void AIWalkNew(SenceGameObject target_data, GameObject LeftFirePoint, GameObject RightFirePoint)
    {
        //Debug.Log(Vector3.Distance(target_data.follow.transform.position, target_data.follow.EndPos));
        if (Vector3.Distance(target_data.follow.transform.position, target_data.follow.EndPos) < 10.0f &&
            !target_data.follow.IsBack)
        {
            target_data.follow.isTurn = false;
            target_data.follow.Target = target_data.follow.UPPos;
        }
        if (Vector3.Distance(target_data.follow.transform.position, target_data.follow.UPPos) < 10.0f)
        {
            target_data.follow.IsBack = true;
            target_data.follow.Target = target_data.follow.StartPos;
        }

        if (Vector3.Distance(target_data.follow.transform.position, target_data.follow.StartPos) < 10.0f && target_data.follow.IsBack)
        {
            target_data.follow.isTurn = true;
            target_data.follow.PosRange();
            target_data.follow.IsBack = false;
            //if (target_data.follow.EndPos.z > 0)
            //{
            //target_data.follow.EndPos = new Vector3(target_data.follow.EndPos.x, target_data.follow.EndPos.y, -target_data.follow.EndPos.z);
            //}
            target_data.follow.Target = target_data.follow.EndPos;
        }
        float tempAngle = Vector3.Angle(-target_data.follow.transform.forward, Vector3.forward);

        if (!target_data.ai_in_end && !target_data.follow.IsBack && target_data.follow.transform.position.z > 0 &&
            target_data.follow.state == AIState.Attack && (tempAngle > 0 && tempAngle < 20))
        {
            target_data.luach_time += Time.deltaTime;
            //Debug.Log(target_data.luach_time + " <= " + target_data._pc_man.LaunchSpeed);
            if (target_data.luach_time >= target_data._pc_man.LaunchSpeed)
            {
                target_data.luach_time = 0;
                LuachBullet(target_data, LeftFirePoint);
                //target_data.LeftFlower.SetActive(true);
                if (target_data.RightFirePoint != null)
                {
                    LuachBullet(target_data, RightFirePoint);
                    //target_data.RightFlower.SetActive(true);
                }
            }
        }
    }
Beispiel #11
0
    public void Init(int level)
    {
        _network_server = gameObject.AddComponent <NetworkServer>();

        if (RoleLevelData.ContainsKey(level))
        {
            GameObject      obj      = Instantiate(RolePrefabs[RoleLevelData[level].Index]) as GameObject;
            SenceGameObject obj_data = obj.AddComponent <SenceGameObject>();
            RoleLevelData[level].Position = obj.transform.position;
            RoleLevelData[level].Rotation = obj.transform.rotation;
            obj_data.SenceObject          = RoleLevelData[level];
            obj_data.SenceObject.ID       = id_index;
            _role = obj_data.SenceObject as Role;
            SenceObjects.Add(obj_data.SenceObject.ID, obj_data);
            obj.transform.parent = this.transform;
            obj.name             = "id_" + id_index + "_" + RoleLevelData[level].Name;
            id_index++;
        }
        StartCoroutine(CreateAI(level));
    }
Beispiel #12
0
 public void OnTriggerEnter(Collider coll)
 {
     //Debug.Log("OnTriggerEnter");
     if (coll.gameObject.CompareTag(SenceGameObject.AI_TAG) ||
         coll.gameObject.CompareTag(SenceGameObject.AI_STONE))
     {
         _sum++;
         obj_data = coll.gameObject.GetComponent <SenceGameObject>();
         if (_sum >= MAX_SUM || obj_data._pc_man.ai_type == Datas.AIType.LifeAndAttack || obj_data._pc_man.ai_type == Datas.AIType.Stone)
         {
             _sum = 0;
             if (MsgCenter.Instance != null)
             {
                 MsgCenter.Instance.ShowWarming(obj_data._pc_man.ai_type);
             }
             else
             {
                 Recever.rInstance.ShowWarming(obj_data._pc_man.ai_type);
             }
         }
     }
 }
Beispiel #13
0
    public IEnumerator CreateWp(string weapon_name, GameObject go, Vector3 position)
    {
        //Debug.Log(go.name + " go.name");
        SenceGameObject temp = go.GetComponent <SenceGameObject>();

        MsgCenter.Instance.DestroySenceObject(temp, 0.1f);
        while (!temp.ClientIsDestroy)
        {
            yield return(null);
        }

        temp.SenceObject = new Prop(MsgCenter.Instance.GetID(), weapon_name, 0, 0, 0,
                                    position, Quaternion.identity, ObjectState.None, ObjectType.Weapon);
        if (position.z > 80)
        {
            Vector3 tmp_V3 = Camera.main.transform.position - position;
            temp.transform.position = tmp_V3.normalized * (tmp_V3.magnitude - 80) + position;
        }
        else
        {
            temp.transform.position   = position;
            temp.SenceObject.Position = position;
            temp.SenceObject.Rotation = Quaternion.identity;
        }
        temp.isSevice = true;

        //if(test_bl)
        //{
        //    go.tag = SenceGameObject.NONE_TAG;
        //}
        test_bl      = true;
        temp.enabled = true;
        go.SetActive(true);

        MsgCenter.Instance.AddToSendList(temp);
    }
Beispiel #14
0
    // Update is called once per frame
    void Update()
    {
        //Debug.Log("update:" + ReinObj.name + (Used).ToString());
        if (Used && ReinObj != null)
        {
            //Debug.Log("rayrayray" + ReinObj.transform.position);
            ray.origin    = ReinObj.transform.position;
            ray.direction = ReinObj.transform.forward;
            Debug.DrawLine(ray.origin, ray.direction.normalized * 3000f, Color.blue);
            if (Physics.Raycast(ray, out hit, 3000))
            {
                Debug.DrawLine(ray.origin, hit.point, Color.green);
                //print(hit.collider.gameObject.name + ":" + hit.collider.gameObject.tag);
                if ((hit.collider.gameObject.tag == SenceGameObject.AI_TAG ||
                     hit.collider.gameObject.tag == SenceGameObject.Weapon_TAG) &&
                    !MsgCenter.Instance.player.useWeapon.Name.Equals("weapon3"))
                {
                    //transform.LookAt(hit.collider.transform.position);
                    obj_data  = hit.collider.gameObject.GetComponent <SenceGameObject>();
                    hit_is_ai = true;
                }
                else if ((hit.collider.gameObject.tag == SenceGameObject.AI_TAG ||
                          hit.collider.gameObject.tag == SenceGameObject.Weapon_TAG) &&
                         MsgCenter.Instance.player.useWeapon.Name.Equals("weapon3"))
                {
                    obj_data  = hit.collider.gameObject.GetComponent <SenceGameObject>();
                    hit_is_ai = true;
                }
                else if (hit.collider.gameObject.tag == SenceGameObject.UI_TAG &&
                         (hit.collider.gameObject.name.Equals("NameButton") ||
                          hit.collider.gameObject.name.Equals("CreatPlayerButton") ||
                          hit.collider.gameObject.name.Equals("StartGameButton") ||
                          hit.collider.gameObject.name.Equals("RedoButton") ||
                          hit.collider.gameObject.name.Equals("ExitButton"))
                         )
                {
                    hit.collider.GetComponent <Image>().color = Color.green;
                    temphit = hit.collider.gameObject;
                    if (MsgCenter.Instance.player.RightRein.Key || MsgCenter.Instance.player.LeftRein.Key)
                    {
                        //Debug.Log("IFIFIFIFIIFIFIFIIFIFIF");
                        MsgCenter.Instance.Menu.Click(hit.collider.gameObject.name);
                    }
                }
                if (!MsgCenter.Instance.player.useWeapon.Name.Equals("weapon3"))
                {
                    //Debug.Log("lookatlookatlookat"+ReinObj.transform.position);
                    transform.LookAt(ReinObj.transform.forward.normalized * 1000);
                }
                else
                {
                    //   Debug.Log("elseelseelse");
                    transform.forward = Vector3.forward;
                }
            }
            else
            {
                if (temphit != null)
                {
                    temphit.GetComponent <Image>().color = Color.white;
                }
                //  Debug.Log("elseflselfsleflsfklsekflks");
                if (this.gameObject.name.Equals("FireLL"))
                {
                    //MsgCenter.Instance.LeftHub.transform.localScale = Vector3.one;
                    MsgCenter.Instance.LeftHub.transform.position =
                        ReinObj.transform.forward * MIN_DISTANCE + ReinObj.transform.position;
                }
                else
                {
                    //MsgCenter.Instance.RightHub.transform.localScale = Vector3.one;
                    MsgCenter.Instance.RightHub.transform.position =
                        ReinObj.transform.forward * MIN_DISTANCE + ReinObj.transform.position;
                }
                if (!MsgCenter.Instance.player.useWeapon.Name.Equals("weapon3"))
                {
                    transform.LookAt(ReinObj.transform.forward.normalized * 1000);
                }
                else
                {
                    transform.forward = Vector3.forward;
                }
            }
            if (hit_is_ai)
            {
                if (this.gameObject.name.Equals("FireLL"))
                {
                    MsgCenter.Instance.left_fire_target = obj_data;
                }
                else
                {
                    MsgCenter.Instance.right_fire_target = obj_data;
                }
                hit_is_ai = false;
            }
            //  判断是weapon3时
            if (MsgCenter.Instance.player.useWeapon.Name.Equals("weapon3"))
            {
                //if (obj_data != null)
                //{
                //    Debug.Log((this.gameObject.name.Equals("FireLL") ? "left.isVisible = " : "right.isVisible = ") + obj_data.isVisible);
                //}

                if (obj_data != null)
                {
                    _tmpTime_fl += Time.deltaTime;
                    if (_tmpTime_fl < LOCK_TIME)
                    {
                        if (this.gameObject.name.Equals("FireLL"))
                        {
                            MsgCenter.Instance.LeftLockHub.transform.position =
                                (obj_data.transform.position - ReinObj.transform.position).normalized * CURR_DISTANCE
                                + ReinObj.transform.position;
                            if (!MsgCenter.Instance.LeftLockHub.activeSelf)
                            {
                                MsgCenter.Instance.LeftLockHub.SetActive(true);
                                Audiocontroller.instans.PlayBossAudio("suoding");
                            }
                            //Debug.Log("dis……");
                        }
                        else
                        {
                            MsgCenter.Instance.RightLockHub.transform.position =
                                (obj_data.transform.position - ReinObj.transform.position).normalized * CURR_DISTANCE
                                + ReinObj.transform.position;
                            if (!MsgCenter.Instance.RightLockHub.activeSelf)
                            {
                                MsgCenter.Instance.RightLockHub.SetActive(true);
                                Audiocontroller.instans.PlayBossAudio("suoding");
                            }
                            //Debug.Log("dis……");
                        }
                    }
                    else
                    {
                        _tmpTime_fl = 0;
                        obj_data    = null;
                    }
                }
                else
                {
                    if (this.gameObject.name.Equals("FireLL"))
                    {
                        MsgCenter.Instance.LeftLockHub.SetActive(false);
                        MsgCenter.Instance.left_fire_target = null;
                    }
                    else
                    {
                        MsgCenter.Instance.RightLockHub.SetActive(false);
                        MsgCenter.Instance.right_fire_target = null;
                    }
                }
            }
            else
            {
                if (this.gameObject.name.Equals("FireLL"))
                {
                    MsgCenter.Instance.LeftLockHub.SetActive(false);
                    MsgCenter.Instance.left_fire_target = null;
                }
                else
                {
                    MsgCenter.Instance.RightLockHub.SetActive(false);
                    MsgCenter.Instance.right_fire_target = null;
                }
            }
            RefresCurrentPo();
        }
    }
Beispiel #15
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;
                }
            }
        }
    }
Beispiel #16
0
    public void LuachBullet(SenceGameObject target_data, GameObject FirePoint)
    {
        Bullet bullet = new Bullet(-1, target_data._pc_man.useWeapon.Name, target_data._pc_man.Attack,
                                   FirePoint.transform.position, FirePoint.transform.rotation,
                                   ObjectState.None, ObjectType.Bullet, true);
        SenceGameObject bullet_data = MsgCenter.Instance.CreateBullet(bullet, target_data._pc_man.ID, true);

        target_data.LeftFlower.SetActive(true);
        target_data.RightFlower.SetActive(true);
        switch (target_data._pc_man.Index)
        {
        case 0:
            Audiocontroller.instans.PlayGameAudio("Ss01");    /*第一种AI发射子弹声音*/
            break;

        case 1:
            Audiocontroller.instans.PlayGameAudio("Ss02");    /*第二种AI发射子弹声音*/
            break;

        case 2:
            Audiocontroller.instans.PlayGameAudio("kehuan");    /*第三种AI发射子弹声音*/
            break;

        default:
            Debug.LogError("AI发射子弹对应声音错误 ");
            break;
        }
        Rigidbody rig1 = bullet_data.gameObject.GetComponent <Rigidbody>();

        bullet_data.transform.position = FirePoint.transform.position;
        bullet_data.gameObject.SetActive(true);
        _ray = new Ray(FirePoint.transform.position, MsgCenter.Instance.PlayerData.transform.position - FirePoint.transform.position);
        if (Physics.Raycast(_ray, out _hit, 10000))
        {
            RaycastHit[] casthits = Physics.RaycastAll(_ray);
            if (casthits[0].collider.CompareTag(SenceGameObject.PLAYER_TAG))
            {
                if (MsgCenter.Instance.HurtPoints.ContainsKey(bullet_data.SenceObject.ID))
                {
                    MsgCenter.Instance.HurtPoints[bullet_data.SenceObject.ID] = casthits[0].point;
                }
                else
                {
                    MsgCenter.Instance.HurtPoints.Add(bullet_data.SenceObject.ID, casthits[0].point);
                }
            }
            else if (casthits[1].collider.CompareTag(SenceGameObject.PLAYER_TAG))
            {
                if (MsgCenter.Instance.HurtPoints.ContainsKey(bullet_data.SenceObject.ID))
                {
                    MsgCenter.Instance.HurtPoints[bullet_data.SenceObject.ID] = casthits[1].point;
                }
                else
                {
                    MsgCenter.Instance.HurtPoints.Add(bullet_data.SenceObject.ID, casthits[1].point);
                }
            }
        }
        rig1.AddForce(FirePoint.transform.forward * MsgCenter.LUACH_FORCE);
        //Debug.Log(bullet_data.gameObject.name);
    }