示例#1
0
        public void OnHitEnvrionment(Contexts contexts, PlayerEntity src, RaycastHit hit, MeleeAttackInfo attackInfo,
                                     MeleeFireLogicConfig config)
        {
            var                    heldConfigId = src.WeaponController().HeldConfigId;
            RaycastHit             effectHit;
            bool                   showAttackEffect  = (MeleeHitUtil.CanMeleeAttackShowHit(src, out effectHit, config.Range));
            var                    collider          = effectHit.collider != null ? effectHit.collider : hit.collider;
            FracturedHittable      fracturedHittable = collider.GetComponent <FracturedHittable>();
            FracturedAbstractChunk fracturedChunk    = HitFracturedHandler.HitFracturedObj(src, effectHit, fracturedHittable);
            var                    hasHole           = fracturedChunk == null || (fracturedChunk.HasBulletHole && !fracturedChunk.IsBroken());

            if (showAttackEffect && hasHole)
            {
                int audioId = SingletonManager.Get <AudioWeaponManager>().FindById(heldConfigId).HitList.Body;
                ClientEffectFactory.AdHitEnvironmentEffectEvent(src, effectHit.point, effectHit.normal,
                                                                EEnvironmentType.Wood, audioId, 0, heldConfigId != WeaponUtil.EmptyHandId);
            }
        }
示例#2
0
        public static MapObjectEntity GetMapObjectOfFracturedHittable(FracturedHittable fracturedHittable)
        {
            var             testChunkAdpater = fracturedHittable as FracturedObjectChunkAdapter;
            MapObjectEntity result           = null;

            if (testChunkAdpater != null && testChunkAdpater.FracturedObjectSource != null)
            {
                return(GetMapObjectByGameObject(testChunkAdpater.FracturedObjectSource.gameObject));
            }

            var testFracturedChunk = fracturedHittable as FracturedChunk;

            if (testFracturedChunk != null)
            {
                return(GetMapObjectOfFracturedChunk(testFracturedChunk));
            }

            var testFracturedGlassyChunk = fracturedHittable as FracturedGlassyChunk;

            if (testFracturedGlassyChunk != null)
            {
                return(GetMapObjectOfFracturedChunk(testFracturedGlassyChunk));
            }

            var testFracturedObject = fracturedHittable as FracturedObject;

            if (testFracturedObject != null)
            {
                return(GetMapObjectByGameObject(testFracturedObject.gameObject));
            }

            var testGlassyChunkAdapter = fracturedHittable as FracturedGlassyChunkAdapter;

            if (testGlassyChunkAdapter != null)
            {
                return(GetMapObjectByGameObject(testGlassyChunkAdapter.FracturedObjectSource.gameObject));
            }

            return(null);
        }
示例#3
0
        public static FracturedAbstractChunk HitFracturedObj(PlayerEntity src, RaycastHit hit, FracturedHittable fracturedHittable)
        {
            if (fracturedHittable != null)
            {
                var script = fracturedHittable.gameObject.GetComponent <FracturedHittable>();
                if (script == null)
                {
                    return(null);
                }

                var objtype = MapObjectUtility.GetGameObjType(script.Owner);
                if (objtype < 0)
                {
                    return(null);
                }

                int rawObjKey = MapObjectUtility.GetGameObjId(script.Owner);

                if (rawObjKey != Int32.MinValue && !SharedConfig.IsServer &&
                    MapObjectUtility.GetMapObjectByGameObject(script.Owner) == null)
                {
                    MapObjectUtility.SendCreateMapObjMsg(objtype, rawObjKey);
                    BulletHitHandler._logger.InfoFormat("CreateMapObjEvent: type:{0}, obj:{1}, num:{2}",
                                                        (ETriggerObjectType)objtype,
                                                        fracturedHittable.gameObject, src.uploadEvents.Events.Count);
                }

                return(fracturedHittable.Hit(hit.point, hit.normal));
            }

            return(null);
        }