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); } }
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); }
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); }