private void Start()
    {
        localController = null;
        brickSeq        = -1;
        shooter         = -1;
        InitializeAnimation();
        audioSource = GetComponent <AudioSource>();
        BrickProperty component = base.transform.parent.GetComponent <BrickProperty>();

        if (null == component)
        {
            Debug.LogError("ERROR, Fail to get brick sequence number for cannon controller");
        }
        else
        {
            brickSeq = component.Seq;
        }
        if (null != axle)
        {
            SaveAxleAngle();
        }
        muzzleFxInstances = new GameObject[muzzles.Length];
        for (int i = 0; i < muzzles.Length; i++)
        {
            muzzleFxInstances[i] = null;
        }
    }
Exemplo n.º 2
0
 protected void DrawCrossHair()
 {
     if (Screen.lockCursor)
     {
         GUI.depth = 35;
         Color color = GUI.color;
         GUI.color = Config.instance.crosshairColor;
         if (null != vCrossHair)
         {
             Vector2 vector = new Vector2((float)((Screen.width - 8) / 2), (float)(Screen.height / 2 - 8));
             TextureUtil.DrawTexture(new Rect(vector.x, vector.y, 8f, 8f), vCrossHair, ScaleMode.StretchToFill, alphaBlend: true);
             vector = new Vector2((float)((Screen.width - 8) / 2), (float)(Screen.height / 2));
             TextureUtil.DrawTexture(new Rect(vector.x, vector.y, 8f, 8f), vCrossHair, ScaleMode.StretchToFill, alphaBlend: true);
         }
         if (null != hCrossHair)
         {
             Vector2 vector = new Vector2((float)(Screen.width / 2 - 8), (float)((Screen.height - 8) / 2));
             TextureUtil.DrawTexture(new Rect(vector.x, vector.y, 8f, 8f), hCrossHair, ScaleMode.StretchToFill, alphaBlend: true);
             vector = new Vector2((float)(Screen.width / 2), (float)((Screen.height - 8) / 2));
             TextureUtil.DrawTexture(new Rect(vector.x, vector.y, 8f, 8f), hCrossHair, ScaleMode.StretchToFill, alphaBlend: true);
         }
         GUI.color = color;
         string text = string.Empty;
         if (null != localCtrl)
         {
             float horzAngle = localCtrl.GetHorzAngle();
             if ((292.5 <= (double)horzAngle && horzAngle <= 360f) || (0f <= horzAngle && horzAngle <= 67.5f))
             {
                 text += "N";
             }
             else if (112.5f <= horzAngle && horzAngle <= 247.5f)
             {
                 text += "S";
             }
             if (22.5f <= horzAngle && horzAngle <= 157.5f)
             {
                 text += "E";
             }
             else if (202.5f <= horzAngle && horzAngle <= 337.5f)
             {
                 text += "W";
             }
         }
         if (distance != float.PositiveInfinity && hitBrick.transform != null)
         {
             BrickProperty hitBrickProperty = BrickManager.Instance.GetHitBrickProperty(hitBrick.transform.gameObject, hitBrick.normal, hitBrick.point);
             if (null != hitBrickProperty)
             {
                 text += ": ";
                 text  = text + distance.ToString("0.#") + "m";
             }
         }
         LabelUtil.TextOut(new Vector2((float)(Screen.width / 2), (float)(Screen.height / 2 + 16)), text, "Label", Color.white, Color.black, TextAnchor.MiddleCenter);
     }
 }
Exemplo n.º 3
0
    private void OnLoadComplete()
    {
        TrainManager.Instance.Load();
        BrickManManager.Instance.InitFlagVars();
        SpawnerDesc spawner = BrickManager.Instance.GetSpawner(MyInfoManager.Instance.GetTeamSpawnerType(), MyInfoManager.Instance.Ticket);

        if (spawner != null)
        {
            localController.Spawn(spawner.position, Rot.ToQuaternion(spawner.rotation));
        }
        else
        {
            localController.Spawn(BrickManager.Instance.GetRandomSpawnPos(), Rot.ToQuaternion((byte)UnityEngine.Random.Range(0, 4)));
        }
        if (!MyInfoManager.Instance.GetCommonMask(MyInfoManager.COMMON_OPT.DONOT_FLAG_GUIDE))
        {
            FLAGGuideDialog fLAGGuideDialog = (FLAGGuideDialog)DialogManager.Instance.GetDialogAlways(DialogManager.DIALOG_INDEX.FLAG_GUIDE);
            if (fLAGGuideDialog != null && !fLAGGuideDialog.DontShowThisMessageAgain)
            {
                ((FLAGGuideDialog)DialogManager.Instance.Popup(DialogManager.DIALOG_INDEX.FLAG_GUIDE, exclusive: false))?.InitDialog();
            }
        }
        SpawnerDesc spawner2 = BrickManager.Instance.userMap.GetSpawner(Brick.SPAWNER_TYPE.FLAG_SPAWNER, 0);

        FlagObj.transform.position     = new Vector3(spawner2.position.x, spawner2.position.y - 0.3f, spawner2.position.z);
        BrickManManager.Instance.vFlag = FlagObj.transform.position;
        rbPlanes[2].transform.position = spawner2.position;
        spawner2 = BrickManager.Instance.userMap.GetSpawner(Brick.SPAWNER_TYPE.RED_FLAG_SPAWNER, 0);
        rbPlanes[0].transform.position = spawner2.position;
        spawner2 = BrickManager.Instance.userMap.GetSpawner(Brick.SPAWNER_TYPE.BLUE_FLAG_SPAWNER, 0);
        rbPlanes[1].transform.position = spawner2.position;
        GameObject brickObjectByPos = BrickManager.Instance.GetBrickObjectByPos(FlagObj.transform.position);

        if (null != brickObjectByPos)
        {
            BrickProperty component = brickObjectByPos.GetComponent <BrickProperty>();
            if (null == component)
            {
                Debug.LogError("<FlagObj> get BrickProperty failed..");
                return;
            }
            captureTheFlag = component.Seq;
        }
        bLoaded = true;
    }
Exemplo n.º 4
0
 public void InitDialog(BrickProperty _prop, Brick _brick, BrickInst _inst)
 {
     prop           = _prop;
     brick          = _brick;
     selected       = 0;
     scrollPosition = Vector2.zero;
     spId           = Vector2.zero;
     if (_inst.BrickForceScript != null)
     {
         alias          = _inst.BrickForceScript.Alias;
         enableOnAwake  = _inst.BrickForceScript.EnableOnAwake;
         visibleOnAwake = _inst.BrickForceScript.VisibleOnAwake;
         cmdList.Clear();
         for (int i = 0; i < _inst.BrickForceScript.CmdList.Count; i++)
         {
             cmdList.Add(_inst.BrickForceScript.CmdList[i]);
         }
     }
 }
Exemplo n.º 5
0
 public void Show(bool visible)
 {
     if (!Application.loadedLevelName.Contains("MapEditor"))
     {
         MeshRenderer[] componentsInChildren = GetComponentsInChildren <MeshRenderer>();
         MeshRenderer[] array = componentsInChildren;
         foreach (MeshRenderer meshRenderer in array)
         {
             meshRenderer.enabled = visible;
         }
         SkinnedMeshRenderer[] componentsInChildren2 = GetComponentsInChildren <SkinnedMeshRenderer>();
         SkinnedMeshRenderer[] array2 = componentsInChildren2;
         foreach (SkinnedMeshRenderer skinnedMeshRenderer in array2)
         {
             skinnedMeshRenderer.enabled = visible;
         }
         ParticleRenderer[] componentsInChildren3 = GetComponentsInChildren <ParticleRenderer>();
         ParticleRenderer[] array3 = componentsInChildren3;
         foreach (ParticleRenderer particleRenderer in array3)
         {
             particleRenderer.enabled = visible;
         }
         BrickProperty component = base.transform.parent.gameObject.GetComponent <BrickProperty>();
         if (component.Index == 162)
         {
             if (visible)
             {
                 component.Visible_t = true;
             }
             else if (component.Visible_t)
             {
                 BrickManager.Instance.DestroyBrick(component.Seq);
             }
         }
         else if (component.Index == 180 && !visible && GlobalVars.Instance.immediateKillBrickTutor)
         {
             BrickManager.Instance.DestroyBrick(component.Seq);
             GlobalVars.Instance.immediateKillBrickTutor = false;
         }
     }
 }
Exemplo n.º 6
0
    private static bool IsFaceToMeSameBrick(Vector3 myEye, Vector3 thirdEye, float d, int seq)
    {
        GameObject    gameObject    = null;
        BrickProperty brickProperty = null;
        int           layerMask     = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick"));
        Ray           ray           = default(Ray);

        ray.origin    = thirdEye;
        ray.direction = Vector3.Normalize(myEye - ray.origin);
        if (Physics.Raycast(ray, out RaycastHit hitInfo, 1000f, layerMask))
        {
            float num = Vector3.Distance(hitInfo.point, thirdEye);
            if (d > num)
            {
                GameObject gameObject2 = hitInfo.transform.gameObject;
                if (gameObject2.layer == LayerMask.NameToLayer("Brick"))
                {
                    BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject2.transform, includeInactive: false);
                    if (allComponents.Length > 0)
                    {
                        brickProperty = allComponents[0];
                    }
                }
                else
                {
                    gameObject = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point));
                    if (null != gameObject)
                    {
                        brickProperty = gameObject.GetComponent <BrickProperty>();
                    }
                }
                if (null != brickProperty && brickProperty.Seq == seq)
                {
                    return(true);
                }
            }
        }
        return(false);
    }
Exemplo n.º 7
0
    private void Start()
    {
        script = null;
        BrickProperty component = base.transform.parent.gameObject.GetComponent <BrickProperty>();

        if (null == component)
        {
            Debug.LogError("Fail to find BrickProperty");
        }
        else
        {
            BrickInst brickInst = BrickManager.Instance.GetBrickInst(component.Seq);
            if (brickInst == null)
            {
                Debug.LogError("Fail to find BrickInst ");
            }
            else
            {
                script = brickInst.BrickForceScript;
            }
            base.enabled = script.EnableOnAwake;
            Show(script.VisibleOnAwake);
        }
    }
Exemplo n.º 8
0
    public static SEND_PACKET_LEVEL check3rdPersonSendOrNoSend(GameObject player, Vector3 shootpos, Vector3 hitpoint, Vector3 shootdir, Vector3 hitnormal, int brickSeq, float range, bool possibleCan)
    {
        if (null == player)
        {
            return(SEND_PACKET_LEVEL.NONE);
        }
        int           layerMask     = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick"));
        GameObject    gameObject    = null;
        BrickProperty brickProperty = null;
        Ray           ray           = default(Ray);
        bool          flag          = true;
        bool          flag2         = true;
        float         num           = 0f;
        Plane         plane         = default(Plane);

        shootpos.y += 1.2f;
        TPController component = player.GetComponent <TPController>();

        if ((bool)component)
        {
            float num2  = Vector3.Distance(shootpos, component.transform.position);
            bool  flag3 = false;
            if (num2 < inputMinDistance)
            {
                flag3 = true;
            }
            bool flag4 = false;
            if (num2 > inputMaxDistance)
            {
                flag4 = true;
            }
            Vector3 position  = component.transform.position;
            Vector3 position2 = component.transform.position;
            position2.y += 10f;
            Vector3 c = component.transform.position + component.lookAt() * 30f;
            plane.Set3Points(position, position2, c);
            flag = true;
            Vector3 rhs = shootpos - component.transform.position;
            rhs.Normalize();
            num = Vector3.Dot(component.lookAt(), rhs);
            if (num < 0.2f)
            {
                flag = false;
            }
            flag2 = true;
            rhs   = hitpoint - component.transform.position;
            rhs.Normalize();
            num = Vector3.Dot(component.lookAt(), rhs);
            if (num <= 0.2f)
            {
                flag2 = false;
            }
            if (flag3)
            {
                return(SEND_PACKET_LEVEL.ALL);
            }
            if (flag4)
            {
                return(SEND_PACKET_LEVEL.NONE);
            }
            Vector3 position3 = component.transform.position;
            position3.y  += 1.2f;
            ray.origin    = position3;
            ray.direction = Vector3.Normalize(hitpoint - ray.origin);
            bool flag5 = false;
            if (Physics.Raycast(ray, out RaycastHit hitInfo, range, layerMask))
            {
                GameObject gameObject2 = hitInfo.transform.gameObject;
                if (gameObject2.layer == LayerMask.NameToLayer("Brick"))
                {
                    BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject2.transform, includeInactive: false);
                    if (allComponents.Length > 0)
                    {
                        brickProperty = allComponents[0];
                    }
                }
                else
                {
                    gameObject = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point));
                    if (null != gameObject)
                    {
                        brickProperty = gameObject.GetComponent <BrickProperty>();
                    }
                }
                if (null != brickProperty && brickSeq != brickProperty.Seq)
                {
                    flag5 = true;
                }
            }
            ray.direction = Vector3.Normalize(shootpos - ray.origin);
            bool flag6 = false;
            if (Physics.Raycast(ray, out hitInfo, num2 + 1f, layerMask))
            {
                float num3 = Vector3.Distance(hitInfo.point, component.transform.position);
                if (num2 > num3)
                {
                    flag6 = true;
                }
            }
            if (!flag && !flag2)
            {
                return(SEND_PACKET_LEVEL.NONE);
            }
            if (!flag5 && !flag6)
            {
                return(SEND_PACKET_LEVEL.ALL);
            }
            if (flag5 || !flag2)
            {
                if (!flag6)
                {
                    return(SEND_PACKET_LEVEL.EXCEPT_EFFECT);
                }
                if (num2 < 20f)
                {
                    return(SEND_PACKET_LEVEL.ONLY_SOUND);
                }
                return(SEND_PACKET_LEVEL.NONE);
            }
            if (!possibleCan && flag5 && flag6)
            {
                float distanceToPoint  = plane.GetDistanceToPoint(shootpos);
                float distanceToPoint2 = plane.GetDistanceToPoint(hitpoint);
                if (distanceToPoint < distanceToPoint2)
                {
                    return(SEND_PACKET_LEVEL.NONE);
                }
                if (distanceToPoint * distanceToPoint2 < 0f)
                {
                    Vector3 intersection = Vector3.zero;
                    if (LinePlaneIntersection(out intersection, shootpos, shootdir, plane.normal, position3))
                    {
                        ray.direction = component.lookAt();
                        if (Physics.Raycast(ray, out hitInfo, 30f, layerMask))
                        {
                            return(SEND_PACKET_LEVEL.EXCEPT_EFFECT);
                        }
                    }
                }
            }
            return(SEND_PACKET_LEVEL.ALL);
        }
        return(SEND_PACKET_LEVEL.ALL);
    }
Exemplo n.º 9
0
    public static SEND_PACKET_LEVEL checkSendDir(GameObject player, Vector3 myPos, Bounds bounds)
    {
        if (null == player)
        {
            return(SEND_PACKET_LEVEL.NONE);
        }
        GameObject    gameObject    = null;
        BrickProperty brickProperty = null;
        TPController  component     = player.GetComponent <TPController>();

        if ((bool)component)
        {
            Vector3  vector               = new Vector3(myPos.x, myPos.y + 1.2f, myPos.z);
            Vector3  position             = component.transform.position;
            float    x                    = position.x;
            Vector3  position2            = component.transform.position;
            float    y                    = position2.y + 1.2f;
            Vector3  position3            = component.transform.position;
            Vector3  vector2              = new Vector3(x, y, position3.z);
            float    num                  = Vector3.Distance(myPos, component.transform.position);
            Camera[] componentsInChildren = player.GetComponentsInChildren <Camera>();
            if (componentsInChildren.Length > 0)
            {
                camera               = componentsInChildren[0];
                camera.fieldOfView   = 75f;
                camera.nearClipPlane = 0.3f;
                camera.farClipPlane  = 1000f;
            }
            camera.transform.position = vector2;
            camera.transform.rotation = component.transform.rotation;
            Plane[] planes = GeometryUtility.CalculateFrustumPlanes(camera);
            if (GeometryUtility.TestPlanesAABB(planes, bounds))
            {
                int layerMask = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick"));
                Ray ray       = default(Ray);
                ray.origin    = vector2;
                ray.direction = Vector3.Normalize(vector - ray.origin);
                if (Physics.Raycast(ray, out RaycastHit hitInfo, 1000f, layerMask))
                {
                    float num2 = Vector3.Distance(hitInfo.point, vector2);
                    if (num > num2)
                    {
                        GameObject gameObject2 = hitInfo.transform.gameObject;
                        if (gameObject2.layer == LayerMask.NameToLayer("Brick"))
                        {
                            BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject2.transform, includeInactive: false);
                            if (allComponents.Length > 0)
                            {
                                brickProperty = allComponents[0];
                            }
                        }
                        else
                        {
                            gameObject = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point));
                            if (null != gameObject)
                            {
                                brickProperty = gameObject.GetComponent <BrickProperty>();
                            }
                        }
                        if (null != brickProperty && IsTransparent(brickProperty.Index) && IsFaceToMeSameBrick(vector, vector2, num, brickProperty.Seq))
                        {
                            camera.enabled = false;
                            return(SEND_PACKET_LEVEL.ALL);
                        }
                        camera.enabled = false;
                        return(SEND_PACKET_LEVEL.NONE);
                    }
                }
                camera.enabled = false;
                return(SEND_PACKET_LEVEL.ALL);
            }
            camera.enabled = false;
            return(SEND_PACKET_LEVEL.NONE);
        }
        return(SEND_PACKET_LEVEL.ALL);
    }
Exemplo n.º 10
0
 private void CheckSlash()
 {
     if (isValidRange)
     {
         int layerMask = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick")) | (1 << LayerMask.NameToLayer("BoxMan")) | (1 << LayerMask.NameToLayer("Mon")) | (1 << LayerMask.NameToLayer("InvincibleArmor")) | (1 << LayerMask.NameToLayer("Bomb")) | (1 << LayerMask.NameToLayer("InstalledBomb"));
         Ray ray       = cam.ScreenPointToRay(new Vector3((float)(Screen.width / 2), (float)(Screen.height / 2), 0f));
         if (Physics.Raycast(ray, out RaycastHit hitInfo, GetComponent <Weapon>().range, layerMask))
         {
             GameObject gameObject  = null;
             GameObject gameObject2 = hitInfo.transform.gameObject;
             if (gameObject2.layer == LayerMask.NameToLayer("Chunk") || gameObject2.layer == LayerMask.NameToLayer("Brick"))
             {
                 BrickProperty brickProperty = null;
                 GameObject    gameObject3   = null;
                 if (gameObject2.layer == LayerMask.NameToLayer("Brick"))
                 {
                     BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject2.transform, includeInactive: false);
                     if (allComponents.Length > 0)
                     {
                         brickProperty = allComponents[0];
                     }
                 }
                 else
                 {
                     gameObject = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point));
                     if (null != gameObject)
                     {
                         brickProperty = gameObject.GetComponent <BrickProperty>();
                     }
                 }
                 if (null != brickProperty)
                 {
                     P2PManager.Instance.SendPEER_HIT_BRICK(brickProperty.Seq, brickProperty.Index, hitInfo.point, hitInfo.normal, isBullet: false);
                     gameObject3 = BrickManager.Instance.GetBulletImpact(brickProperty.Index);
                     Brick brick = BrickManager.Instance.GetBrick(brickProperty.Index);
                     if (brick != null && brick.destructible)
                     {
                         brickProperty.Hit((int)CalcAtkPow());
                         if (brickProperty.HitPoint <= 0)
                         {
                             if (!Application.loadedLevelName.Contains("Tutor"))
                             {
                                 CSNetManager.Instance.Sock.SendCS_DESTROY_BRICK_REQ(brickProperty.Seq);
                             }
                             gameObject3 = null;
                             if (brickProperty.Index == 115 || brickProperty.Index == 193)
                             {
                                 CheckMyself(gameObject.transform.position, GlobalVars.Instance.BoomRadius);
                                 CheckBoxmen(gameObject.transform.position, GlobalVars.Instance.BoomRadius);
                                 CheckMonster(gameObject.transform.position, GlobalVars.Instance.BoomRadius);
                                 CheckDestructibles(gameObject.transform.position, GlobalVars.Instance.BoomRadius);
                             }
                         }
                         else
                         {
                             P2PManager.Instance.SendPEER_BRICK_HITPOINT(brickProperty.Seq, brickProperty.HitPoint);
                         }
                     }
                 }
                 if (null != gameObject3)
                 {
                     Object.Instantiate((Object)gameObject3, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                 }
             }
             else if (gameObject2.layer == LayerMask.NameToLayer("BoxMan"))
             {
                 PlayerProperty[] allComponents2 = Recursively.GetAllComponents <PlayerProperty>(gameObject2.transform, includeInactive: false);
                 TPController[]   allComponents3 = Recursively.GetAllComponents <TPController>(gameObject2.transform, includeInactive: false);
                 if (allComponents2.Length != 1)
                 {
                     Debug.LogError("PlayerProperty should be unique for a box man, but it has multiple PlayerProperty components or non ");
                 }
                 if (allComponents3.Length != 1)
                 {
                     Debug.LogError("TPController should be unique for a box man, but it has multiple TPController components or non ");
                 }
                 PlayerProperty playerProperty = null;
                 TPController   tPController   = null;
                 if (allComponents2.Length > 0)
                 {
                     playerProperty = allComponents2[0];
                 }
                 if (allComponents3.Length > 0)
                 {
                     tPController = allComponents3[0];
                 }
                 if (playerProperty != null && tPController != null)
                 {
                     int     num       = 0;
                     HitPart component = gameObject2.GetComponent <HitPart>();
                     if (component != null)
                     {
                         if (component.GetHitImpact() != null)
                         {
                             Object.Instantiate((Object)component.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                         }
                         num = (int)(CalcAtkPow() * component.damageFactor);
                         if (!playerProperty.IsHostile())
                         {
                             num = 0;
                         }
                         WeaponFunction component2 = GetComponent <WeaponFunction>();
                         if (null == component2)
                         {
                             Debug.LogError("wpnFunc == nulll");
                         }
                         TWeapon tWeapon = (TWeapon)GetComponent <Weapon>().tItem;
                         if (tWeapon == null)
                         {
                             Debug.LogError("wpn == null");
                         }
                         Item item = MyInfoManager.Instance.GetItemBySequence(component2.ItemSeq);
                         if (item == null)
                         {
                             item = MyInfoManager.Instance.GetUsingEquipByCode(tWeapon.code);
                         }
                         num = GlobalVars.Instance.applyDurabilityDamage(item?.Durability ?? (-1), tWeapon.durabilityMax, num);
                         P2PManager.Instance.SendPEER_HIT_BRICKMAN(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, (int)component.part, hitInfo.point, hitInfo.normal, lucky: false, 0, ray.direction);
                         P2PManager.Instance.SendPEER_PIERCE(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, num, Rigidity, (int)weaponBy);
                     }
                     tPController.GetHit(num, playerProperty.Desc.Seq);
                 }
             }
             else if (gameObject2.layer == LayerMask.NameToLayer("Mon"))
             {
                 MonProperty[] allComponents4 = Recursively.GetAllComponents <MonProperty>(gameObject2.transform, includeInactive: false);
                 MonProperty   monProperty    = null;
                 if (allComponents4.Length > 0)
                 {
                     monProperty = allComponents4[0];
                 }
                 if (monProperty != null)
                 {
                     HitPart component3 = gameObject2.GetComponent <HitPart>();
                     if (component3 != null)
                     {
                         if ((MyInfoManager.Instance.Slot < 4 && monProperty.Desc.bRedTeam) || (MyInfoManager.Instance.Slot >= 4 && !monProperty.Desc.bRedTeam))
                         {
                             return;
                         }
                         if (component3.GetHitImpact() != null)
                         {
                             Object.Instantiate((Object)component3.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                         }
                         if (monProperty.Desc.Xp <= 0)
                         {
                             return;
                         }
                         int num2 = (int)(CalcAtkPow() * component3.damageFactor);
                         if (monProperty.Desc.bHalfDamage)
                         {
                             num2 /= 2;
                         }
                         MonManager.Instance.Hit(monProperty.Desc.Seq, num2, 0f, (int)weaponBy, Vector3.zero, Vector3.zero, -1);
                     }
                 }
             }
             else if (gameObject2.layer == LayerMask.NameToLayer("InvincibleArmor") || gameObject2.layer == LayerMask.NameToLayer("Bomb") || gameObject2.layer == LayerMask.NameToLayer("InstalledBomb"))
             {
                 GameObject impact = VfxOptimizer.Instance.GetImpact(gameObject2.layer);
                 if (null != impact)
                 {
                     Object.Instantiate((Object)impact, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                     P2PManager.Instance.SendPEER_HIT_IMPACT(gameObject2.layer, hitInfo.point, hitInfo.normal);
                 }
             }
             isValidRange = false;
         }
     }
 }
    private void Shoot()
    {
        Vector2 vector    = accuracy.CalcDeflection();
        int     layerMask = (1 << LayerMask.NameToLayer("Chunk")) | (1 << LayerMask.NameToLayer("Brick")) | (1 << LayerMask.NameToLayer("BoxMan")) | (1 << LayerMask.NameToLayer("Mon")) | (1 << LayerMask.NameToLayer("InvincibleArmor")) | (1 << LayerMask.NameToLayer("Bomb")) | (1 << LayerMask.NameToLayer("InstalledBomb"));
        Ray     ray       = cam.ScreenPointToRay(new Vector3(vector.x, vector.y, 0f));

        if (!Application.loadedLevelName.Contains("Tutor"))
        {
            P2PManager.Instance.SendPEER_CANNON_FIRE(BrickSeq, shooter, ray.origin, ray.direction);
        }
        if (Physics.Raycast(ray, out RaycastHit hitInfo, Range, layerMask))
        {
            GameObject gameObject = hitInfo.transform.gameObject;
            if (gameObject.layer == LayerMask.NameToLayer("Brick") || gameObject.layer == LayerMask.NameToLayer("Chunk"))
            {
                GameObject    gameObject2   = null;
                BrickProperty brickProperty = null;
                GameObject    original      = null;
                Texture2D     mark          = null;
                if (gameObject.layer == LayerMask.NameToLayer("Brick"))
                {
                    BrickProperty[] allComponents = Recursively.GetAllComponents <BrickProperty>(gameObject.transform, includeInactive: false);
                    if (allComponents.Length > 0)
                    {
                        brickProperty = allComponents[0];
                    }
                }
                else
                {
                    gameObject2 = BrickManager.Instance.GetBrickObjectByPos(Brick.ToBrickCoord(hitInfo.normal, hitInfo.point));
                    if (null != gameObject2)
                    {
                        brickProperty = gameObject2.GetComponent <BrickProperty>();
                    }
                }
                if (null != brickProperty)
                {
                    P2PManager.Instance.SendPEER_HIT_BRICK(brickProperty.Seq, brickProperty.Index, hitInfo.point, hitInfo.normal, isBullet: true);
                    mark     = BrickManager.Instance.GetBulletMark(brickProperty.Index);
                    original = BrickManager.Instance.GetBulletImpact(brickProperty.Index);
                    Brick brick = BrickManager.Instance.GetBrick(brickProperty.Index);
                    if (brick != null && brick.destructible)
                    {
                        brickProperty.Hit((int)AtkPow);
                        if (brickProperty.HitPoint <= 0)
                        {
                            CSNetManager.Instance.Sock.SendCS_DESTROY_BRICK_REQ(brickProperty.Seq);
                            mark     = null;
                            original = null;
                            if (brickProperty.Index == 115 || brickProperty.Index == 193)
                            {
                                ExplosionUtil.CheckMyself(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius, -3);
                                ExplosionUtil.CheckBoxmen(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius, -3, Rigidity);
                                ExplosionUtil.CheckMonster(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius);
                                ExplosionUtil.CheckDestructibles(gameObject2.transform.position, GlobalVars.Instance.BoomDamage, GlobalVars.Instance.BoomRadius);
                            }
                        }
                        else
                        {
                            P2PManager.Instance.SendPEER_BRICK_HITPOINT(brickProperty.Seq, brickProperty.HitPoint);
                        }
                    }
                }
                if (null != gameObject2 && null != mark)
                {
                    GameObject gameObject3 = Object.Instantiate((Object)BrickManager.Instance.bulletMark, hitInfo.point, Quaternion.FromToRotation(Vector3.forward, -hitInfo.normal)) as GameObject;
                    BulletMark component   = gameObject3.GetComponent <BulletMark>();
                    component.GenerateDecal(mark, gameObject, gameObject2);
                }
                if (null != original)
                {
                    Object.Instantiate((Object)original, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                }
            }
            else if (gameObject.layer == LayerMask.NameToLayer("BoxMan"))
            {
                PlayerProperty[] allComponents2 = Recursively.GetAllComponents <PlayerProperty>(gameObject.transform, includeInactive: false);
                TPController[]   allComponents3 = Recursively.GetAllComponents <TPController>(gameObject.transform, includeInactive: false);
                if (allComponents2.Length != 1)
                {
                    Debug.LogError("PlayerProperty should be unique for a box man, but it has multiple PlayerProperty components or non ");
                }
                if (allComponents3.Length != 1)
                {
                    Debug.LogError("TPController should be unique for a box man, but it has multiple TPController components or non ");
                }
                PlayerProperty playerProperty = null;
                TPController   tPController   = null;
                if (allComponents2.Length > 0)
                {
                    playerProperty = allComponents2[0];
                }
                if (allComponents3.Length > 0)
                {
                    tPController = allComponents3[0];
                }
                if (playerProperty != null && tPController != null)
                {
                    int     num        = 0;
                    HitPart component2 = gameObject.GetComponent <HitPart>();
                    if (component2 != null)
                    {
                        bool flag = false;
                        if (component2.part == HitPart.TYPE.HEAD)
                        {
                            int layerMask2 = 1 << LayerMask.NameToLayer("Brain");
                            if (Physics.Raycast(ray, out RaycastHit hitInfo2, Range, layerMask2))
                            {
                                if (playerProperty.Desc.IsLucky())
                                {
                                    flag = true;
                                }
                                else
                                {
                                    component2 = hitInfo2.transform.gameObject.GetComponent <HitPart>();
                                }
                            }
                        }
                        if (component2.GetHitImpact() != null)
                        {
                            GameObject original2 = component2.GetHitImpact();
                            if (flag && null != component2.luckyImpact)
                            {
                                original2 = component2.luckyImpact;
                            }
                            Object.Instantiate((Object)original2, hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                        }
                        num = (int)(AtkPow * component2.damageFactor);
                        if (!playerProperty.IsHostile())
                        {
                            num = 0;
                        }
                        P2PManager.Instance.SendPEER_HIT_BRICKMAN(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, (int)component2.part, hitInfo.point, hitInfo.normal, flag, 0, ray.direction);
                        P2PManager.Instance.SendPEER_SHOOT(MyInfoManager.Instance.Seq, playerProperty.Desc.Seq, num, Rigidity, (int)weaponBy, (int)component2.part, flag, rateOfFire);
                    }
                    tPController.GetHit(num, playerProperty.Desc.Seq);
                }
            }
            else if (gameObject.layer == LayerMask.NameToLayer("Mon"))
            {
                MonProperty[] allComponents4 = Recursively.GetAllComponents <MonProperty>(gameObject.transform, includeInactive: false);
                MonProperty   monProperty    = null;
                if (allComponents4.Length > 0)
                {
                    monProperty = allComponents4[0];
                }
                if (monProperty != null)
                {
                    HitPart component3 = gameObject.GetComponent <HitPart>();
                    if (component3 != null && (MyInfoManager.Instance.Slot >= 4 || !monProperty.Desc.bRedTeam) && (MyInfoManager.Instance.Slot < 4 || monProperty.Desc.bRedTeam))
                    {
                        if (component3.GetHitImpact() != null)
                        {
                            Object.Instantiate((Object)component3.GetHitImpact(), hitInfo.point, Quaternion.Euler(0f, 0f, 0f));
                        }
                        if (monProperty.Desc.Xp > 0)
                        {
                            int num2 = (int)(AtkPow * component3.damageFactor);
                            num2 += DefenseManager.Instance.AddAtkPower;
                            if (monProperty.Desc.bHalfDamage)
                            {
                                num2 /= 2;
                            }
                            MonManager.Instance.Hit(monProperty.Desc.Seq, num2, 0f, (int)weaponBy, hitInfo.point, hitInfo.normal, -1);
                        }
                    }
                }
            }
            else if (gameObject.layer == LayerMask.NameToLayer("InvincibleArmor") || gameObject.layer == LayerMask.NameToLayer("Bomb") || gameObject.layer == LayerMask.NameToLayer("InstalledBomb"))
            {
                GameObject impact = VfxOptimizer.Instance.GetImpact(gameObject.layer);
                if (null != impact)
                {
                    Object.Instantiate((Object)impact, hitInfo.point, Quaternion.FromToRotation(Vector3.up, hitInfo.normal));
                    P2PManager.Instance.SendPEER_HIT_IMPACT(gameObject.layer, hitInfo.point, hitInfo.normal);
                }
            }
        }
    }
Exemplo n.º 12
0
    private void OnLoadComplete()
    {
        TrainManager.Instance.Load();
        for (int i = 0; i < 2; i++)
        {
            SpawnerDesc spawner = BrickManager.Instance.userMap.GetSpawner(Brick.SPAWNER_TYPE.BOMB_SPAWNER, i);
            if (spawner == null)
            {
                Debug.LogError("Fail to find BOMB SPAWNER from the geometry ");
            }
            else
            {
                GameObject brickObjectByPos = BrickManager.Instance.GetBrickObjectByPos(spawner.position);
                if (null != brickObjectByPos)
                {
                    BrickProperty component = brickObjectByPos.GetComponent <BrickProperty>();
                    if (null == component)
                    {
                        Debug.LogError("<BombObj> get BrickProperty failed..");
                    }
                    else
                    {
                        coreObjs[i].transform.position = spawner.position;
                        coreObjs[i].transform.rotation = brickObjectByPos.transform.rotation;
                        coreObjs[i].GetComponent <BlastTarget>().Spot = component.Seq;
                    }
                }
            }
        }
        bool flag = false;

        if (MyInfoManager.Instance.BreakingInto && MyInfoManager.Instance.BlastModeDesc != null)
        {
            if (MyInfoManager.Instance.BlastModeDesc.rounding)
            {
                step          = STEP.NOTHING;
                bombInstaller = -1;
                blastTarget   = -1;
                flag          = false;
            }
            else if (MyInfoManager.Instance.BlastModeDesc.bombInstaller < 0 || MyInfoManager.Instance.BlastModeDesc.blastTarget < 0)
            {
                step          = STEP.NOTHING;
                bombInstaller = -1;
                blastTarget   = -1;
                flag          = true;
            }
            else
            {
                step          = STEP.INSTALLED;
                bombInstaller = MyInfoManager.Instance.BlastModeDesc.bombInstaller;
                blastTarget   = MyInfoManager.Instance.BlastModeDesc.blastTarget;
                clockBomb.Install(MyInfoManager.Instance.BlastModeDesc.point, MyInfoManager.Instance.BlastModeDesc.normal);
                flag = true;
            }
            MyInfoManager.Instance.BlastModeDesc = null;
        }
        if (flag)
        {
            GlobalVars.Instance.battleStarting = false;
            GlobalVars.Instance.senseBombInit();
            GameObject gameObject = GameObject.Find("Main");
            if (null != gameObject)
            {
                string text = StringMgr.Instance.Get("WATCHING_USER_CHANGE");
                gameObject.BroadcastMessage("OnChat", new ChatText(ChatText.CHAT_TYPE.SYSTEM, -1, string.Empty, text));
            }
            MyInfoManager.Instance.ControlMode = MyInfoManager.CONTROL_MODE.PLAYING_SPECTATOR;
            localController.ResetGravity();
        }
        else
        {
            SpawnerDesc spawner2 = BrickManager.Instance.GetSpawner(MyInfoManager.Instance.GetTeamSpawnerType(), MyInfoManager.Instance.Ticket);
            if (spawner2 != null)
            {
                localController.Spawn(spawner2.position, Rot.ToQuaternion(spawner2.rotation));
            }
            else
            {
                localController.Spawn(BrickManager.Instance.GetRandomSpawnPos(), Rot.ToQuaternion((byte)UnityEngine.Random.Range(0, 4)));
            }
        }
        if (bRedTeam)
        {
            if (!MyInfoManager.Instance.GetCommonMask(MyInfoManager.COMMON_OPT.DONOT_EXPLOSION_ATTACK_GUIDE))
            {
                ExplosionAttackGuideDialog explosionAttackGuideDialog = (ExplosionAttackGuideDialog)DialogManager.Instance.GetDialogAlways(DialogManager.DIALOG_INDEX.EXPLOSION_ATTACK_GUIDE);
                if (explosionAttackGuideDialog != null && !explosionAttackGuideDialog.DontShowThisMessageAgain)
                {
                    ((ExplosionAttackGuideDialog)DialogManager.Instance.Popup(DialogManager.DIALOG_INDEX.EXPLOSION_ATTACK_GUIDE, exclusive: false))?.InitDialog();
                }
            }
        }
        else if (!MyInfoManager.Instance.GetCommonMask(MyInfoManager.COMMON_OPT.DONOT_EXPLOSION_DEFENCE_GUIDE))
        {
            ExplosionDefenceGuideDialog explosionDefenceGuideDialog = (ExplosionDefenceGuideDialog)DialogManager.Instance.GetDialogAlways(DialogManager.DIALOG_INDEX.EXPLOSION_DEFENCE_GUIDE);
            if (explosionDefenceGuideDialog != null && !explosionDefenceGuideDialog.DontShowThisMessageAgain)
            {
                ((ExplosionDefenceGuideDialog)DialogManager.Instance.Popup(DialogManager.DIALOG_INDEX.EXPLOSION_DEFENCE_GUIDE, exclusive: false))?.InitDialog();
            }
        }
    }