diff --git a/.idea/.idea.space-pixel-unity/.idea/codeStyles/codeStyleConfig.xml b/.idea/.idea.space-pixel-unity/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..a55e7a17 --- /dev/null +++ b/.idea/.idea.space-pixel-unity/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/Assets/AGENTS.md b/Assets/AGENTS.md index 4bcb6c12..82c0486a 100644 --- a/Assets/AGENTS.md +++ b/Assets/AGENTS.md @@ -6,13 +6,10 @@ This game aims to be a bit similar to Highfleet, but expands on it by making ind ## Contributing Code quality is important. You can write comments, but 99% of comments should be deleted and code extracted to methods before presenting your work as done. Long method names are totally okay, as long as they are descriptive - If a component/anything is necessary for the script, don't silently fail, fail hard with an error! - Periodically check for errors - it sometimes takes a bit of time to auto compile .cs files after you write them - This project uses assemblies, so if you want to use code from other assembly, double check if you should. If you should, write the code as if you used the assembly and after compiling and seeing errors, just please let me know in the chat. I will link them manually in my IDE - +Don't manually create or edit .meta files (including by automated agents) — let Unity generate them, and only commit the .meta files Unity creates. Do a quick code review before handing off as "done", thanks! ## Gotchas @@ -57,7 +54,7 @@ UI = UIToolkit - Current modules inheritors: CommandModule (its position is the ship's position - don't use ship transform.position!). Cannon, Laser, Engine - Modules use efficiency based on how many pixels they have left - Modules have crew and power needs, and they can produce both -- UI: UI (use UIToolkit) +- UI: use UIToolkit Check `ASSEMBLY_GUIDS.md` for exact GUIDS for these and external assemblies @@ -67,3 +64,4 @@ I will run tests after you are done. Make sure to test critical functionality in Tests are in AssemblyFolder/Tests in its own assembly To allow tests to see private methods/fields, add [assembly: InternalsVisibleTo("AssemblyName.Tests")]. Then create new properties `internal InternalXYZ => XYZ` or methods like XYZForTesting A similar pattern can be done to get access to private fields in Editor inspector extensions +Use NSubstitute for mocking dependencies \ No newline at end of file diff --git a/Assets/Packages/Castle.Core.5.1.1.meta b/Assets/Packages/Castle.Core.5.1.1.meta new file mode 100644 index 00000000..5f8b430a --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 819266c5714e33cf49edd765dc419181 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/.signature.p7s b/Assets/Packages/Castle.Core.5.1.1/.signature.p7s new file mode 100644 index 00000000..e32d4930 Binary files /dev/null and b/Assets/Packages/Castle.Core.5.1.1/.signature.p7s differ diff --git a/Assets/Packages/Castle.Core.5.1.1/ASL - Apache Software Foundation License.txt b/Assets/Packages/Castle.Core.5.1.1/ASL - Apache Software Foundation License.txt new file mode 100644 index 00000000..e259b584 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/ASL - Apache Software Foundation License.txt @@ -0,0 +1,57 @@ +Apache License, Version 2.0 + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/Assets/Packages/Castle.Core.5.1.1/ASL - Apache Software Foundation License.txt.meta b/Assets/Packages/Castle.Core.5.1.1/ASL - Apache Software Foundation License.txt.meta new file mode 100644 index 00000000..315adf1f --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/ASL - Apache Software Foundation License.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f30da557fd19a2610b6691ea2c0b67e7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/CHANGELOG.md b/Assets/Packages/Castle.Core.5.1.1/CHANGELOG.md new file mode 100644 index 00000000..19edd614 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/CHANGELOG.md @@ -0,0 +1,441 @@ +# Castle Core Changelog + +## 5.1.1 (2022-12-30) + +Bugfixes: +- Proxies using records derived from a base generic record broken using .NET 6 compiler (@CesarD, #632) +- Failure proxying type that has a non-inheritable custom attribute type applied where `null` argument is given for array parameter (@stakx, #637) +- Nested custom attribute types do not get replicated (@stakx, #638) + +## 5.1.0 (2022-08-02) + +Enhancements: +- Support for covariant method returns (@stakx, #619) +- Performance improvement with proxy type generation for class proxies (without target). Abstract class methods now reuse a predefined invocation type (like methods of interface proxies without target; see explanation below at version 5.0.0 enhancements) (@stakx, #626) + +Bugfixes: +- DynamicProxy emits invalid metadata for redeclared event (@stakx, #590) +- Proxies using records with a base class broken using .NET 6 compiler (@ajcvickers, #601) +- `MissingMethodException` when proxying interfaces containing sealed methods (@stakx, #621) + +## 5.0.0 (2022-05-11) + +Enhancements: +- .NET 6.0 support (@Jevonius, #616) +- .NET Standard 2.0 and 2.1 support (@lg2de, #485) +- Non-intercepted methods on a class proxy with target are now forwarded to the target (@stakx, #571) +- Significant performance improvements with proxy type generation for interface proxies without target. Up until now, DynamicProxy generated a separate `IInvocation` implementation type for every single proxied method – it is now able to reuse a single predefined type in many cases, thereby reducing the total amount of dynamic type generation. (@stakx, #573) + +Bugfixes: +- Generic method with differently named generic arguments to parent throws `KeyNotFoundException` (@stakx, #106) +- Proxying certain `[Serializable]` classes produces proxy types that fail PEVerify test (@stakx, #367) +- `private protected` methods are not intercepted (@CrispyDrone, #535) +- `System.UIntPtr` unsupported (@stakx, #546) +- DynamicProxy generates two modules when proceeding from a class proxy's protected method to the target, causing an `InvalidOperationException` when saving the generated assembly to disk (@stakx, #569) +- Upgrade log4net to v2.0.13 (@jonorossi, @stakx, @dschwartzni, #574, #605) + +Deprecations: +- Removed support for the .NET Framework < 4.6.2 and .NET Standard 1.x. (@stakx, #495, #496; @Jevonius, #614) +- Removed support for Code Access Security (CAS). (@stakx, #502) +- Removed support for Remoting. This library no longer defines any types deriving from `MarshalByRefObject`, and `ProxyUtil.IsProxy` (which used to recognize remoting/"transparent" proxies) now tests only for DynamicProxy proxies. (@stakx, #507) +- The following public members have been removed: + - `Castle.Core.Internal.CollectionExtensions` (class) + - `Castle.Core.Internal.Lock` (class) along with all related types and methods + - `Castle.Core.Internal.PermissionUtil.IsGranted` (method) + - `Castle.Core.Pair<,>` (type). Use `System.ValueTuple<,>` or `System.Tuple<,>` instead. + - all type members in `Castle.DynamicProxy.ModuleScope` that gave direct access to DynamicProxy's type cache and `ModuleBuilder`s. Only `SaveAssembly`, `LoadAssemblyIntoCache`, and members supporting these two facilities are left public. + - almost all types and type members in the `Castle.DynamicProxy.*` sub-namespaces, as most of them are intended for internal use only. + - DynamicProxy's custom exception types have been replaced by standard BCL exceptions (where appropriate), and by a single `DynamicProxyException` type for internal DynamicProxy errors. + +## 4.4.1 (2020-05-06) + +Bugfixes: +- Prevent method name collisions when a proxy type implements more than two identically named interfaces having one or more identically named methods each. Name collisions are avoided by including the declaring types' namespaces in the proxy type's method names. (@stakx, #469) +- Reduce lock contention while generating new proxy types which previously blocked new proxy instances (@tangdf, #484) +- Fix mixins where proxy constructor fields were ordered differently to interfaces because of different case comparisons (@zapov, #475) +- Fix proxy generation for types having only a `private protected` constructor (@mriehm, #491) + +## 4.4.0 (2019-04-05) + +Enhancements: +- Added trace logging level below Debug; maps to Trace in log4net/NLog, and Verbose in Serilog (@pi3k14, #404) +- Recognize read-only parameters by the `In` modreq (@zvirja, #406) +- DictionaryAdapter: Exposed GetAdapter overloads with NameValueCollection parameter in .NET Standard (@rzontar, #423) +- Ability to add delegate mixins to proxies using `ProxyGenerationOptions.AddDelegate[Type]Mixin`. You can bind to the mixed-in `Invoke` methods on the proxy using `ProxyUtil.CreateDelegateToMixin`. (@stakx, #436) +- New `IInvocation.CaptureProceedInfo()` method to enable better implementations of asynchronous interceptors (@stakx, #439) + +Deprecations: +- The API surrounding `Lock` has been deprecated. This consists of the members listed below. Consider using the Base Class Library's `System.Threading.ReaderWriterLockSlim` instead. (@stakx, #391) + - `Castle.Core.Internal.Lock` (class) + - `Castle.Core.Internal.ILockHolder` (interface) + - `Castle.Core.Internal.IUpgradeableLockHolder` (interface) +- You should no longer manually emit types into DynamicProxy's dynamic assembly. For this reason, the following member has been deprecated. (@stakx, #445) + - `Castle.DynamicProxy.ModuleScope.DefineType` (method) +- The proxy type cache in `ModuleScope` should no longer be accessed directly. For this reason, the members listed below have been deprecated. (@stakx, #391) + - `Castle.DynamicProxy.ModuleScope.Lock` (property) + - `Castle.DynamicProxy.ModuleScope.GetFromCache` (method) + - `Castle.DynamicProxy.ModuleScope.RegisterInCache` (method) + - `Castle.DynamicProxy.Generators.BaseProxyGenerator.AddToCache` (method) + - `Castle.DynamicProxy.Generators.BaseProxyGenerator.GetFromCache` (method) + - `Castle.DynamicProxy.Generators.CacheKey` (class) + - `Castle.DynamicProxy.Serialization.CacheMappingsAttribute.ApplyTo` (method) + - `Castle.DynamicProxy.Serialization.CacheMappingsAttribute.GetDeserializedMappings` (method) + +## 4.3.1 (2018-06-21) + +Enhancements: + - Use shared read locking to reduce lock contention in InvocationHelper and ProxyUtil (@TimLovellSmith, #377) + +Bugfixes: +- Prevent interceptors from being able to modify `in` parameters (@stakx, #370) +- Make default value replication of optional parameters more tolerant of default values that are represented in metadata with a mismatched type (@stakx, #371) +- Fix a concurrency issue (writing without taking a write lock first) in `BaseProxyGenerator.ObtainProxyType` (@stakx, #383) + +Deprecations: +- `Castle.DynamicProxy.Generators.Emitters.ArgumentsUtil.IsAnyByRef` (@stakx, #370) + +## 4.3.0 (2018-06-07) + +Enhancements: +- Added .NET Standard/.NET Core support for NLog (@snakefoot, #200) +- Added .NET Standard/.NET Core support for log4net (@snakefoot, #201) +- DynamicProxy supported C# `in` parameter modifiers only on the .NET Framework up until now. Adding .NET Standard 1.5 as an additional target to the NuGet package makes them work on .NET Core, too (@stakx, #339) +- Replicate custom attributes on constructor parameters in the generated proxy type constructors to fulfill introspection of constructors. This does not change the proxying behavior. (@stakx, #341) +- Improve performance of InvocationHelper cache lookups (@tangdf, #358) +- Improve fidelity of default value replication of optional parameters to fulfill inspection of the generated proxies. This does not change the proxying behavior. (@stakx, #356) +- Improve cache performance of MethodFinder.GetAllInstanceMethods (@tangdf, #357) + +Bugfixes: +- Fix Castle.Services.Logging.Log4netIntegration assembly file name casing which breaks on Linux (@beginor, #324) +- Fix Castle.DynamicProxy.Generators.AttributesToAvoidReplicating not being thread safe (InvalidOperationException "Collection was modified; enumeration operation may not execute.") (@BrunoJuchli, #334) +- Fix TraceLoggerFactory to allow specifying the default logger level (@acjh, #342) +- Ensure that DynamicProxy doesn't create invalid dynamic assemblies when proxying types from non-strong-named assemblies (@stakx, #327) +- Fix interceptor selectors being passed `System.RuntimeType` for class proxies instead of the target type (@stakx, #359) +- Replace NullReferenceException with descriptive one thrown when interceptors swallow exceptions and cause a null value type to be returned (@jonorossi, #85) + +## 4.2.1 (2017-10-11) + +Bugfixes: +- Add missing equality checks in `MethodSignatureComparer.EqualSignatureTypes` to fix `TypeLoadException`s ("Method does not have an implementation") (@stakx, #310) +- Add missing XML documentation files to NuGet packages (@fir3pho3nixx, #312) + +## 4.2.0 (2017-09-28) + +Enhancements: +- Add IProxyTargetAccessor.DynProxySetTarget to set the target of a proxy (@yallie, #293) +- Internal dynamic proxy fields are now private instead of public (@spencercw, #260) + +Bugfixes: +- Make ProxyUtil.IsAccessible(MethodBase) take into account declaring type's accessibility so it doesn't report false negatives for e.g. public methods in inaccessible classes. (@stakx, #289) +- Fix InvalidCastException calling IChangeProxyTarget.ChangeProxyTarget proxying generic interfaces (@yallie, #293) +- Ignore minor/patch level version for AssemblyVersionAttribute as this creates binding errors for downstream libraries (@fir3pho3nixx, #288) +- Fix DictionaryAdapter firing NotifyPropertyChang(ed/ing) events after CancelEdit (@Lakritzator, #299) +- Fix ArgumentException when overriding method with nested generics (@BitWizJason, #297) +- Explicit package versioning applied within solution to avoid maligned NuGet upgrades for lock step versioned packages. (@fir3pho3nixx, #292) + +Deprecations: +- IChangeProxyTarget.ChangeProxyTarget is deprecated in favor of IProxyTargetAccessor.DynProxySetTarget (@yallie, #293) + +## 4.1.1 (2017-07-12) + +Bugfixes: +- Prevent member name collision when proxy implements same generic interface more than twice (@stakx, #88) +- Fix incorrect replication (reversed order) of custom modifiers (modopts and modreqs) on the CLR, does not work yet on Mono (@stakx, #277) +- Fix COM interface proxy error case throwing exceptions trying to release null pointer from QueryInterface (@stakx, #281) + +## 4.1.0 (2017-06-11) + +Breaking Changes: +- Remove AllowPartiallyTrustedCallersAttribute, which wasn't defined by default (@fir3pho3nixx, #241) +- Upgrade log4net to v2.0.8 (@fir3pho3nixx, #241) + +Enhancements: +- Add ProxyUtil.IsAccessible to check if a method is accessible to DynamicProxyGenAssembly2 (Blair Conrad, #235) +- Refactor build engineering to support AppVeyor and TravisCI (@fir3pho3nixx, #241) + +Bugfixes: +- Fix order of class proxy constructor arguments when using multiple mixins (@sebastienros, #230) +- Fix dependency on "System.ComponentModel.TypeConverter" NuGet package version that does not exist (#239) +- Fix ParamArrayAttribute not being replicated in proxy (@stakx, #121) +- Fix System.Net.Mail.SmtpClient is obsolete on Mono warning (#254) + +## 4.0.0 (2017-01-25) + +Breaking Changes: +- Update to NLog 4.4.1 and remove beta .NET Core support for NLog (#228) +- Update to log4net 2.0.7 (#229) + +Bugfixes: +- Fix CustomAttributeInfo.FromExpression for VB.NET (@thomaslevesque, #223) + +## 4.0.0-beta002 (2016-10-28) + +Breaking Changes: +- Rework Serilog integration to accept an ILogger rather than a LoggerConfiguration to work correctly with Serilog (#142, #211) +- Remove obsolete property `AttributesToAddToGeneratedTypes` from `ProxyGenerationOptions` (#219) +- Change type of `ProxyGenerationOptions.AdditionalAttributes` to `IList` (#219) +- Remove `IAttributeDisassembler` which is no longer necessary (#219) + +Enhancements: +- Add IProxyGenerator interface for the ProxyGenerator class (#215) +- Improve default list of attributes to avoid replicating. Code Access Security attributes and MarshalAsAttribute will no longer be replicated (#221) + +Bugfixes: +- Fix building on Mono 4.6.1 +- Different attributes in `ProxyGenerationOptions.AdditionalAttributes` now generates different proxy types (#219) + +## 4.0.0-beta001 (2016-07-17) + +Breaking Changes: +- Update to log4net 1.2.15/2.0.5 (#199) +- Update to NLog 4.4.0-beta13 (#199) +- Update to Serilog 2.0.0 (#199) + +Enhancements: +- .NET Core 1.0 and .NET Standard 1.3 support (Jonathon Rossi, Jeremy Meng) +- Restore DynamicDictionary class + +Bugfixes: +- Fix target framework moniker in NuGet package for .NET Core (#174) + +## 4.0.0-alpha001 (2016-04-07) + +Breaking Changes: +- Remove all Silverlight support (#100, #150) +- Remove DynamicProxy's RemotableInvocation and remoting support for invocations (#110, #65) + +Enhancements: +- .NET Core DNX and dotnet5.4 support via feature conditional compilation (Jonathon Rossi, Jeremy Meng) +- Build script improvements and consolidate version numbers (Blair Conrad, #75, #152, #153) + +Bugfixes: +- Fix 'System.ArgumentException: Constant does not match the defined type' with optional, nullable enum method parameters (Daniel Yankowsky, #141, #149) +- Fix proxy generation hook notification for virtual but final methods (Axel Heer, #148) +- Fix InvalidCastException with custom attribute having an enum array parameter with non-int enum (@csharper2010, #104, #105) +- Update to Mono 4.0.2 and improve Mono support (#79, #95, #102) +- Fix 'System.ArrayTypeMismatchException: Source array type cannot be assigned to destination array type' on Mono (#81) +- Fix 'System.ArgumentException: System.Decimal is not a supported constant type' with optional method parameters (@fknx, #87, #91) +- Fix ProxyGenerator cache does not take into account AdditionalAttributes (@cmerat, #77, #78) +- Fix Castle.Services.Logging.SerilogIntegration.dll missing some assembly info attributes (@imzshh, #20, #82) + +## 3.3.3 (2014-11-06) +- Fix Serilog integration modifies LoggerConfiguration.MinimumLevel (#70) +- Add SourceContext to the Serilog logger (@KevivL, #69) + +## 3.3.2 (2014-11-03) +- fixed #66 - SerilogLogger implementation bug where exceptions were passed through incorrectly + +## 3.3.1 (2014-09-10) +- implemented #61 - Added support for Serilog - contributed by Russell J Baker (@ruba1987) + +## 3.3.0 (2014-04-27) +- implemented #51 - removed abandoned projects: Binder, Pagination, Validator +- implemented #49 - build NuGet and Zip packages from TeamCity - contributed by Blair Conrad (@blairconrad) +- implemented #42 - move complicated BuildInternalsVisibleMessageForType method out of DynamicProxyBuilder - contributed by Blair Conrad (@blairconrad) +- fixed #47 - Calling DynamicProxy proxy methods with multidimensional array parameters - contributed by Ed Parcell (@edparcell) +- fixed #44 - DictionaryAdapter FetchAttribute on type has no effect +- fixed #34 and #39 - inaccessible type parameters should give better error messages - contributed by Blair Conrad (@blairconrad) + +## 3.2.2 (2013-11-30) +- fixed #35 - ParameterBuilder.SetConstant fails when using a default value of null - contributed by (@jonasro) + +## 3.2.1 (2013-10-05) +- fixed #32 - Improve configuration of SmtpClient in sync sending - contributed by Artur Dorochowicz (@ArturDorochowicz) +- fixed #31 - [DynamicProxy] Preserve DefaultValues of proxied method's parameters (in .NET 4.5) +- fixed #30 - tailoring InternalsVisibleTo message based on assembly of inaccessible type - contributed by Blair Conrad (@blairconrad) +- fixed #27 - Allow dynamic proxy of generic interfaces which have generic methods, under Mono 2.10.8 and Mono 3.0.6 - contributed by Iain Ballard (@i-e-b) +- fixed #26 - Proxy of COM class issue, reference count incremented - contributed by Jean-Claude Viau (@jcviau) +- fixed DYNPROXY-188 - CreateInterfaceProxyWithoutTarget fails with interface containing member with 'ref UIntPtr' - contributed by Pier Janssen (@Pjanssen) +- fixed DYNPROXY-186 - .Net remoting (transparent proxy) cannot be proxied - contributed by Jean-Claude Viau (@jcviau) +- fixed DYNPROXY-185 - ProxyUtil.GetUnproxiedInstance returns proxy object for ClassProxyWithTarget instead of its target - contributed by Dmitry Xlestkov (@d-s-x) + +## 3.2.0 (2013-02-16) +- fixed DYNPROXY-179 - Exception when creating a generic proxy (from cache) +- fixed DYNPROXY-175 - invalid CompositionInvocation type used when code uses interface proxies with and without InterceptorSelector + +## 3.1.0 (2012-08-05) +- fixed DYNPROXY-174 - Unable to cast object of type 'System.Collections.ObjectModel.ReadOnlyCollection\`1[System.Reflection.CustomAttributeTypedArgument]' to type 'System.Array' + +## 3.1.0 RC (2012-07-08) +- support multiple inheritance of DA attributes on interfaces. +- BREAKING CHANGE: removed propagated child notifications as it violated INotifyPropertyChanged contract +- improved DictionaryAdapter performance +- generalized IBindingList support for DictionaryAdapters +- added reference support to XmlAdapter +- BREAKING CHANGE: refactored XPathAdapter into XmlAdapter with much more flexibility to support other input like XLinq +- implemented CORE-43 - Add option to skip configuring log4net/nlog +- fixed CORE-44 - NLog logger does not preserver call site info +- fixed DYNPROXY-171 - PEVerify error on generic method definition +- fixed DYNPROXY-170 - Calls to properties inside non-intercepted methods are not forwarded to target object (regression from v2.5) +- fixed DYNPROXY-169 - Support IChangeProxyTarget on additional interfaces and mixins when using CreateInterfaceProxyWithTargetInterface + +## 3.0.0 (2011-12-13) +- no major changes since RC + +## 3.0.0 RC 1 (2011-11-20) +- Applied Jeff Sharps patch that refactored Xml DictionaryAdapter to improve maintainability and enable more complete functionality +- fixed DYNPROXY-165 - Object.GetType() and Object.MemberwiseClone() should be ignored and not reported as non-interceptable to IProxyGenerationHook +- fixed DYNPROXY-164 - Invalid Proxy type generated when there are more than one base class generic constraints +- fixed DYNPROXY-162 - ref or out parameters can not be passed back if proxied method throw an exception + +## 3.0.0 beta 1 (2011-08-14) + +Breaking Changes: +* Removed overloads of logging methods that were taking format string from ILogger and ILogger and IExtendedLogger and didn't have word Format in their name. + * For example: + * void Error(string format, params object[] args); // was removed + * void ErrorFormat(string format, params object[] args); //use this one instead + * impact - low + * fixability - medium + * description - To minimize confusion and duplication those methods were removed. + * fix - Use methods that have explicit "Format" word in their name and same signature. +* Removed WebLogger and WebLoggerFactory + * impact - low + * fixability - medium + * description - To minimize management overhead the classes were removed so that only single Client Profile version of Castle.Core can be distributed. + * fix - You can use NLog or Log4Net web logger integration, or reuse implementation of existing web logger and use it as a custom logger. +* Removed obsolete overload of ProxyGenerator.CreateClassProxy + * impact - low + * fixability - trivial + * description - Deprecated overload of ProxyGenerator.CreateClassProxy was removed to keep the method consistent with other methods and to remove confusion + * fix - whenever removed overload was used, use one of the other overloads. +* IProxyGenerationHook.NonVirtualMemberNotification method was renamed + * impact - high + * fixability - easy + * description - to accommodate class proxies with target method NonVirtualMemberNotification on IProxyGenerationHook type was renamed to more accurate + NonProxyableMemberNotification since for class proxies with target not just methods but also fields and other member that break the abstraction will + be passed to this method. + * fix - whenever NonVirtualMemberNotification is used/implemented change the method name to + NonProxyableMemberNotification. Implementors should also accommodate possibility that not + only MethodInfos will be passed as method's second parameter. +* DynamicProxy will now allow to intercept members of System.Object + * impact - very low + * fixability - easy + * description - to allow scenarios like mocking of System.Object members, DynamicProxy will not + disallow proxying of these methods anymore. AllMethodsHook (default IProxyGenerationHook) + will still filter them out though. + * fix - whenever custom IProxyGenerationHook is used, user should account for System.Object's + members being now passed to ShouldInterceptMethod and NonVirtualMemberNotification methods + and if necessary update the code to handle them appropriately. + +Bugfixes: +- fixed CORE-37 - TAB characters in the XML Configuration of a component parameter is read as String.Empty +- fixed DYNPROXY-161 - Strong Named DynamicProxy Assembly Not Available in Silverlight +- fixed DYNPROXY-159 - Sorting MemberInfo array for serialization has side effects +- fixed DYNPROXY-158 - Can't create class proxy with target and without target in same ProxyGenerator +- fixed DYNPROXY-153 - When proxying a generic interface which has an interface as GenericType . No proxy can be created +- fixed DYNPROXY-151 - Cast error when using attributes +- implemented CORE-33 - Add lazy logging +- implemented DYNPROXY-156 - Provide mechanism for interceptors to implement retry logic +- removed obsolete members from ILogger and its implementations + +## 2.5.2 (2010-11-15) +- fixed DYNPROXY-150 - Finalizer should not be proxied +- implemented DYNPROXY-149 - Make AllMethodsHook members virtual so it can be used as a base class +- fixed DYNPROXY-147 - Can't create class proxies with two non-public methods having same argument types but different return type +- fixed DYNPROXY-145 Unable to proxy System.Threading.SynchronizationContext (.NET 4.0) +- fixed DYNPROXY-144 - params argument not supported in constructor +- fixed DYNPROXY-143 - Permit call to reach "non-proxied" methods of inherited interfaces +- implemented DYNPROXY-139 - Better error message +- fixed DYNPROXY-133 - Debug assertion in ClassProxyInstanceContributor fails when proxying ISerializable with an explicit implementation of GetObjectData +- fixed CORE-32 - Determining if permission is granted via PermissionUtil does not work in .NET 4 +- applied patch by Alwin Meijs - ExtendedLog4netFactory can be configured with a stream from for example an embedded log4net xml config +- Upgraded NLog to 2.0 Beta 1 +- Added DefaultXmlSerializer to bridge XPathAdapter with standard Xml Serialization. +- XPathAdapter for DictionaryAdapter added IXPathSerializer to provide hooks for custom serialization. + +## 2.5.1 (2010-09-21) +- Interface proxy with target Interface now accepts null as a valid target value (which can be replaced at a later stage). +- DictionaryAdapter behavior overrides are now ordered with all other behaviors +- BREAKING CHANGE: removed web logger so that by default Castle.Core works in .NET 4 client profile +- added parameter to ModuleScope disabling usage of signed modules. This is to workaround issue DYNPROXY-134. Also a descriptive exception message is being thrown now when the issue is detected. +- Added IDictionaryBehaviorBuilder to allow grouping behaviors +- Added GenericDictionaryAdapter to simplify generic value sources +- fixed issue DYNPROXY-138 - Error message missing space +- fixed false positive where DynamicProxy would not let you proxy interface with target interface when target object was a COM object. +- fixed ReflectionBasedDictionaryAdapter when using indexed properties + +## 2.5.0 (2010-08-21) +- DynamicProxy will now not replicate non-public attribute types +- Applied patch from Kenneth Siewers Møller which adds parameterless constructor to DefaultSmtpSender implementation, to be able to configure the inner SmtpClient from the application configuration file (system.net.smtp). +- added support for .NET 4 and Silverlight 4, updated solution to VisualStudio 2010 +- Removed obsolete overload of CreateClassProxy +- Added class proxy with target +- Added ability to intercept explicitly implemented generic interface methods on class proxy. +- DynamicProxy does not disallow intercepting members of System.Object anymore. AllMethodsHook will still filter them out though. +- Added ability to intercept explicitly implemented interface members on class proxy. Does not support generic members. +- Merged DynamicProxy into Core binary +- fixed DYNPROXY-ISSUE-132 - "MetaProperty equals implementation incorrect" +- Fixed bug in DiagnosticsLoggerTestCase, where when running as non-admin, the teardown will throw SecurityException (contributed by maxild) +- Split IoC specific classes into Castle.Windsor project +- Merged logging services solution +- Merged DynamicProxy project + +## 1.2.0 (2010-01-11) +- Added IEmailSender interface and its default implementation + +## 1.2.0 beta (2009-12-04) +- BREAKING CHANGE - added ChangeProxyTarget method to IChangeProxyTarget interface +- added docs to IChangeProxyTarget methods +- Fixed DYNPROXY-ISSUE-108 - Obtaining replicated custom attributes on proxy may fail when property setter throws exception on default value +- Moved custom attribute replication from CustomAttributeUtil to new interface - IAttributeDisassembler +- Exposed IAttributeDisassembler via ProxyGenerationOptions, so that users can plug their implementation for some convoluted scenarios. (for Silverlight) +- Moved IInterceptorSelector from Dynamic Proxy to Core (IOC-ISSUE-156) + +## 1.1.0 (2009-05-04) +- Applied Eric Hauser's patch fixing CORE-ISSUE-22 + "Support for environment variables in resource URI" +- Applied Gauthier Segay's patch fixing CORE-ISSUE-20 + "Castle.Core.Tests won't build via nant because it use TraceContext without referencing System.Web.dll" +- Added simple interface to ComponentModel to make optional properties required. +- Applied Mark's -- -- patch that changes + the Core to support being compiled for Silverlight 2 +- Applied Louis DeJardin's patch adding TraceLogger as a new logger implementation +- Applied Chris Bilson's patch fixing CORE-15 + "WebLogger Throws When Logging Outside of an HttpContext" + +## Release Candidate 3 +- Added IServiceProviderEx which extends IServiceProvider +- Added Pair class. +- Applied Bill Pierce's patch fixing CORE-9 + "Allow CastleComponent Attribute to Specify Lifestyle in Constructor" +- Added UseSingleInterfaceProxy to CompomentModel to control the proxying + behavior while maintaining backward compatibility. + Added the corresponding ComponentProxyBehaviorAttribute. +- Made NullLogger and IExtnededLogger +- Enabled a new format on ILogger interface, with 6 overloads for each method: + - Debug(string) + - Debug(string, Exception) + - Debug(string, params object[]) + - DebugFormat(string, params object[]) + - DebugFormat(Exception, string, params object[]) + - DebugFormat(IFormatProvider, string, params object[]) + - DebugFormat(IFormatProvider, Exception, string, params object[]) + - The "FatalError" overloads where marked as [Obsolete], replaced by "Fatal" and "FatalFormat". + +## 0.0.1.0 +- Included IProxyTargetAccessor +- Removed IMethodInterceptor and IMethodInvocation, that have been replaced by IInterceptor and IInvocation +- Added FindByPropertyInfo to PropertySetCollection +- Made the DependencyModel.IsOptional property writable +- Applied Curtis Schlak's patch fixing IOC-27 + "assembly resource format only works for resources where the assemblies name and default namespace are the same." + + Quoting: + + "I chose to preserve backwards compatibility by implementing the code in the + reverse order as suggested by the reporter. Given the following URI for a resource: + + assembly://my.cool.assembly/context/moo/file.xml + + It will initially look for an embedded resource with the manifest name of + "my.cool.assembly.context.moo.file.xml" in the loaded assembly my.cool.assembly.dll. + If it does not find it, then it looks for the embedded resource with the manifest name + of "context.moo.file.xml". +- IServiceEnabledComponent Introduced to be used across the project as + a standard way to have access to common services, for example, logger factories +- Added missing log factories +- Refactor StreamLogger and DiagnosticLogger to be more consistent behavior-wise +- Refactored WebLogger to extend LevelFilteredLogger (removed duplication) +- Refactored LoggerLevel order +- Project started diff --git a/Assets/Packages/Castle.Core.5.1.1/CHANGELOG.md.meta b/Assets/Packages/Castle.Core.5.1.1/CHANGELOG.md.meta new file mode 100644 index 00000000..3234ff71 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8fac07517e9d441928a71d38a25942b8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/Castle.Core.nuspec b/Assets/Packages/Castle.Core.5.1.1/Castle.Core.nuspec new file mode 100644 index 00000000..a2179779 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/Castle.Core.nuspec @@ -0,0 +1,33 @@ + + + + Castle.Core + 5.1.1 + Castle Project Contributors + Apache-2.0 + https://licenses.nuget.org/Apache-2.0 + castle-logo.png + http://www.castleproject.org/ + http://www.castleproject.org/img/castle-logo.png + Castle Core, including DynamicProxy, Logging Abstractions and DictionaryAdapter + Copyright (c) 2004-2022 Castle Project - http://www.castleproject.org/ + castle dynamicproxy dynamic proxy dynamicproxy2 dictionaryadapter emailsender + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Assets/Packages/Castle.Core.5.1.1/Castle.Core.nuspec.meta b/Assets/Packages/Castle.Core.5.1.1/Castle.Core.nuspec.meta new file mode 100644 index 00000000..eebfda40 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/Castle.Core.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d20fb5e901128b54bbee4f5b0d28be45 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/LICENSE b/Assets/Packages/Castle.Core.5.1.1/LICENSE new file mode 100644 index 00000000..c8680e41 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/LICENSE @@ -0,0 +1,13 @@ +Copyright 2004-2021 Castle Project - http://www.castleproject.org/ + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/Assets/Packages/Castle.Core.5.1.1/LICENSE.meta b/Assets/Packages/Castle.Core.5.1.1/LICENSE.meta new file mode 100644 index 00000000..9d30462d --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7b5924eefb64c9853a2e5b5f2d7810a7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/castle-logo.png b/Assets/Packages/Castle.Core.5.1.1/castle-logo.png new file mode 100644 index 00000000..6ca6bfbc Binary files /dev/null and b/Assets/Packages/Castle.Core.5.1.1/castle-logo.png differ diff --git a/Assets/Packages/Castle.Core.5.1.1/castle-logo.png.meta b/Assets/Packages/Castle.Core.5.1.1/castle-logo.png.meta new file mode 100644 index 00000000..437b6a9a --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/castle-logo.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: b1c4e0ddc0a98ef97a341aaf19c0a913 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 1 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Bullet_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 7 + height: 16 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 47656d65394e6ae10800000000000000 + internalID: 2208703988740019828 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Bullet_0: 2208703988740019828 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/lib.meta b/Assets/Packages/Castle.Core.5.1.1/lib.meta new file mode 100644 index 00000000..c4142a8e --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cb9a09818a0ccafa5bab1a7aea6e3880 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1.meta b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1.meta new file mode 100644 index 00000000..bb35eda4 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b4373c59bd843ac58a52d76ff1b1cd1e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.dll b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.dll new file mode 100644 index 00000000..023dc29f Binary files /dev/null and b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.dll differ diff --git a/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.dll.meta b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.dll.meta new file mode 100644 index 00000000..77439b86 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.dll.meta @@ -0,0 +1,67 @@ +fileFormatVersion: 2 +guid: 4457b0f6eed08a9269f35e6367ed0e73 +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Android: + enabled: 0 + settings: + AndroidLibraryDependee: UnityLibrary + AndroidSharedLibraryType: Executable + CPU: ARMv7 + Any: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.xml b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.xml new file mode 100644 index 00000000..82fa711d --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.xml @@ -0,0 +1,9122 @@ + + + + Castle.Core + + + + + Abstract adapter for the + + support + needed by the + + + + + + Adds an element with the provided key and value to the object. + + The to use as the key of the element to add. + + The to use as the value of the element to add. + + An element with the same key already exists in the object. + + key is null. + The is + read-only.-or- The has a fixed size. + + + + + Removes all elements from the object. + + The object + is read-only. + + + + + Determines whether the object contains an element + with the specified key. + + The key to locate in the object. + + + true if the contains an element with the key; + otherwise, false. + + key is null. + + + + Returns an object for the object. + + + An object for the object. + + + + + Gets a value indicating whether the object has a + fixed size. + + true if the object has a fixed size; otherwise, + false. + + + + + Gets a value indicating whether the object is + read-only. + + true if the object is read-only; otherwise, + false. + + + + + Gets an object containing the keys of the object. + + An object containing the keys of the object. + + + + + Removes the element with the specified key from the object. + + The key of the element to remove. + The object + is read-only.-or- The has a fixed size. + + key is null. + + + + Gets an object containing the values in the object. + + An object containing the values in the object. + + + + + Gets or sets the + + with the specified key. + + + + + Copies the elements of the to an , starting at a particular index. + + The one-dimensional that is the destination of the + elements copied from . The must have zero-based indexing. + + The zero-based index in array at which copying begins. + array is null. + The type of the source cannot be cast automatically to the type of the + destination array. + + index is less than zero. + array is multidimensional.-or- index is equal to or greater + than the length of array.-or- The number of elements in the source is greater than the available space from index to + the end of the destination array. + + + + + Gets the number of elements contained in the . + + The number of elements contained in the . + + + + + Gets a value indicating whether access to the is + synchronized (thread safe). + + true if access to the is synchronized (thread + safe); otherwise, false. + + + + + Gets an object that can be used to synchronize access to the . + + An object that can be used to synchronize access to the . + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the + collection. + + + + + Abstract implementation of. + + + + + Identifies a property should be represented as a nested component. + + + + + Applies no prefix. + + + + + Gets or sets the prefix. + + The prefix. + + + + Identifies the dictionary adapter types. + + + + + Assigns a specific dictionary key. + + + + + Identifies an interface or property to be pre-fetched. + + + + + Instructs fetching to occur. + + + + + Instructs fetching according to + + + + + + Gets whether or not fetching should occur. + + + + + Assigns a property to a group. + + + + + Constructs a group assignment. + + The group name. + + + + Constructs a group assignment. + + The group name. + + + + Gets the group the property is assigned to. + + + + + Suppresses any on-demand behaviors. + + + + + Assigns a specific dictionary key. + + + + + Initializes a new instance of the + + class. + + The key. + + + + Initializes a new instance of the + + class. + + The compound key. + + + + Assigns a prefix to the keyed properties of an interface. + + + Key prefixes are not inherited by sub-interfaces. + + + + + Initializes a default instance of the + + class. + + + + + Initializes a new instance of the + + class. + + The prefix for the keyed properties of the interface. + + + + Gets the prefix key added to the properties of the interface. + + + + + Substitutes part of key with another string. + + + + + Initializes a new instance of the + + class. + + The old value. + The new value. + + + + Requests support for multi-level editing. + + + + + Generates a new GUID on demand. + + + + + Support for on-demand value resolution. + + + + + Specifies assignment by reference rather than by copying. + + + + + Removes a property if matches value. + + + + + Removes a property if null or empty string, guid or collection. + + + + + Provides simple string formatting from existing properties. + + + + + Gets the string format. + + + + + Gets the format properties. + + + + + Identifies a property should be represented as a delimited string value. + + + + + Gets the separator. + + + + + Converts all properties to strings. + + + + + Gets or sets the format. + + The format. + + + + Suppress property change notifications. + + + + + Assigns a prefix to the keyed properties using the interface name. + + + + + Indicates that underlying values are changeable and should not be cached. + + + + + Initializes a new instance of the + + class + that represents a child object in a larger object graph. + + + + + Manages conversion between property values. + + + + + Initializes a new instance of the + + class. + + The converter. + + + + + + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + Uses Reflection.Emit to expose the properties of a dictionary + through a dynamic implementation of a typed interface. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wraps a + + with a dynamic object to expose a bit better looking API. + The implementation is trivial and assumes keys ares. + + + + + Contract for manipulating the Dictionary adapter. + + + + + Defines the contract for building typed dictionary adapters. + + + + + Gets a typed adapter bound to the. + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the. + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the. + + The typed interface. + The underlying source of properties. + The property descriptor. + An implementation of the typed interface bound to the dictionary. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the. + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the namedValues. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the. + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the namedValues. + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the. + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the. + + + The type represented by T must be an interface with properties. + + + + + Gets a typed adapter bound to the. + + The typed interface. + The underlying source of properties. + An implementation of the typed interface bound to the. + + + The type represented by T must be an interface with properties. + + + + + Gets the + + associated with the type. + + The typed interface. + The adapter meta-data. + + + + Gets the + + associated with the type. + + The typed interface. + The property descriptor. + The adapter meta-data. + + + + Gets the + + associated with the type. + + The typed interface. + Another + + from which to copy behaviors. + + The adapter meta-data. + + + + Contract for traversing a. + + + + + Defines the contract for customizing dictionary access. + + + + + Determines relative order to apply related behaviors. + + + + + Copies the dictionary behavior. + + null if should not be copied. Otherwise copy. + + + + Defines the contract for building + + s. + + + + + Builds the dictionary behaviors. + + + + + Contract for creating additional Dictionary adapters. + + + + + Contract for editing the Dictionary adapter. + + + + + Contract for dictionary initialization. + + + + + Performs any initialization of the + + + The dictionary adapter. + The dictionary behaviors. + + + + Defines the contract for building typed dictionary keys. + + + + + Builds the specified key. + + The dictionary adapter. + The current key. + The property. + The updated key + + + + Contract for dictionary meta-data initialization. + + + + + Initializes the given + + object. + + The dictionary adapter factory. + The dictionary adapter meta. + + + + + Determines whether the given behavior should be included in a new + + object. + + A dictionary behavior or annotation. + True if the behavior should be included; otherwise, false. + + + behaviors are always included, + regardless of the result of this method. + + + + + + Contract for managing Dictionary adapter notifications. + + + + + Defines the contract for retrieving dictionary values. + + + + + Gets the effective dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if return only existing. + The effective property value. + + + + Defines the contract for updating dictionary values. + + + + + Sets the stored dictionary value. + + The dictionary adapter. + The key. + The stored value. + The property. + true if the property should be stored. + + + + Contract for validating Dictionary adapter. + + + + + Contract for dictionary validation. + + + + + Determines if + + is valid. + + The dictionary adapter. + true if valid. + + + + Validates the. + + The dictionary adapter. + The error summary information. + + + + Validates the + + for a property. + + The dictionary adapter. + The property to validate. + The property summary information. + + + + Invalidates any results cached by the validator. + + The dictionary adapter. + + + + Contract for property descriptor initialization. + + + + + Performs any initialization of the + + + The property descriptor. + The property behaviors. + + + + + + + + + Initializes a new instance of the + + class. + + The name values. + + + + Gets a value indicating whether the object is + read-only. + + true if the object is read-only; otherwise, + false. + + + + + Determines whether the object contains an element + with the specified key. + + The key to locate in the object. + + + true if the contains an element with the key; + otherwise, false. + + key is null. + + + + Gets or sets the + + with the specified key. + + + + + Adapts the specified name values. + + The name values. + + + + Describes a dictionary property. + + + + + Initializes an empty + + class. + + + + + Initializes a new instance of the + + class. + + The property. + The annotations. + + + + Initializes a new instance + + class. + + + + + Copies an existing instance of the + + class. + + + + + + + + + + Gets the property name. + + + + + Gets the property type. + + + + + Gets the property. + + The property. + + + + Returns true if the property is dynamic. + + + + + Gets additional state. + + + + + Determines if property should be fetched. + + + + + Determines if property must exist first. + + + + + Determines if notifications should occur. + + + + + Gets the property behaviors. + + + + + Gets the type converter. + + The type converter. + + + + Gets the extended properties. + + + + + Gets the setter. + + The setter. + + + + Gets the key builders. + + The key builders. + + + + Gets the setter. + + The setter. + + + + Gets the getter. + + The getter. + + + + Gets the initializers. + + The initializers. + + + + Gets the meta-data initializers. + + The meta-data initializers. + + + + Gets the key. + + The dictionary adapter. + The key. + The descriptor. + + + + Gets the property value. + + The dictionary adapter. + The key. + The stored value. + The descriptor. + true if return only existing. + + + + Sets the property value. + + The dictionary adapter. + The key. + The value. + The descriptor. + + + + Adds a single behavior. + + The behavior. + + + + Adds the behaviors. + + The behaviors. + + + + Adds the behaviors. + + The behaviors. + + + + Copies the behaviors to the other + + + + + + Copies the + + + + + + Provides a generic collection that supports data binding. + + + This class wraps the CLR + + in order to implement the Castle-specific. + + The type of elements in the list. + + + + Initializes a new instance of the + + class + using default values. + + + + + Initializes a new instance of the + + class + with the specified list. + + + An + + of items + to be contained in the. + + + + + Initializes a new instance of the + + class + wrapping the specified + + instance. + + + A + + to be wrapped by the. + + + + + Contract for value matching. + + + + + Contract for dynamic value resolution. + + + + + Contract for typed dynamic value resolution. + + + + + + This is an abstract + + implementation + that deals with methods that can be abstracted away + from underlying implementations. + + + + AbstractConfiguration + makes easier to implementers + to create a new version of + + + + + + + Gets node attributes. + + + All attributes of the node. + + + + + Gets all child nodes. + + The + + of child nodes. + + + + + Gets the name of the. + + + The Name of the. + + + + + Gets the value of. + + + The Value of the. + + + + + Gets the value of the node and converts it + into specified. + + The + + + + The Default value returned if the conversion fails. + + The Value converted into the specified type. + + + + A collection of + + objects. + + + + + Creates a new instance of ConfigurationCollection. + + + + + Creates a new instance of ConfigurationCollection. + + + + + + is a interface encapsulating a configuration node + used to retrieve configuration values. + + + + + Gets the name of the node. + + + The Name of the node. + + + + + Gets the value of the node. + + + The Value of the node. + + + + + Gets an + + of + + elements containing all node children. + + The Collection of child nodes. + + + + Gets an + + of the configuration attributes. + + + + + Gets the value of the node and converts it + into specified. + + The + + + + The Default value returned if the conversion fails. + + The Value converted into the specified type. + + + + Initializes a new instance of the + + class. + + The name. + + + + Gets the value of. + + + The Value of the. + + + + + Deserializes the specified node into an abstract representation of configuration. + + The node. + + + + If a config value is an empty string we return null, this is to keep + backward compatibility with old code + + + + + Helper class for retrieving attributes. + + + + + Gets the attribute. + + The type. + The type attribute. + + + + Gets the attributes. Does not consider inherited attributes! + + The type. + The type attributes. + + + + Gets the attribute. + + The member. + The member attribute. + + + + Gets the attributes. Does not consider inherited attributes! + + The member. + The member attributes. + + + + Gets the type attribute. + + The type. + The type attribute. + + + + Gets the type attributes. + + The type. + The type attributes. + + + + Gets the type converter. + + The member. + + + + Constant to use when making assembly internals visible to Castle.Core + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToCastleCore)] + + + + + Constant to use when making assembly internals visible to proxy types generated by DynamicProxy. + Required when proxying internal types. + [assembly: InternalsVisibleTo(CoreInternalsVisible.ToDynamicProxyGenAssembly2)] + + + + + Find the best available name to describe a type. + + + Usually the best name will be, but + sometimes that's null (see + http://msdn.microsoft.com/en-us/library/system.type.fullname%28v=vs.110%29.aspx) + in which case the method falls back to. + + the type to name + the best name + + + + Defines that the implementation wants a + + in order to + access other components. The creator must be aware + that the component might (or might not) implement + the interface. + + + Used by Castle Project components to, for example, + gather logging factories + + + + + Increments IServiceProvider with a generic service resolution operation. + + + + + This interface should be implemented by classes + that are available in a bigger context, exposing + the container to different areas in the same application. + + For example, in Web application, the (global) HttpApplication + subclasses should implement this interface to expose + the configured container + + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Gets the configuration file. + + i.e. log4net.config + + + + Gets the configuration file. + + i.e. log4net.config + + + + The Logger sending everything to the standard output streams. + This is mainly for the cases when you have a utility that + does not have a logger to supply. + + + + + Creates a new ConsoleLogger with the + Level + set to LoggerLevel.Debug and the + Name + set to string.Empty. + + + + + Creates a new ConsoleLogger with the + Name + set to string.Empty. + + The logs Level. + + + + Creates a new ConsoleLogger with the + Level + set to LoggerLevel.Debug. + + The logs Name. + + + + Creates a new ConsoleLogger. + + The logs Name. + The logs Level. + + + + A Common method to log. + + The level of logging + The name of the logger + The Message + The Exception + + + + Returns a new ConsoleLogger with the name + added after this loggers name, with a dot in between. + + The added hierarchical name. + A new ConsoleLogger. + + + + + The Logger using standard Diagnostics namespace. + + + + + Creates a logger based on. + + + + + + + + Creates a logger based on. + + + + + + + + + + + Creates a logger based on. + + + + + + + + + + + + + + Interface for Context Properties implementations + + + + This interface defines a basic property get set accessor. + + + Based on the ContextPropertiesBase of log4net, by Nicko Cadell. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Provides an interface that supports + + and + allows the storage and retrieval of Contexts. These are supported in + both log4net and NLog. + + + + + Exposes the Global Context of the extended logger. + + + + + Exposes the Thread Context of the extended logger. + + + + + Exposes the Thread Stack of the extended logger. + + + + + Provides a factory that can produce either + + or + + classes. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Creates a new extended logger, getting the logger name from the specified type. + + + + + Creates a new extended logger. + + + + + Manages logging. + + + This is a facade for the different logging subsystems. + It offers a simplified interface that follows IOC patterns + and a simplified priority/level/severity abstraction. + + + + + Determines if messages of priority "trace" will be logged. + + True if "trace" messages will be logged. + + + + Determines if messages of priority "debug" will be logged. + + True if "debug" messages will be logged. + + + + Determines if messages of priority "error" will be logged. + + True if "error" messages will be logged. + + + + Determines if messages of priority "fatal" will be logged. + + True if "fatal" messages will be logged. + + + + Determines if messages of priority "info" will be logged. + + True if "info" messages will be logged. + + + + Determines if messages of priority "warn" will be logged. + + True if "warn" messages will be logged. + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + If the name has an empty element name. + + + + Logs a trace message. + + The message to log + + + + Logs a trace message with lazily constructed message. The message will be constructed only if the + + is true. + + + + + Logs a trace message. + + The exception to log + The message to log + + + + Logs a trace message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a trace message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a trace message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a trace message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The message to log + + + + Logs a debug message with lazily constructed message. The message will be constructed only if the + + is true. + + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The message to log + + + + Logs an error message with lazily constructed message. The message will be constructed only if the + + is true. + + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message with lazily constructed message. The message will be constructed only if the + + is true. + + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The message to log + + + + Logs a info message with lazily constructed message. The message will be constructed only if the + + is true. + + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The message to log + + + + Logs a warn message with lazily constructed message. The message will be constructed only if the + + is true. + + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Manages the instantiation ofs. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + Creates a new logger, getting the logger name from the specified type. + + + + + Creates a new logger. + + + + + The Level Filtered Logger class. This is a base class which + provides a LogLevel attribute and reroutes all functions into + one Log method. + + + + + Creates a new LevelFilteredLogger. + + + + + The LoggerLevel that this logger + will be using. Defaults to + LoggerLevel.Off + + + + + The name that this logger will be using. + Defaults to + string.Empty + + + + + Logs a trace message. + + The message to log + + + + Logs a trace message. + + A functor to create the message + + + + Logs a trace message. + + The exception to log + The message to log + + + + Logs a trace message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a trace message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a trace message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a trace message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The message to log + + + + Logs a debug message. + + The exception to log + The message to log + + + + Logs a debug message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a debug message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The message to log + + + + Logs an info message. + + The exception to log + The message to log + + + + Logs an info message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an info message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The message to log + + + + Logs a warn message. + + The exception to log + The message to log + + + + Logs a warn message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a warn message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The message to log + + + + Logs an error message. + + The exception to log + The message to log + + + + Logs an error message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs an error message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The message to log + + + + Logs a fatal message. + + The exception to log + The message to log + + + + Logs a fatal message. + + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Logs a fatal message. + + The exception to log + The format provider to use + Format string for the message to log + Format arguments for the message to log + + + + Determines if messages of priority "trace" will be logged. + + + true + if log level flags include the + + bit + + + + + Determines if messages of priority "debug" will be logged. + + + true + if log level flags include the + + bit + + + + + Determines if messages of priority "info" will be logged. + + + true + if log level flags include the + + bit + + + + + Determines if messages of priority "warn" will be logged. + + + true + if log level flags include the + + bit + + + + + Determines if messages of priority "error" will be logged. + + + true + if log level flags include the + + bit + + + + + Determines if messages of priority "fatal" will be logged. + + + true + if log level flags include the + + bit + + + + + Implementors output the log content by implementing this method only. + Note that exception can be null + + + + + Supporting Logger levels. + + + + + Logging will be off + + + + + Fatal logging level + + + + + Error logging level + + + + + Warn logging level + + + + + Info logging level + + + + + Debug logging level + + + + + Trace logging level + + + + + NullLogFactory used when logging is turned off. + + + + + Creates an instance of ILogger with the specified name. + + Name. + + + + Creates an instance of ILogger with the specified name and LoggerLevel. + + Name. + Level. + + + + The Null Logger class. This is useful for implementations where you need + to provide a logger to a utility class, but do not want any output from it. + It also helps when you have a utility that does not have a logger to supply. + + + + + Returns empty context properties. + + + + + Returns empty context properties. + + + + + Returns empty context stacks. + + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + No-op. + + false + + + + Returns this NullLogger. + + Ignored + This ILogger instance. + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + + + + No-op. + + Ignored + Ignored + Ignored + Ignored + + + + The Stream Logger class. This class can stream log information + to any stream, it is suitable for storing a log file to disk, + or to a MemoryStream for testing your components. + + + This logger is not thread safe. + + + + + Creates a new StreamLogger with default encoding + and buffer size. Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + + + Creates a new StreamLogger with default buffer size. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + + + Creates a new StreamLogger. + Initial Level is set to Debug. + + + The name of the log. + + + The stream that will be used for logging, + seeking while the logger is alive + + + The encoding that will be used for this stream. + + + + The buffer size that will be used for this stream. + + + + + + Creates a new StreamLogger with + Debug as default Level. + + The name of the log. + The StreamWriter the log will write to. + + + + + Creates + + outputting + to files. The name of the file is derived from the log name + plus the 'log' extension. + + + + + The TraceLogger sends all logging to the System.Diagnostics.TraceSource + built into the .net framework. + + + Logging can be configured in the system.diagnostics configuration + section. + + If logger doesn't find a source name with a full match it will + use source names which match the namespace partially. For example you can + configure from all castle components by adding a source name with the + name "Castle". + + If no portion of the namespace matches the source named "Default" will + be used. + + + + + Build a new trace logger based on the named TraceSource + + The name used to locate the best TraceSource. In most cases comes from the using type's + fullname. + + + + + Build a new trace logger based on the named TraceSource + + The name used to locate the best TraceSource. In most cases comes from the using type's + fullname. + + The default logging level at which this source should write messages. In almost all + cases this + default value will be overridden in the config file. + + + + + Create a new child logger. + The name of the child logger is [current-loggers-name].[passed-in-name] + + The Subname of this logger. + The New ILogger instance. + + + + Used to create the TraceLogger implementation of ILogger interface. See. + + + + + List of utility methods related to dynamic proxy operations + + + + + Determines whether the specified type is a proxy generated by + DynamicProxy (1 or 2). + + The type. + + true + if it is a proxy; otherwise, false. + + + + + Readonly implementation of + + which uses an anonymous object as its source. Uses names of properties as keys, and property values + as... well - values. Keys are not case sensitive. + + + + + Initializes a new instance of the + + class. + + The target. + + + + Gets the number of elements contained in the. + + The number of elements contained in the. + + + + + Gets a value indicating whether access to the + + is synchronized (thread safe). + + true if access to the + + is synchronized (thread safe); otherwise, false. + + + + + Gets an object that can be used to synchronize access to the. + + An object that can be used to synchronize access to the. + + + + + Gets a value indicating whether the + + object is read-only. + + true if the + + object is read-only; otherwise, false. + + + + + Gets or sets the + + with the specified key. + + + + + Gets an + + object containing the keys of the + + object. + + An + + object containing the keys of the + + object. + + + + + Gets an + + object containing the values in the + + object. + + An + + object containing the values in the + + object. + + + + + Gets a value indicating whether the + + object has a fixed size. + + true if the + + object has a fixed size; otherwise, false. + + + + + Adds an element with the provided key and value to the + + object. + + The + + to use as the key of the element to add. + + The + + to use as the value of the element to add. + + + + is null. + + An element with the same key already exists in the + + object. + + The + + is read-only.-or- The + + has a fixed size. + + + + + Removes all elements from the + + object. + + The + + object is read-only. + + + + + Determines whether the + + object contains an element with the specified key. + + The key to locate in the + + object. + + + true if the + + contains an element with the key; otherwise, false. + + + + is null. + + + + + Removes the element with the specified key from the + + object. + + The key of the element to remove. + + + is null. + + The + + object is read-only.-or- The + + has a fixed size. + + + + + Returns an enumerator that iterates through a collection. + + + An + + object that can be used to iterate through the collection. + + + + + Copies the elements of the + + to an, starting at a particular + + index. + + The one-dimensional + + that is the destination of the elements copied from. The + + must have zero-based indexing. + + The zero-based index in + + at which copying begins. + + + + is null. + + + + is less than zero. + + + + is multidimensional.-or- + + is equal to or greater than the length of.-or- The number of elements in the source + + is greater than the available space from + + to the end of the destination. + + The type of the source + + cannot be cast automatically to the type of the destination. + + + + + Returns an + + object for the + + object. + + + An + + object for the + + object. + + + + + Reads values of properties from + + and inserts them into + + using property names as keys. + + + + + + + + + + This returns a new stream instance each time it is called. + It is the responsibility of the caller to dispose of this stream + + + + + + + + + + + + + + + Represents a 'streamable' resource. Can + be a file, a resource in an assembly. + + + + + Only valid for resources that + can be obtained through relative paths + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + Returns a reader for the stream + + + It's up to the caller to dispose the reader. + + + + + Returns an instance of + + created according to the + relativePath + using itself as the root. + + + + + Depicts the contract for resource factories. + + + + + Used to check whether the resource factory + is able to deal with the given resource + identifier. + + + Implementors should return + true + only if the given identifier is supported + by the resource factory + + + + + Creates an + + instance + for the given resource identifier + + + + + Creates an + + instance + for the given resource identifier + + + + + Adapts a static string content as an + + + + + + Enable access to files on network shares + + + + + Default + + implementation. + + + + + Initializes a new instance of the + + class based on the + + configuration provided in the application configuration file. + + + This constructor is based on the default + + configuration in the application configuration file. + + + + + This service implementation + requires a host name in order to work + + The smtp server name + + + + Gets or sets the port used to + access the SMTP server + + + + + Gets the hostname. + + The hostname. + + + + Gets or sets a value which is used to + configure if emails are going to be sent asynchronously or not. + + + + + Gets or sets a value that specifies + the amount of time after which a synchronous Send call times out. + + + + + Gets or sets a value indicating whether the email should be sent using + a secure communication channel. + + + true + if should use SSL; otherwise, false. + + + + + Sends a message. + + If any of the parameters is null + From field + To field + e-mail's subject + message's body + + + + Sends a message. + + If the message is null + Message instance + + + + Gets or sets the domain. + + The domain. + + + + Gets or sets the name of the user. + + The name of the user. + + + + Gets or sets the password. + + The password. + + + + Configures the sender + with port information and eventual credential + informed + + Message instance + + + + Gets a value indicating whether credentials were informed. + + + + if this instance has credentials; otherwise,. + + + + + Email sender abstraction. + + + + + Sends a mail message. + + From field + To field + E-mail's subject + message's body + + + + Sends a message. + + + Message + instance + + + + + Sends multiple messages. + + List of + messages + + + + + Interface describing elements composing generated type + + + + + Performs some basic screening and invokes the + + to select methods. + + + + + Performs some basic screening to filter out non-interceptable methods. + + + The + + will get invoked for non-interceptable method notification only; + it does not get asked whether or not to intercept the. + + + + + Reproduces the proxied type's non-inheritable custom attributes on the proxy type. + + + + + Adds an implementation for + + to the proxy type. + + + + + Encapsulates the information needed to build an attribute. + + + Arrays passed to this class as constructor arguments or property or field values become owned by this + class. + They should not be mutated after creation. + + + + + Default implementation of + + interface producing in-memory proxy assemblies. + + + + + Initializes a new instance of the + + class with new. + + + + + Initializes a new instance of the + + class. + + The module scope for generated proxy types. + + + + Provides instructions that a user could follow to make a type or method in + + visible to DynamicProxy. + + The assembly containing the type or method. + Instructions that a user could follow to make a type or method visible to DynamicProxy. + + + + Creates a message to inform clients that a proxy couldn't be created due to reliance on an + inaccessible type (perhaps itself). + + the inaccessible type that prevents proxy creation + the type that couldn't be proxied + + + + Base class that exposes the common functionalities + to proxy generation. + + + + + It is safe to add mapping (no mapping for the interface exists) + + + + + Generates a parameters constructor that initializes the proxy + state with + + just to make it non-null. + + This constructor is important to allow proxies to be XML serializable + + + + + + Initializes a new instance of the + + class. + + Target element. This is either target type or target method for invocation types. + + The type of the proxy. This is base type for invocation types. + The interfaces. + The options. + + + + Initializes a new instance of the + + class. + + Type of the target. + The interfaces. + The options. + + + + Provides appropriate Ldc.X opcode for the type of primitive value to be loaded. + + + + + Provides appropriate Ldind.X opcode for + the type of primitive value to be loaded indirectly. + + + + + Emits a load indirect opcode of the appropriate type for a value or object reference. + Pops a pointer off the evaluation stack, dereferences it and loads + a value of the specified type. + + + + + Emits a load opcode of the appropriate kind for the constant default value of a + type, such as 0 for value types and null for reference types. + + + + + Emits a store indirectopcode of the appropriate type for a value or object reference. + Pops a value of the specified type and a pointer off the evaluation stack, and + stores the value. + + + + + Wraps a reference that is passed + ByRef and provides indirect load/store support. + + + + + Provides appropriate Stind.X opcode + for the type of primitive value to be stored indirectly. + + + + + Represents the scope of uniqueness of names for types and their members + + + + + Gets a unique name based on + + + Name suggested by the caller + Unique name based on. + + + Implementers should provide name as closely resembling + + as possible. + Generally if no collision occurs it is suggested to return suggested name, otherwise append sequential + suffix. + Implementers must return deterministic names, that is when + + is called twice + with the same suggested name, the same returned name should be provided each time. Non-deterministic + return + values, like appending random suffices will break serialization of proxies. + + + + + Returns new, disposable naming scope. It is responsibility of the caller to make sure that no naming + collision + with enclosing scope, or other subscopes is possible. + + New naming scope. + + + + Generates the constructor for the class that extends + + + + + + Initializes a new instance of the + + class. + + The event. + The add method. + The remove method. + The attributes. + + + + Returns the methods implemented by a type. Use this instead of Type.GetMethods() to work around a CLR + issue + where duplicate MethodInfos are returned by Type.GetMethods() after a token of a generic type's method + was loaded. + + + + + Exposes means to change target objects of proxies and invocations. + + + + + Changes the target object () of current + . + + The new value of target of invocation. + + Although the method takes + + the actual instance must be of type assignable to, otherwise an + + will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as, for obvious reasons Dynamic Proxy will not be able to call the intercepted method + on such target. + In this case last interceptor in the pipeline mustn't call + + or a + + will be throws. + Also while it's technically legal to pass proxy itself as, this would create + stack overflow. + In this case last interceptor in the pipeline mustn't call + + or a + + will be throws. + + Thrown when + + is not assignable to the proxied type. + + + + + Permanently changes the target object of the proxy. This does not affect target of the current + invocation. + + The new value of target of the proxy. + + Although the method takes + + the actual instance must be of type assignable to proxy's target type, otherwise an + + will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as, for obvious reasons Dynamic Proxy will not be able to call the intercepted method + on such target. + In this case last interceptor in the pipeline mustn't call + + or a + + will be throws. + Also while it's technically legal to pass proxy itself as, this would create + stack overflow. + In this case last interceptor in the pipeline mustn't call + + or a + + will be throws. + + Thrown when + + is not assignable to the proxied type. + + + + + Provides the main DynamicProxy extension point that allows member interception. + + + + + Provides an extension point that allows proxies to choose specific interceptors on + a per method basis. + + + + + Selects the interceptors that should intercept calls to the given. + + The type of the target object. + The method that will be intercepted. + All interceptors registered with the proxy. + An array of interceptors to invoke upon calling the. + + + This method is called only once per proxy instance, upon the first call to the + . Either an empty array or null are valid return values to indicate + that no interceptor should intercept calls to the method. Although it is not advised, it is + legal to return other + + implementations than these provided in + . + + + + + Encapsulates an invocation of a proxied method. + + + + + Gets the arguments that the + + has been invoked with. + + The arguments the method was invoked with. + + + + Gets the generic arguments of the method. + + The generic arguments, or null if not a generic method. + + + + Gets the object on which the invocation is performed. This is different from proxy object + because most of the time this will be the proxy target object. + + + The invocation target. + + + + Gets the + + representing the method being invoked on the proxy. + + The + + representing the method being invoked. + + + + + For interface proxies, this will point to the + + on the target class. + + The method invocation target. + + + + Gets the proxy object on which the intercepted method is invoked. + + Proxy object on which the intercepted method is invoked. + + + + Gets or sets the return value of the method. + + The return value of the method. + + + + Gets the type of the target object for the intercepted method. + + The type of the target object. + + + + Gets the value of the argument at the specified. + + The index. + The value of the argument at the specified. + + + + + Returns the concrete instantiation of the + + on the proxy, with any generic + parameters bound to real types. + + + The concrete instantiation of the + + on the proxy, or the + + if + not a generic method. + + + Can be slower than calling. + + + + + Returns the concrete instantiation of, with any + generic parameters bound to real types. + For interface proxies, this will point to the + + on the target class. + + The concrete instantiation of + + , or + + if not a generic method. + + + In debug builds this can be slower than calling. + + + + + Proceeds the call to the next interceptor in line, and ultimately to the target method. + + + Since interface proxies without a target don't have the target implementation to proceed to, + it is important, that the last interceptor does not call this method, otherwise a + + will be thrown. + + + + + Returns an object describing the + + operation for this + + at this specific point during interception. + + + + + Overrides the value of an argument at the given + + with the + new + + provided. + + + This method accepts an, however the value provided must be compatible + with the type of the argument defined on the method, otherwise an exception will be thrown. + + The index of the argument to override. + The new value for the argument. + + + + Describes the + + operation for an + + at a specific point during interception. + + + + + Executes the + + operation described by this instance. + + There is no interceptor, nor a proxy target object, to + proceed to. + + + + + Attributes should be replicated if they are non-inheritable, + but there are some special cases where the attributes means + something to the CLR, where they should be skipped. + + + + + Returns list of all unique interfaces implemented given types, including their base interfaces. + + + + + Checks whether the specified + + is a delegate type (i.e. a direct subclass of). + + + + + Abstracts the implementation of proxy type construction. + + + + + Gets or sets the + + that this + + logs to. + + + + + Gets the + + associated with this builder. + + The module scope associated with this builder. + + + + Creates a proxy type for given, implementing, using + + provided. + + The class type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified class and interfaces. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy + without target. (See + + method.) + + Thrown when + + or any of + + is a generic type definition. + + Thrown when + + or any of + + is not public. + Note that to avoid this exception, you can mark offending type internal, and define + + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + + Creates a proxy type that proxies calls to + + members on, implementing, using + + provided. + + The interface type to proxy. + Additional interface types to proxy. + Type implementing + + on which calls to the interface members should be intercepted. + + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface that 'proceeds' executions to the + specified target. + Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy + without target. (See + + method.) + + Thrown when + + or any of + + is a generic type definition. + + Thrown when + + or any of + + is not public. + Note that to avoid this exception, you can mark offending type internal, and define + + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + + Creates a proxy type for given + + and + + that delegates all calls to the provided interceptors and allows interceptors to switch the actual + target of invocation. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface(s) that delegate all executions to + the specified interceptors + and uses an instance of the interface as their targets (i.e.), rather than a class. All + + classes should then implement + + interface, + to allow interceptors to switch invocation target with instance of another type implementing called + interface. + + Thrown when + + or any of + + is a generic type definition. + + Thrown when + + or any of + + is not public. + Note that to avoid this exception, you can mark offending type internal, and define + + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + + Creates a proxy type for given + + that delegates all calls to the provided interceptors. + + The interface type to proxy. + Additional interface types to proxy. + The proxy generation options. + The generated proxy type. + + Implementers should return a proxy type for the specified interface and additional interfaces that + delegate all executions to the specified interceptors. + + Thrown when + + or any of + + is a generic type definition. + + Thrown when + + or any of + + is not public. + Note that to avoid this exception, you can mark offending type internal, and define + + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate. + + + + + + Used during the target type inspection process. Implementors have a chance to customize the + proxy generation process. + + + + + Invoked by the generation process to notify that the whole process has completed. + + + + + Invoked by the generation process to notify that a member was not marked as virtual. + + The type which declares the non-virtual member. + The non-virtual member. + + This method gives an opportunity to inspect any non-proxyable member of a type that has + been requested to be proxied, and if appropriate - throw an exception to notify the caller. + + + + + Invoked by the generation process to determine if the specified method should be proxied. + + The type which declares the given method. + The method to inspect. + True if the given method should be proxied; false otherwise. + + + + Provides proxy objects for classes and interfaces. + + + + + Gets or sets the + + that this + + log to. + + + + + Gets the proxy builder instance used to generate proxy types. + + The proxy builder. + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + Object proxying calls to members of + + on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when givenis not an + interface type. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when givenis not an + interface type. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + types on generated target object. + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + As a result of that also at least one + + implementation must be provided. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + types on generated target object. + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + As a result of that also at least one + + implementation must be provided. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + types on generated target object. + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + As a result of that also at least one + + implementation must be provided. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of + + to proxy generated at runtime, the actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no parameterless constructor exists on type + . + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no parameterless constructor exists on type + . + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The proxy generation options used to influence generated proxy type and object. + + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Exposes access to the target object and interceptors of proxy objects. + This is a DynamicProxy infrastructure interface and should not be implemented yourself. + + + + + Get the proxy target (note that null is a valid target!) + + + + + Set the proxy target. + + New proxy target. + + + + Gets the interceptors for the proxy + + + + + Because we need to cache the types based on the mixed in mixins, we do the following here: + - Get all the mixin interfaces + - Sort them by full name + - Return them by position + + The idea is to have reproducible behavior for the case that mixins are registered in different orders. + This method is here because it is required + + + + + The default file name used when the assembly is saved using. + + + + + The default assembly (simple) name used for the assemblies generated by a + + instance. + + + + + Initializes a new instance of the + + class; assemblies created by this instance will not be saved. + + + + + Initializes a new instance of the + + class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + + + + + Initializes a new instance of the + + class, allowing to specify whether the assemblies generated by this instance + should be saved. + + If set to true saves the generated module. + + If set to true disables ability to generate signed module. This + should be used in cases where ran under constrained permissions. + + + + + Initializes a new instance of the + + class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + + If set to true disables ability to generate signed module. This + should be used in cases where ran under constrained permissions. + + The simple name of the strong-named assembly generated by this. + + The path and file name of the manifest module of the strong-named assembly + generated by this. + + The simple name of the weak-named assembly generated by this. + + The path and file name of the manifest module of the weak-named assembly + generated by this. + + + + + Initializes a new instance of the + + class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + + If set to true saves the generated module. + + If set to true disables ability to generate signed module. This + should be used in cases where ran under constrained permissions. + + Naming scope used to provide unique names to generated types and their members + (usually via sub-scopes). + + The simple name of the strong-named assembly generated by this. + + The path and file name of the manifest module of the strong-named assembly + generated by this. + + The simple name of the weak-named assembly generated by this. + + The path and file name of the manifest module of the weak-named assembly + generated by this. + + + + + Gets the key pair used to sign the strong-named assembly generated by this. + + + + + Gets the strong-named module generated by this scope, or + + if none has yet been generated. + + The strong-named module generated by this scope, or + + if none has yet been generated. + + + + + Gets the file name of the strongly named module generated by this scope. + + The file name of the strongly named module generated by this scope. + + + + Gets the weak-named module generated by this scope, or + + if none has yet been generated. + + The weak-named module generated by this scope, or + + if none has yet been generated. + + + + + Gets the file name of the weakly named module generated by this scope. + + The file name of the weakly named module generated by this scope. + + + + Gets the specified module generated by this scope, creating a new one if none has yet been generated. + + If set to true, a strong-named module is returned; otherwise, a weak-named + module is returned. + + A strong-named or weak-named module generated by this scope, as specified by the + + parameter. + + + + + Gets the strong-named module generated by this scope, creating a new one if none has yet been generated. + + A strong-named module generated by this scope. + + + + Gets the weak-named module generated by this scope, creating a new one if none has yet been generated. + + A weak-named module generated by this scope. + + + + + allows customization of the behavior of proxies created by + an + + (or proxy types generated by an). + + You should not modify an instance of + + once it has been + used to create a proxy (or proxy type). + + + + + + Initializes a new instance of the + + class. + + The hook. + + + + Initializes a new instance of the + + class. + + + + + Gets or sets the + + that should be used during proxy type + generation. Defaults to an instance of. + + You should not modify this property once this + + instance + has been used to create a proxy. + + + + + + Gets or sets the + + that should be used by created proxies + to determine which interceptors to use for an interception. If set to + + (which is the default), created proxies will not use any selector. + + You should not modify this property once this + + instance + has been used to create a proxy. + + + + + + Gets or sets the class type from which generated interface proxy types will be derived. + Defaults to + () + + . + + You should not modify this property once this + + instance + has been used to create a proxy. + + + + + + Gets the collection of additional custom attributes that will be put on generated proxy types. + This collection is initially empty. + + You should not modify this collection once this + + instance + has been used to create a proxy. + + + + + + Adds a delegate type to the list of mixins that will be added to generated proxies. + That is, generated proxies will have a `Invoke` method with a signature matching that + of the specified. + + You should not call this method once this + + instance + has been used to create a proxy. + + + The delegate type whose `Invoke` method should be reproduced in generated + proxies. + + + + is. + + + + is not a delegate type. + + + + + Adds a delegate to be mixed into generated proxies. The + + will act as the target for calls to a `Invoke` method with a signature matching that + of the delegate. + + You should not call this method once this + + instance + has been used to create a proxy. + + + The delegate that should act as the target for calls to `Invoke` methods with a + matching signature. + + + + is. + + + + + Mixes the interfaces implemented by the specified + + object into + created proxies, and uses + + as the target for these mixed-in interfaces. + + You should not call this method once this + + instance + has been used to create a proxy. + + + The object that should act as the target for all of its implemented interfaces' + methods. + + + + is. + + + + is an instance of. + + + + + Provides proxy objects for classes and interfaces. + + + + + Initializes a new instance of the + + class. + + Proxy types builder. + + + + Initializes a new instance of the + + class. + + + + + Initializes a new instance of the + + class. + + If true forces all types to be generated into an unsigned module. + + + + + Gets or sets the + + that this + + log to. + + + + + Gets the proxy builder instance used to generate proxy types. + + The proxy builder. + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + Object proxying calls to members of + + on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when givenis not an + interface type. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when givenis not an + interface type. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on + + object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method generates new proxy type for each type of, which affects + performance. If you don't want to proxy types differently depending on the type of the target + use + + method. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on + + object with given. + Interceptors can use + + interface to provide other target for method invocation than default. + + Type of the interface implemented by + + which will be proxied. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on + + object or alternative implementation swapped at runtime by an interceptor. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + Thrown when given + + does not implement + + interface. + + Thrown when no default constructor exists on actual type + of + + object. + + Thrown when default constructor of actual + type of + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + types on generated target object. + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + As a result of that also at least one + + implementation must be provided. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + types on generated target object. + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + As a result of that also at least one + + implementation must be provided. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + types on generated target object. + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + As a result of that also at least one + + implementation must be provided. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + type on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the + actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to members of interface + + on target object generated at runtime with given. + + Type of the interface which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + Object proxying calls to members of + + and + + types on generated target object. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + array is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not an interface type. + + + Since this method uses an empty-shell implementation of + + to proxy generated at runtime, the actual implementation of proxied methods must be provided by given + + implementations. + They are responsible for setting return value (and out parameters) on proxied methods. It is also + illegal for an interceptor to call, since there's no actual implementation to + proceed with. + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no parameterless constructor exists on type + . + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The target object, calls to which will be intercepted. + The proxy generation options used to influence generated proxy type and object. + + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no parameterless constructor exists on type + . + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + type. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The proxy generation options used to influence generated proxy type and object. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no default constructor exists on type. + + Thrown when default constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates proxy object intercepting calls to virtual members of type + + on newly created instance of that type with given. + + Type of class which will be proxied. + Additional interface types. Calls to their members will be proxied + as well. + + The proxy generation options used to influence generated proxy type and object. + + Arguments of constructor of type + + which should be used to create a new instance of that type. + + The interceptors called during the invocation of proxied methods. + + New object of type + + proxying calls to virtual members of + + and + + types. + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + object is a null reference (Nothing in Visual Basic). + + Thrown when given + + or any of + + is a generic type definition. + + Thrown when given + + is not a class type. + + Thrown when no constructor exists on type + + with parameters matching. + + Thrown when constructor of type + + throws an exception. + + + This method uses + + implementation to generate a proxy type. + As such caller should expect any type of exception that given + + implementation may throw. + + + + + Creates the proxy type for class proxy with given + + class, implementing given + + and using provided. + + The base class for proxy type. + The interfaces that proxy type should implement. + The options for proxy generation process. + + + of proxy. + + + + + Creates the proxy type for interface proxy with target for given + + interface, implementing given + + on given + + and using provided. + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + Actual type that the proxy type will encompass. + The options for proxy generation process. + + + of proxy. + + + + + Creates the proxy type for interface proxy with target interface for given + + interface, implementing given + + on given + + and using provided. + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + + + of proxy. + + + + + Creates the proxy type for interface proxy without target for given + + interface, implementing given + + and using provided. + + The interface proxy type should implement. + The additional interfaces proxy type should implement. + The options for proxy generation process. + + + of proxy. + + + + + Creates a delegate of the specified type to a suitable `Invoke` method + on the given + + instance. + + The proxy instance to which the delegate should be bound. + The type of delegate that should be created. + + The + + does not have an `Invoke` method that is compatible with + the requested + + type. + + + + + Creates a delegate of the specified type to a suitable `Invoke` method + on the given + + instance. + + The proxy instance to which the delegate should be bound. + The type of delegate that should be created. + + The + + does not have an `Invoke` method that is compatible with + the requested. + + + + + Checks whether the specified method is accessible to DynamicProxy. + + The method to check. + + true + if the method is accessible to DynamicProxy, false otherwise. + + + + + Checks whether the specified method is accessible to DynamicProxy. + + The method to check. + If the method is accessible to DynamicProxy, null; otherwise, an explanation of + why the method is not accessible. + + + true + if the method is accessible to DynamicProxy, false otherwise. + + + + + Checks whether the specified type is accessible to DynamicProxy. + + The type to check. + + true + if the type is accessible to DynamicProxy, false otherwise. + + + + + Determines whether this assembly has internals visible to DynamicProxy. + + The assembly to inspect. + + + + Checks whether the specified method is accessible to DynamicProxy. + Unlike with, the + declaring type's accessibility is ignored. + + The method to check. + + true + if the method is accessible to DynamicProxy, false otherwise. + + + + + Determines whether the specified method is internal. + + The method. + + true + if the specified method is internal; otherwise, false. + + + + + Holds + + objects representing methods of + + class. + + + + diff --git a/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.xml.meta b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.xml.meta new file mode 100644 index 00000000..866bc0ac --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/lib/netstandard2.1/Castle.Core.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b9c257306669bda64ab0bd5774879f44 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/Castle.Core.5.1.1/readme.txt b/Assets/Packages/Castle.Core.5.1.1/readme.txt new file mode 100644 index 00000000..59e02923 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/readme.txt @@ -0,0 +1,10 @@ +Thanks for downloading this Castle package. +You can find full list of changes in CHANGELOG.md + +Documentation (work in progress, contributions appreciated): +DictionaryAdapter: https://github.com/castleproject/Core/blob/master/docs/dictionaryadapter.md +DynamicProxy: https://github.com/castleproject/Core/blob/master/docs/dynamicproxy.md +Discussion group: http://groups.google.com/group/castle-project-users +StackOverflow tags: castle-dynamicproxy, castle-dictionaryadapter, castle + +Issue tracker: https://github.com/castleproject/Core/issues \ No newline at end of file diff --git a/Assets/Packages/Castle.Core.5.1.1/readme.txt.meta b/Assets/Packages/Castle.Core.5.1.1/readme.txt.meta new file mode 100644 index 00000000..5ee38e78 --- /dev/null +++ b/Assets/Packages/Castle.Core.5.1.1/readme.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 80a44108b0d470a32961bf0680232b61 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/NSubstitute.5.3.0.meta b/Assets/Packages/NSubstitute.5.3.0.meta new file mode 100644 index 00000000..cdd97fd1 --- /dev/null +++ b/Assets/Packages/NSubstitute.5.3.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cde74d438520bb43b9fce4c886e8beb0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/NSubstitute.5.3.0/.signature.p7s b/Assets/Packages/NSubstitute.5.3.0/.signature.p7s new file mode 100644 index 00000000..6bcd605b Binary files /dev/null and b/Assets/Packages/NSubstitute.5.3.0/.signature.p7s differ diff --git a/Assets/Packages/NSubstitute.5.3.0/NSubstitute.nuspec b/Assets/Packages/NSubstitute.5.3.0/NSubstitute.nuspec new file mode 100644 index 00000000..c49c6f28 --- /dev/null +++ b/Assets/Packages/NSubstitute.5.3.0/NSubstitute.nuspec @@ -0,0 +1,28 @@ + + + + NSubstitute + 5.3.0 + Anthony Egerton,David Tchepak,Alexandr Nikitin,Oleksandr Povar + BSD-3-Clause + https://licenses.nuget.org/BSD-3-Clause + icon.png + https://nsubstitute.github.io/ + NSubstitute is a friendly substitute for .NET mocking libraries. It has a simple, succinct syntax to help developers write clearer tests. NSubstitute is designed for Arrange-Act-Assert (AAA) testing and with Test Driven Development (TDD) in mind. + mocking mocks testing unit-testing TDD AAA + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Assets/Packages/NSubstitute.5.3.0/NSubstitute.nuspec.meta b/Assets/Packages/NSubstitute.5.3.0/NSubstitute.nuspec.meta new file mode 100644 index 00000000..7357ed1b --- /dev/null +++ b/Assets/Packages/NSubstitute.5.3.0/NSubstitute.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: eecf3c6e4cccbb6e1aede37aaea22efd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/NSubstitute.5.3.0/icon.png b/Assets/Packages/NSubstitute.5.3.0/icon.png new file mode 100644 index 00000000..2752cafe Binary files /dev/null and b/Assets/Packages/NSubstitute.5.3.0/icon.png differ diff --git a/Assets/Packages/NSubstitute.5.3.0/icon.png.meta b/Assets/Packages/NSubstitute.5.3.0/icon.png.meta new file mode 100644 index 00000000..93860a6d --- /dev/null +++ b/Assets/Packages/NSubstitute.5.3.0/icon.png.meta @@ -0,0 +1,166 @@ +fileFormatVersion: 2 +guid: 7533e5c964b4b10798063da85372c1dd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 1 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Bullet_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 7 + height: 16 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 47656d65394e6ae10800000000000000 + internalID: 2208703988740019828 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + Bullet_0: 2208703988740019828 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/NSubstitute.5.3.0/lib.meta b/Assets/Packages/NSubstitute.5.3.0/lib.meta new file mode 100644 index 00000000..f32e1351 --- /dev/null +++ b/Assets/Packages/NSubstitute.5.3.0/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4375b0b16f5e5a1b81aa9b020a03873 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0.meta b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0.meta new file mode 100644 index 00000000..d64900a3 --- /dev/null +++ b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9007bc2b37faf4c69280ba18d84c453 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.dll b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.dll new file mode 100644 index 00000000..f0496e4a Binary files /dev/null and b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.dll differ diff --git a/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.dll.meta b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.dll.meta new file mode 100644 index 00000000..662e6bd0 --- /dev/null +++ b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.dll.meta @@ -0,0 +1,67 @@ +fileFormatVersion: 2 +guid: 2352b61ab0d5b32b8add10c283a5c5b7 +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Android: + enabled: 0 + settings: + AndroidLibraryDependee: UnityLibrary + AndroidSharedLibraryType: Executable + CPU: ARMv7 + Any: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.xml b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.xml new file mode 100644 index 00000000..bdee4727 --- /dev/null +++ b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.xml @@ -0,0 +1,1767 @@ + + + + NSubstitute + + + + + Argument matchers used for specifying calls to substitutes. + + + + + This type can be used with any matcher to match a generic type parameter. + + + If the generic type parameter has constraints, you will have to create a derived class/struct that + implements those constraints. + + + + + Match any argument value compatible with type. + + + + + Match argument that is equal to. + + + + + Match argument that satisfies. + If the + + throws an exception for an argument it will be treated as non-matching. + + + + + Match argument that satisfies. + If the + + throws an exception for an argument it will be treated as non-matching. + + + + + Invoke any + + argument whenever a matching call is made to the substitute. + + + + + Invoke any + + argument with specified argument whenever a matching call is made to the substitute. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + + Arguments to pass to delegate. + + + + Capture any argument compatible with type + + and use it to call the + + function + whenever a matching call is made to the substitute. + + + + + Capture any argument compatible with type + + and use it to call the + + function + whenever a matching call is made to the substitute. + + + + + Alternate version of + + matchers for compatibility with pre-C#7 compilers + which do not support ref return types. Do not use unless you are unable to use. + + For more information see Compatibility + Argument + Matchers + in the NSubstitute documentation. + + + + + Match any argument value compatible with type. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Match argument that is equal to. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Match argument that satisfies. + If the + + throws an exception for an argument it will be treated as non-matching. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Match argument that satisfies. + If the + + throws an exception for an argument it will be treated as non-matching. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified argument whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + Arguments to pass to delegate. + + + + Capture any argument compatible with type + + and use it to call the + + function + whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Capture any argument compatible with type + + and use it to call the + + function + whenever a matching call is made to the substitute. + + + + + Perform this chain of callbacks and/or always callback when called. + + + + + Perform as first in chain of callback when called. + + + + + + + Perform this action always when callback is called. + + + + + + + Throw exception returned by function as first callback in chain of callback when called. + + + + + + + Throw this exception as first callback in chain of callback when called. + + + + + + + Throw exception returned by function always when callback is called. + + The type of the exception. + The throw this. + + + + + Throw this exception always when callback is called. + + The type of the exception. + The exception. + + + + + Perform this action once in chain of called callbacks. + + + + + Keep doing this action after the other callbacks have run. + + + + + Keep throwing this exception after the other callbacks have run. + + + + + Keep throwing this exception after the other callbacks have run. + + + + + Throw exception returned by function once when called in a chain of callbacks. + + The type of the exception + Produce the exception to throw for a CallInfo + + + + Throw this exception once when called in a chain of callbacks. + + The type of the exception + The exception to throw + + + + Perform the given action for every call. + + The action to perform for every call + + + + Clear all the received calls + + + + + Clear all configured return results (including auto-substituted values). + + + + + Clear all call actions configured for this substitute (via When..Do, Arg.Invoke, and Arg.Do) + + + + + Clears all received calls and configured return values and callbacks. + + + + + Alternate version of + + matchers for compatibility with pre-C#7 compilers + which do not support ref return types. Do not use unless you are unable to use. + + + provides a non-static version of, which can make it easier + to use from an abstract base class. You can get a reference to this instance using the static + + field. + + For more information see Compatibility + Argument + Matchers + in the NSubstitute documentation. + + + + + Get the CompatArg instance. + + + + + Match any argument value compatible with type. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Match argument that is equal to. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Match argument that satisfies. + If the + + throws an exception for an argument it will be treated as non-matching. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Match argument that satisfies. + If the + + throws an exception for an argument it will be treated as non-matching. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified argument whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Invoke any + + argument with specified arguments whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + Arguments to pass to delegate. + + + + Capture any argument compatible with type + + and use it to call the + + function + whenever a matching call is made to the substitute. + This is provided for compatibility with older compilers -- + if possible use + + instead. + + + + + Capture any argument compatible with type + + and use it to call the + + function + whenever a matching call is made to the substitute. + + + + + Enqueues a matcher for the method argument in current position and returns the value which should be + passed back to the method you invoke. + + + + + Provides a specification for arguments for use with. + Can additionally implement + + to give descriptions when arguments do not match. + + + + + Checks whether the + + satisfies the condition of the matcher. + If this throws an exception the argument will be treated as non-matching. + + + + + Provides a specification for arguments for use with. + Can additionally implement + + to give descriptions when arguments do not match. + + Matches arguments of type + + or compatible type. + + + + + Checks whether the + + satisfies the condition of the matcher. + If this throws an exception the argument will be treated as non-matching. + + + + + + + + + + + + + + + + + Performance optimization. Allows to mark call as deleted without allocating extra wrapper. + To play safely, we track ownership, so object can be re-used only once. + + + + + Wrapper to track that particular entry was deleted. + That is needed because concurrent collections don't have a Delete method. + Notice, in most cases the original + + instance will be used as a wrapper itself. + + + + + Wrapper to track that particular entry was deleted. + That is needed because concurrent collections don't have a Delete method. + Notice, in most cases the original + + instance will be used as a wrapper itself. + + + + + Gets the nth argument to this call. + + Index of argument + The value of the argument at the given index + + + + Get the arguments passed to this call. + + Array of all arguments passed to this call + + + + Gets the types of all the arguments passed to this call. + + Array of types of all arguments passed to this call + + + + Gets the argument of type `T` passed to this call. This will throw if there are no arguments + of this type, or if there is more than one matching argument. + + The type of the argument to retrieve + The argument passed to the call, or throws if there is not exactly one argument of this type + + + + + Gets the argument passed to this call at the specified zero-based position, converted to type `T`. + This will throw if there are no arguments, if the argument is out of range or if it + cannot be converted to the specified type. + + The type of the argument to retrieve + The zero-based position of the argument to retrieve + The argument passed to the call, or throws if there is not exactly one argument of this type + + + + + Adds a callback to execute for matching calls. + + an action to call + + + + + Creates a new container based on the current one, + which can be configured to override the existing registrations without affecting the existing container. + + + + + Create an explicit scope, so all dependencies with the + + lifetime + are preserved for multiple resolve requests. + + + + + Decorates the original implementation with a custom decorator. + The factory method is provided with an original implementation instance. + The lifetime of decorated implementation is used. + + + + + Tiny and very limited implementation of the DI services. + Container supports the following features required by NSubstitute: + - Registration by type with automatic constructor injection + - Registration of factory methods for the complex objects + - Support of the most required lifetimes: + - + + - + + - + + - Immutability (via interfaces) and customization by creating a nested container + + + + + Value is created only once. + + + + + Value is created only once per scope. Allows to share the same instance across the objects in the same + graph. + If no explicit scope is created, an implicit scope is created per single resolve request. + + + + + New value is created for each time. + + + + + The default NSubstitute registrations. Feel free to configure the existing container to customize + and override NSubstitute parts. + + + + + Checks if the instance can be used when a + + is expected. + + + + + Join the + + using. + + + + + Tries to cast sequence to array first before making a new array sequence. + + + + + Gets or sets whether base method should be called by default. + + + + + Specifies whether base method should be always ignored for the matching call. + If method is both explicitly excluded and included, base method is _not_ called. + + + + + Specifies whether base method should be called for the matching call. + If method is both explicitly excluded and included, base method is _not_ called. + + + + + Tests whether base method should be called for the call given the existing configuration. + + + + + Specifies whether base method should be called by default. + + + This configuration is considered only when base method exists (e.g. you created a substitute for + the AbstractType with method implementation). + + + + + Factory method which creates + + from the. + + + + + Describes how the + + does not match the condition specified by this class, or + + if a detailed description can not be provided for the argument. + + + Description of the non-match, or + + if no description can be provided. + + + + + Performance optimization. Allows to not construct + + if configured result doesn't depend on it. + + + + + A thread bound state of the NSubstitute context. Usually this API is used to provide the fluent + features of the NSubstitute. + + + + + Sets the route to use for the next call dispatch on the current thread for the specified. + + + + + Returns the previously configured next route and resets the stored value. + If route was configured for the different router, returns + + and persist the route info. + + + + + Returns the previously set arguments factory and resets the stored value. + + + + + Invokes the passed callback in a context of the specified query. + + + + + Particularly poor implementation of Maybe/Option type. + This is just filling an immediate need; use FSharpOption or XSharpx or similar for a + real implementation. + + + + + + Delegates to ThreadLocal<T>, but wraps Value property access in try/catch to swallow + ObjectDisposedExceptions. + These can occur if the Value property is accessed from the finalizer thread. Because we can't detect + this, we'll + just swallow the exception (the finalizer thread won't be using any of the values from thread local + storage anyway). + + + + + Create a substitute for the given types. + + + + + + + + Create an instance of the given types, with calls configured to call the base implementation + where possible. Parts of the instance can be substituted using + Returns(). + + + + + + + + Perform this action when called. + + + + + + Perform this configured callback when called. + + + + + + Do not call the base implementation on future calls. For use with partial substitutes. + + + + + Call the base implementation of future calls. For use with non-partial class substitutes. + + + + + Throw the specified exception when called. + + + + + Throw an exception of the given type when called. + + + + + Throw an exception generated by the specified function when called. + + + + + Throws the specified exception when called. + + Prefer + + for readability. + + + + Throws an exception of the given type when called. + + Prefer + + for readability. + + + + Throws an exception generated by the specified function when called. + + Prefer + + for readability. + + + + Clears received calls, configured return values and/or call actions for this substitute. + + + + Specifies what to clear on the substitute. Can be combined with | to + clear multiple aspects at once. + + + + + + + A hint for the NSubstitute that the subsequent method/property call is about to be configured. + For example: substitute.Configure().GetValue().Returns(1,2,3); + + NOTICE, you _don't need_ to invoke this method for the basic configuration scenarios. + Ensure you don't overuse this method and it is applied only if strictly required. + + + Due to the NSubstitute configuration syntax it is often impossible to recognise during the method + call + dispatch whether this is a setup phase or a regular method call. + Usually it doesn't matter, however sometimes method invocation could lead to undesired side effects + (e.g. the previously configured value is returned, base method is invoked). In that case you might + want to + provide NSubstitute with a hint that you are configuring a method, so it handles the call in + configuration mode. + + + + + + Configure default return value for all methods that return the specified type + + + + + + + + + Configure default return value for all methods that return the specified type, calculated by a function + + + + + + + + + Throw an exception for this call. + + + Exception to throw + + + + + Throw an exception of the given type for this call. + + Type of exception to throw + + + + + + Throw an exception for this call, as generated by the specified function. + + + Func creating exception object + + + + + Throw an exception for this call made with any arguments. + + + Exception to throw + + + + + Throws an exception of the given type for this call made with any arguments. + + Type of exception to throw + + + + + + Throws an exception for this call made with any arguments, as generated by the specified function. + + + Func creating exception object + + + + + Throw an exception for this call. + + + Exception to throw + + + + + Throw an exception for this call. + + + Exception to throw + + + + + Throw an exception of the given type for this call. + + Type of exception to throw + + + + + + Throw an exception for this call, as generated by the specified function. + + + Func creating exception object + + + + + Throw an exception for this call, as generated by the specified function. + + + Func creating exception object + + + + + Throw an exception for this call made with any arguments. + + + Exception to throw + + + + + Throw an exception for this call made with any arguments. + + + Exception to throw + + + + + Throws an exception of the given type for this call made with any arguments. + + Type of exception to throw + + + + + + Throws an exception for this call made with any arguments, as generated by the specified function. + + + Func creating exception object + + + + + Throws an exception for this call made with any arguments, as generated by the specified function. + + + Func creating exception object + + + + + Checks this substitute has received the following call the required number of times. + + + + + + + + + Checks this substitute has received the following call with any arguments the required number of times. + + + + + + + + + Represents a quantity. Primarily used for specifying a required amount of calls to a member. + + + + + A non-zero quantity between the given minimum and maximum numbers (inclusive). + + Minimum quantity (inclusive). Must be greater than or equal to 0. + Maximum quantity (inclusive). Must be greater than minInclusive. + + + + + Returns whether the given collection contains the required quantity of items. + + + + true if the collection has the required quantity; otherwise false. + + + + Returns whether the given collections needs more items to satisfy the required quantity. + + + + true if the collection needs more items to match this quantity; otherwise false. + + + + Describe this quantity using the given noun variants. + For example, `Describe("item", "items")` could return the description: + "more than 1 item, but less than 10 items". + + + + A string describing the required quantity of items identified by the provided noun forms. + + + + Set null as returned value for this call. + + + + + Set null as returned value for this call made with any arguments. + + + + + Set null as returned value for this call. + + + + + Set null as returned value for this call made with any arguments. + + + + + Set null as returned value for this call. + + + + + Set null as returned value for this call. + + + + + Set null as returned value for this call made with any arguments. + + + + + Set null as returned value for this call made with any arguments. + + + + + + + + Set null as returned value for this call. + + + + + Set null as returned value for this call made with any arguments. + + + + + Set null as returned value for this call. + + + + + Set null as returned value for this call made with any arguments. + + + + + Switches interceptor to dispatch calls via the full pipeline. + + + + + Raise an event for an EventHandler<TEventArgs> event with the provided + + and. + + + + + Raise an event for an EventHandler<TEventArgs> event with the substitute as the sender and + the provided. + + + + + Raise an event for an EventHandler<EventArgsT> event with the substitute as the sender + and with a default instance of. + + + + + Raise an event for an EventHandler or EventHandler<EventArgs> event with the + substitute + as the sender and with empty EventArgs. + + + + + Raise an event of type + + with the provided arguments. If no arguments are provided + NSubstitute will try to provide reasonable defaults. + + + + + If delegate takes single parameter of array type, it's impossible to distinguish + whether input array represents all arguments, or the first argument only. + If we find that ambiguity might happen, we wrap user input in an extra array. + + + + + Asserts the calls to the substitutes contained in the given Action were + received by these substitutes in the same order. Calls to property getters are not included + in the assertion. + + Action containing calls to substitutes in the expected order + + + + Clears last call router on SubstitutionContext for routes that do not require it. + + + This is to help prevent static state bleeding over into future calls. + + + + + Clears last call router on SubstitutionContext for routes that do not require it. + + + This is to help prevent static state bleeding over into future calls. + + + + + Create a substitute for one or more types. For example: + Substitute.For<ISomeType>() + + + + + Substitute for an interface or class. + Be careful when specifying a class, as all non-virtual members will actually be executed. Only + virtual members + can be recorded or have return values specified. + + + The type of interface or class to substitute. + Arguments required to construct a class being substituted. Not required + for interfaces or classes with default constructors. + + A substitute for the interface or class. + + + + Substitute for multiple interfaces or a class that implements an interface. At most one class can + be specified. + + Be careful when specifying a class, as all non-virtual members will actually be executed. Only + virtual members + can be recorded or have return values specified. + + + The type of interface or class to substitute. + An additional interface or class (maximum of one class) the substitute should + implement. + + Arguments required to construct a class being substituted. Not required + for interfaces or classes with default constructors. + + A substitute of type T1, that also implements T2. + + + + Substitute for multiple interfaces or a class that implements multiple interfaces. At most one + class can be specified. + + If additional interfaces are required use the + + overload. + Be careful when specifying a class, as all non-virtual members will actually be executed. Only + virtual members + can be recorded or have return values specified. + + + The type of interface or class to substitute. + An additional interface or class (maximum of one class) the substitute should + implement. + + An additional interface or class (maximum of one class) the substitute should + implement. + + Arguments required to construct a class being substituted. Not required + for interfaces or classes with default constructors. + + A substitute of type T1, that also implements T2 and T3. + + + + Substitute for multiple interfaces or a class that implements multiple interfaces. At most one + class can be specified. + + Be careful when specifying a class, as all non-virtual members will actually be executed. Only + virtual members + can be recorded or have return values specified. + + + The types of interfaces or a type of class and multiple interfaces the substitute + should implement. + + Arguments required to construct a class being substituted. Not required + for interfaces or classes with default constructors. + + A substitute implementing the specified types. + + + + Create a substitute for a class that behaves just like a real instance of the class, but also + records calls made to its virtual members and allows for specific members to be substituted + by using When(() => call).DoNotCallBase() + or by + setting a value to return + value + + for that member. + + The type to substitute for parts of. Must be a class; not a delegate or interface. + + + An instance of the class that will execute real methods when called, but allows parts to be + selectively + overridden via `Returns` and `When..DoNotCallBase`. + + + + + Creates a proxy for a class that implements an interface, forwarding methods and properties to an + instance of the class, effectively mimicking a real instance. + Both the interface and the class must be provided as parameters. + The proxy will log calls made to the interface members and delegate them to an instance of the class. + Specific members can be substituted + by using When(() => call).DoNotCallBase() + or by + setting a value to return + value + + for that member. + This extension supports sealed classes and non-virtual members, with some limitations. Since the + substituted method is non-virtual, internal calls within the object will invoke the original + implementation and will not be logged. + + The interface the substitute will implement. + The class type implementing the interface. Must be a class; not a delegate or + interface. + + + An object implementing the selected interface. Calls will be forwarded to the actuall methods, but + allows parts to be selectively + overridden via `Returns` and `When..DoNotCallBase`. + + + + + Checks this substitute has received the following call. + + + + + Checks this substitute has received the following call the required number of times. + + + + + Checks this substitute has not received the following call. + + + + + Checks this substitute has received the following call with any arguments. + + + + + Checks this substitute has received the following call with any arguments the required number of times. + + + + + Checks this substitute has not received the following call with any arguments. + + + + + Returns the calls received by this substitute. + + + + + Forget all the calls this substitute has received. + + + Note that this will not clear any results set up for the substitute using Returns(). + See + + for more options with resetting + a substitute. + + + + + Set a return value for this call. + + + Value to return + Optionally return these values next + + + + Set a return value for this call, calculated by the provided function. + + + Function to calculate the return value + Optionally use these functions next + + + + Set a return value for this call made with any arguments. + + + Value to return + Optionally return these values next + + + + Set a return value for this call made with any arguments, calculated by the provided function. + + + Function to calculate the return value + Optionally use these functions next + + + + + Set a return value for this call. The value(s) to be returned will be wrapped in Tasks. + + + Value to return. Will be wrapped in a Task + Optionally use these values next + + + + Set a return value for this call, calculated by the provided function. The value(s) to be returned will + be wrapped in Tasks. + + + Function to calculate the return value + Optionally use these functions next + + + + Set a return value for this call made with any arguments. The value(s) to be returned will be wrapped in + Tasks. + + + Value to return + Optionally return these values next + + + + Set a return value for this call made with any arguments, calculated by the provided function. The + value(s) to be returned will be wrapped in Tasks. + + + Function to calculate the return value + Optionally use these functions next + + + + Set a return value for this call. The value(s) to be returned will be wrapped in ValueTasks. + + + Value to return. Will be wrapped in a ValueTask + Optionally use these values next + + + + Set a return value for this call, calculated by the provided function. The value(s) to be returned will + be wrapped in ValueTasks. + + + Function to calculate the return value + Optionally use these functions next + + + + Set a return value for this call made with any arguments. The value(s) to be returned will be wrapped in + ValueTasks. + + + Value to return + Optionally return these values next + + + + Set a return value for this call made with any arguments, calculated by the provided function. The + value(s) to be returned will be wrapped in ValueTasks. + + + Function to calculate the return value + Optionally use these functions next + + + + Perform an action when this member is called. + Must be followed by + + to provide the callback. + + + + + Perform an action when this member is called with any arguments. + Must be followed by + + to provide the callback. + + + + + Perform an action when this member is called. + Must be followed by + + to provide the callback. + + + + + Perform an action when this member is called with any arguments. + Must be followed by + + to provide the callback. + + + + + Perform an action when this member is called. + Must be followed by + + to provide the callback. + + + + + Perform an action when this member is called with any arguments. + Must be followed by + + to provide the callback. + + + + Specifies that null is allowed as an input even if the corresponding type disallows it. + + + Specifies that null is disallowed as an input even if the corresponding type allows it. + + + Specifies that an output may be null even if the corresponding type disallows it. + + + Specifies that an output will not be null even if the corresponding type allows it. + + + Specifies that when a method returns, the parameter may be + null even if the corresponding type disallows it. + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter may be null. + + + + Specifies that when a method returns, the parameter may be + null even if the corresponding type disallows it. + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter may be null. + + + + Gets the return value condition. + + + Specifies that when a method returns, the parameter will not + be null even if the corresponding type allows it. + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Specifies that when a method returns, the parameter will not + be null even if the corresponding type allows it. + + Initializes the attribute with the specified return value condition. + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + + Gets the return value condition. + + + Specifies that the output will be non-null if the named parameter is non-null. + Initializes the attribute with the associated parameter name. + + The associated parameter name. The output will be non-null if the argument to the parameter specified is + non-null. + + + + Specifies that the output will be non-null if the named parameter is non-null. + Initializes the attribute with the associated parameter name. + + The associated parameter name. The output will be non-null if the argument to the parameter specified is + non-null. + + + + Gets the associated parameter name. + + + Applied to a method that will never return under any circumstance. + + + Specifies that the method will not return if the associated Boolean parameter is passed the + specified value. + + Initializes the attribute with the specified parameter value. + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if + the argument to + the associated parameter matches this value. + + + + Specifies that the method will not return if the associated Boolean parameter is passed the + specified value. + + Initializes the attribute with the specified parameter value. + + The condition parameter value. Code after the method will be considered unreachable by diagnostics if + the argument to + the associated parameter matches this value. + + + + Gets the condition parameter value. + + + Specifies that the method or property will ensure that the listed field and property members have + not-null values. + + + + Initializes the attribute with a field or property member. + + The field or property member that is promised to be not-null. + + + + Initializes the attribute with the list of field and property members. + + The list of field and property members that are promised to be not-null. + + + + Gets field or property member names. + + + Specifies that the method or property will ensure that the listed field and property members have + not-null values when returning with the specified return value condition. + + + + Initializes the attribute with the specified return value condition and a field or property + member. + + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + The field or property member that is promised to be not-null. + + + + Initializes the attribute with the specified return value condition and list of field and property + members. + + + The return value condition. If the method returns this value, the associated parameter will not be null. + + + The list of field and property members that are promised to be not-null. + + + + Gets the return value condition. + + + Gets field or property member names. + + + diff --git a/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.xml.meta b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.xml.meta new file mode 100644 index 00000000..eed19aee --- /dev/null +++ b/Assets/Packages/NSubstitute.5.3.0/lib/netstandard2.0/NSubstitute.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4d2a6e386a46d5be8ba0199c82405805 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0.meta new file mode 100644 index 00000000..1526ab2d --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4799f362b9caade17b4b64f4f827d318 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/.signature.p7s b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/.signature.p7s new file mode 100644 index 00000000..9846dd79 Binary files /dev/null and b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/.signature.p7s differ diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/LICENSE.TXT b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/LICENSE.TXT new file mode 100644 index 00000000..984713a4 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/LICENSE.TXT @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/LICENSE.TXT.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/LICENSE.TXT.meta new file mode 100644 index 00000000..1d2cb633 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/LICENSE.TXT.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: da836c29e56400e288c1dd3a7f99e968 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/System.Diagnostics.EventLog.nuspec b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/System.Diagnostics.EventLog.nuspec new file mode 100644 index 00000000..3c247bb4 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/System.Diagnostics.EventLog.nuspec @@ -0,0 +1,49 @@ + + + + System.Diagnostics.EventLog + 4.7.0 + System.Diagnostics.EventLog + Microsoft + microsoft,dotnetframework + false + MIT + https://licenses.nuget.org/MIT + https://github.com/dotnet/corefx + http://go.microsoft.com/fwlink/?LinkID=288859 + Provides the System.Diagnostics.EventLog class, which allows the applications to use the windows event log service. + +Commonly Used Types: +System.Diagnostics.EventLog + +When using NuGet 3.x this package requires at least version 3.4. + https://go.microsoft.com/fwlink/?LinkID=799421 + © Microsoft Corporation. All rights reserved. + true + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/System.Diagnostics.EventLog.nuspec.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/System.Diagnostics.EventLog.nuspec.meta new file mode 100644 index 00000000..c7ab4485 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/System.Diagnostics.EventLog.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9dade35269a502906a834524a3047703 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/THIRD-PARTY-NOTICES.TXT b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/THIRD-PARTY-NOTICES.TXT new file mode 100644 index 00000000..77a243ef --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/THIRD-PARTY-NOTICES.TXT @@ -0,0 +1,375 @@ +.NET Core uses third-party libraries or other resources that may be +distributed under licenses different than the .NET Core software. + +In the event that we accidentally failed to list a required notice, please +bring it to our attention. Post an issue or email us: + + dotnet@microsoft.com + +The attached notices are provided for information only. + +License notice for ASP.NET +------------------------------- + +Copyright (c) .NET Foundation. All rights reserved. +Licensed under the Apache License, Version 2.0. + +Available at +https://github.com/aspnet/AspNetCore/blob/master/LICENSE.txt + +License notice for Slicing-by-8 +------------------------------- + +http://sourceforge.net/projects/slicing-by-8/ + +Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + + +This software program is licensed subject to the BSD License, available at +http://www.opensource.org/licenses/bsd-license.html. + + +License notice for Unicode data +------------------------------- + +http://www.unicode.org/copyright.html#License + +Copyright © 1991-2017 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +License notice for Zlib +----------------------- + +https://github.com/madler/zlib +http://zlib.net/zlib_license.html + +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +*/ + +License notice for Mono +------------------------------- + +http://www.mono-project.com/docs/about-mono/ + +Copyright (c) .NET Foundation Contributors + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for International Organization for Standardization +----------------------------------------------------------------- + +Portions (C) International Organization for Standardization 1986: + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. + +License notice for Intel +------------------------ + +"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xamarin and Novell +------------------------------------- + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Third party notice for W3C +-------------------------- + +"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. +This work is being provided by the copyright holders under the following license. +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders." + +License notice for Bit Twiddling Hacks +-------------------------------------- + +Bit Twiddling Hacks + +By Sean Eron Anderson +seander@cs.stanford.edu + +Individually, the code snippets here are in the public domain (unless otherwise +noted) — feel free to use them however you please. The aggregate collection and +descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are +distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and +without even the implied warranty of merchantability or fitness for a particular +purpose. + +License notice for Brotli +-------------------------------------- + +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +compress_fragment.c: +Copyright (c) 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +decode_fuzzer.c: +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + +License notice for Json.NET +------------------------------- + +https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md + +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for vectorized base64 encoding / decoding +-------------------------------------------------------- + +Copyright (c) 2005-2007, Nick Galbreath +Copyright (c) 2013-2017, Alfred Klomp +Copyright (c) 2015-2017, Wojciech Mula +Copyright (c) 2016-2017, Matthieu Darbois +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/THIRD-PARTY-NOTICES.TXT.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/THIRD-PARTY-NOTICES.TXT.meta new file mode 100644 index 00000000..04e55713 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/THIRD-PARTY-NOTICES.TXT.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ffcbc43eaeeb3b8e29a31cb008ddd318 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib.meta new file mode 100644 index 00000000..ff29950c --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5efa31b586e66609f919dfae54f2e308 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0.meta new file mode 100644 index 00000000..337a31cf --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 024d49644b7e225e6a3e553eeccb0629 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.dll b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.dll new file mode 100644 index 00000000..cf314541 Binary files /dev/null and b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.dll differ diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.dll.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.dll.meta new file mode 100644 index 00000000..3aac4b05 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 67f45b273d918508da09e5cc463cf4b5 +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Any: + enabled: 1 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.xml b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.xml new file mode 100644 index 00000000..df131af9 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.xml @@ -0,0 +1,3562 @@ + + + + System.Diagnostics.EventLog + + + + Provides data for the + + event. + + + + Initializes a new instance of the + + class. + + + + Initializes a new instance of the + + class with the specified event log entry. + + An + + that represents the entry that was written. + + + + Gets the event log entry that was written to the log. + An + + that represents the entry that was written to the event log. + + + + Represents the method that will handle the + + event of an. + + The source of the event. + An + + that contains the event data. + + + + Represents a placeholder (bookmark) within an event stream. You can use the placeholder to mark a + position and return to this position in a stream of events. An instance of this object can be obtained + from an + + object, in which case it corresponds to the position of that event record. + + + + Represents a keyword for an event. Keywords are defined in an event provider and are used to group + the event with other similar events (based on the usage of the events). + + + + Gets the localized name of the keyword. + A string that contains a localized name for this keyword. + + + Gets the non-localized name of the keyword. + A string that contains the non-localized name of this keyword. + + + Gets the numeric value associated with the keyword. + The numeric value associated with the keyword. + + + Contains an event level that is defined in an event provider. The level signifies the severity of + the event. + + + + Gets the localized name for the event level. The name describes what severity level of events this + level is used for. + + A string that contains the localized name for the event level. + + + Gets the non-localized name of the event level. + A string that contains the non-localized name of the event level. + + + Gets the numeric value of the event level. + The numeric value of the event level. + + + Contains static information and configuration settings for an event log. Many of the configurations + settings were defined by the event provider that created the log. + + + + Initializes a new + + object by specifying the local event log for which to get information and configuration settings. + + The name of the local event log for which to get information and configuration + settings. + + + + Initializes a new + + object by specifying the name of the log for which to get information and configuration settings. The + log can be on the local computer or a remote computer, based on the event log session specified. + + The name of the event log for which to get information and configuration settings. + + The event log session used to determine the event log service that the specified log + belongs to. The session is either connected to the event log service on the local computer or a remote + computer. + + + + Releases all the resources used by this object. + + + Releases the unmanaged resources used by this object, and optionally releases the managed + resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Gets a value that indicates whether the event log is a classic event log. A classic event log is + one that has its events defined in an .mc file instead of a manifest (.xml file) used by the event + provider. + + + + if the event log is a classic log; otherwise,. + + + + Gets or sets a value that indicates whether the event log is enabled or disabled. An enabled log is + one in which events can be logged, and a disabled log is one in which events cannot be logged. + + + + if the log is enabled; otherwise,. + + + + Gets or sets the file directory path to the location of the file where the events are stored for + the log. + + A string that contains the path to the event log file. + + + Gets an + + value that specifies whether the event log is an application, system, or custom event log. + + One of the enumeration values. + + + Gets or sets an + + value that determines how events are handled when the event log becomes full. + + One of the enumeration values. + + + Gets the name of the event log. + The name of the event log. + + + Gets an + + value that determines the type of the event log. + + One of the enumeration values. + + + Gets or sets the maximum size, in bytes, that the event log file is allowed to be. When the file + reaches this maximum size, it is considered full. + + The maximum size, in bytes, that the event log file is allowed to be. + + + Gets the name of the event provider that created this event log. + The name of the event provider that created this event log. + + + Gets the size of the buffer that the event provider uses for publishing events to the log. + + The size of the buffer that the event provider uses for publishing events to the log. It can be. + + + + Gets the control globally unique identifier (GUID) for the event log if the log is a debug log. If + this log is not a debug log, this value is. + + A GUID value, or + + if the log is not a debug log. + + + + Gets or sets the keyword mask used by the event provider. + The keyword mask used by the event provider, or + + if the event provider did not define any keywords. + + + + Gets the maximum latency time used by the event provider when publishing events to the log. + + The maximum latency time used by the event provider when publishing events to the log, or + + if no latency time was specified by the event provider. + + + + Gets or sets the maximum event level (which defines the severity of the event) that is allowed to + be logged in the event log. This value is defined by the event provider. + + The maximum event level that is allowed to be logged in the event log, or + + if the maximum event level was not defined in the event provider. + + + + Gets the maximum number of buffers used by the event provider to publish events to the event log. + + The maximum number of buffers used by the event provider to publish events to the event log. This + value can be. + + + + Gets the minimum number of buffers used by the event provider to publish events to the event log. + + The minimum number of buffers used by the event provider to publish events to the event log. This + value can be. + + + + Gets an enumerable collection of the names of all the event providers that can publish events to + this event log. + + An enumerable collection of strings that contain the event provider names. + + + Saves the configuration settings that. + + + Gets or sets the security descriptor of the event log. The security descriptor defines the users + and groups of users that can read and write to the event log. + + A string that contains the security descriptor for the event log. + + + Represents the base class for all the exceptions that are thrown when an error occurs while reading + event log related information. + + + + Initializes a new instance of the + + class. + + + + Initializes a new instance of the + + class with the error code for the exception. + + The error code for the error that occurred while reading or configuring event log + related information. For more information and a list of event log related error codes, see + http://go.microsoft.com/fwlink/?LinkId=82629. + + + + Initializes a new instance of the + + class with serialized data. + + The + + object that holds the serialized object data about the exception being thrown. + + The + + object that contains contextual information about the source or destination. + + + + Initializes a new instance of the + + class by specifying the error message that describes the current exception. + + The error message that describes the current exception. + + + Initializes a new instance of the + + class with an error message and inner exception. + + The error message that describes the current exception. + The Exception instance that caused the current exception. + + + Sets the SerializationInfo object with information about the exception. + The + + object that holds the serialized object data about the exception thrown. + + The + + object that contains contextual information about the source or destination. + + + + Gets the error message that describes the current exception. + Returns a string that contains the error message that describes the current exception. + + + Allows you to access the run-time properties of active event logs and event log files. These + properties include the number of events in the log, the size of the log, a value that determines whether + the log is full, and the last time the log was written to or accessed. + + + + Gets the file attributes of the log file associated with the log. + Returns an integer value. This value can be null. + + + Gets the time that the log file associated with the event log was created. + Returns a + + object. This value can be null. + + + + Gets the size of the file, in bytes, associated with the event log. + Returns a long value. + + + Gets a Boolean value that determines whether the log file has reached its maximum size (the log is + full). + + Returns + + if the log is full, and returns + + if the log is not full. + + + + Gets the last time the log file associated with the event log was accessed. + Returns a + + object. This value can be null. + + + + Gets the last time data was written to the log file associated with the event log. + Returns a + + object. This value can be null. + + + + Gets the number of the oldest event record in the event log. + Returns a long value that represents the number of the oldest event record in the event log. This + value can be null. + + + + Gets the number of event records in the event log. + Returns a long value that represents the number of event records in the event log. This value can + be null. + + + + Represents the exception thrown when an event provider publishes invalid data in an event. + + + + Initializes a new instance of the + + class. + + + + Initializes a new instance of the + + class with serialized data. + + The + + object that holds the serialized object data about the exception thrown. + + The + + object that contains contextual information about the source or destination. + + + + Initializes a new instance of the + + class by specifying the error message that describes the current exception. + + The error message that describes the current exception. + + + Initializes a new instance of the + + class with an error message and inner exception. + + The error message that describes the current exception. + The Exception instance that caused the current exception. + + + Defines the default access permissions for the event log. The Application and System values + indicate that the log shares the access control list (ACL) with the appropriate Windows log (the + Application or System event logs) and share the Event Tracing for Windows (ETW) session with other logs + of the same isolation. All channels with Custom isolation use a private ETW session. + + + + The log shares the access control list with the Application event log and shares the ETW session + with other logs that have Application isolation. + + + + The event log is a custom event log that uses its own private ETW session. + + + The log shares the access control list with the System event log and shares the ETW session with + other logs that have System isolation. + + + + Represents a link between an event provider and an event log that the provider publishes events + into. This object cannot be instantiated. + + + + Gets the localized name of the event log. + Returns a string that contains the localized name of the event log. + + + Gets a Boolean value that determines whether the event log is imported, rather than defined in the + event provider. An imported event log is defined in a different provider. + + Returns + + if the event log is imported by the event provider, and returns + + if the event log is not imported by the event provider. + + + + Gets the non-localized name of the event log associated with this object. + Returns a string that contains the non-localized name of the event log associated with this + object. + + + + Determines the behavior for the event log service handles an event log when the log reaches its + maximum allowed size (when the event log is full). + + + + Archive the log when full, do not overwrite events. The log is automatically archived when + necessary. No events are overwritten. + + + + New events continue to be stored when the log file is full. Each new incoming event replaces the + oldest event in the log. + + + + Do not overwrite events. Clear the log manually rather than automatically. + + + Represents the exception that is thrown when a requested event log (usually specified by the name + of the event log or the path to the event log file) does not exist. + + + + Initializes a new instance of the + + class. + + + + Initializes a new instance of the + + class with serialized data. + + The + + object that holds the serialized object data about the exception thrown. + + The + + object that contains contextual information about the source or destination. + + + + Initializes a new instance of the + + class by specifying the error message that describes the current exception. + + The error message that describes the current exception. + + + Initializes a new instance of the + + class with an error message and inner exception. + + The error message that describes the current exception. + The Exception instance that caused the current exception. + + + Contains an array of strings that represent XPath queries for elements in the XML representation of + an event, which is based on the Event Schema. The queries in this object are used to extract values from + the event. + + + + Initializes a new + + class instance. + + XPath queries used to extract values from the XML representation of the + event. + + + + Releases all the resources used by this object. + + + Releases the unmanaged resources used by this object, and optionally releases the managed + resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Represents the exception that is thrown when a specified event provider name references a disabled + event provider. A disabled event provider cannot publish events. + + + + Initializes a new instance of the + + class. + + + + Initializes a new instance of the + + class with serialized data. + + The + + object that holds the serialized object data about the exception thrown. + + The + + object that contains contextual information about the source or destination. + + + + Initializes a new instance of the + + class by specifying the error message that describes the current exception. + + The error message that describes the current exception. + + + Initializes a new instance of the + + class with an error message and inner exception. + + The error message that describes the current exception. + The Exception instance that caused the current exception. + + + Represents a query for events in an event log and the settings that define how the query is + executed and on what computer the query is executed on. + + + + Initializes a new instance of the + + class by specifying the target of the query. The target can be an active event log or a log file. + + The name of the event log to query, or the path to the event log file to query. + Specifies whether the string used in the path parameter specifies the name of an + event log, or the path to an event log file. + + + + Initializes a new instance of the + + class by specifying the target of the query and the event query. The target can be an active event log + or a log file. + + The name of the event log to query, or the path to the event log file to query. + Specifies whether the string used in the path parameter specifies the name of an + event log, or the path to an event log file. + + The event query used to retrieve events that match the query conditions. + + + Gets or sets the Boolean value that determines whether to read events from the newest event in an + event log to the oldest event in the log. + + Returns + + if events are read from the newest event in the log to the oldest event, and returns + + if events are read from the oldest event in the log to the newest event. + + + + Gets or sets the session that access the Event Log service on the local computer or a remote + computer. This object can be set to access a remote event log by creating a + + object or an + + object with this + + object. + + Returns an + + object. + + + + Gets or sets a Boolean value that determines whether this query will continue to retrieve events + when the query has an error. + + + + indicates that the query will continue to retrieve events even if the query fails for some logs, and + + indicates that this query will not continue to retrieve events when the query fails. + + + + Enables you to read events from an event log based on an event query. The events that are read by + this object are returned as + + objects. + + + + Initializes a new instance of the + + class by specifying an event query. + + The event query used to retrieve events. + + + Initializes a new instance of the + + class by specifying an event query and a bookmark that is used as starting position for the query. + + The event query used to retrieve events. + The bookmark (placeholder) used as a starting position in the event log or stream of + events. Only events logged after the bookmark event will be returned by the query. + + + + Initializes a new instance of the + + class by specifying an active event log to retrieve events from. + + The name of the event log to retrieve events from. + + + Initializes a new instance of the + + class by specifying the name of an event log to retrieve events from or the path to a log file to + retrieve events from. + + The name of the event log to retrieve events from, or the path to the event log file to + retrieve events from. + + Specifies whether the string used in the path parameter specifies the name of an + event log, or the path to an event log file. + + + + Gets or sets the number of events retrieved from the stream of events on every read operation. + + Returns an integer value. + + + Cancels the current query operation. + + + Releases all the resources used by this object. + + + Releases the unmanaged resources used by this object, and optionally releases the managed + resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Gets the status of each event log or log file associated with the event query in this object. + + Returns a list of + + objects that each contain status information about an event log associated with the event query in this + object. + + + + Reads the next event that is returned from the event query in this object. + Returns an + + object. + + + + Reads the next event that is returned from the event query in this object. + The maximum time to allow the read operation to run before canceling the operation. + + Returns an + + object. + + + + Changes the position in the event stream where the next event that is read will come from by + specifying a bookmark event. No events logged before the bookmark event will be retrieved. + + The bookmark (placeholder) used as a starting position in the event log or stream of + events. Only events that have been logged after the bookmark event will be returned by the query. + + + + Changes the position in the event stream where the next event that is read will come from by + specifying a bookmark event and an offset number of events from the bookmark. No events logged before + the bookmark plus the offset will be retrieved. + + The bookmark (placeholder) used as a starting position in the event log or stream of + events. Only events that have been logged after the bookmark event will be returned by the query. + + The offset number of events to change the position of the bookmark. + + + Changes the position in the event stream where the next event that is read will come from by + specifying a starting position and an offset from the starting position. No events logged before the + starting position plus the offset will be retrieved. + + A value from the + + enumeration defines where in the stream of events to start querying for events. + + The offset number of events to add to the origin. + + + Represents an exception that is thrown when an error occurred while reading, querying, or + subscribing to the events in an event log. + + + + Initializes a new instance of the + + class. + + + + Initializes a new instance of the + + class with serialized data. + + The + + object that holds the serialized object data about the exception thrown. + + The + + object that contains contextual information about the source or destination. + + + + Initializes a new instance of the + + class by specifying the error message that describes the current exception. + + The error message that describes the current exception. + + + Initializes a new instance of the + + class with an error message and inner exception. + + The error message that describes the current exception. + The Exception instance that caused the current exception. + + + Contains the properties of an event instance for an event that is received from an + + object. The event properties provide information about the event such as the name of the computer where + the event was logged and the time that the event was created. + + + + Gets the globally unique identifier (GUID) for the activity in process for which the event is + involved. This allows consumers to group related activities. + + Returns a GUID value. + + + Gets a placeholder (bookmark) that corresponds to this event. This can be used as a placeholder in + a stream of events. + + Returns a + + object. + + + + Gets the name of the event log or the event log file in which the event is stored. + Returns a string that contains the name of the event log or the event log file in which the event + is stored. + + + + Releases the unmanaged resources used by this object, and optionally releases the managed + resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Gets the event message in the current locale. + Returns a string that contains the event message in the current locale. + + + Gets the event message, replacing variables in the message with the specified values. + The values used to replace variables in the event message. Variables are represented by + %n, where n is a number. + + Returns a string that contains the event message in the current locale. + + + Gets the enumeration of the values of the user-supplied event properties, or the results of + XPath-based data if the event has XML representation. + + Selects the property values to return. + Returns a list of objects. + + + Gets the identifier for this event. All events with this identifier value represent the same type + of event. + + Returns an integer value. This value can be null. + + + Gets the keyword mask of the event. Get the value of the + + property to get the name of the keywords used in this mask. + + Returns a long value. This value can be null. + + + Gets the display names of the keywords used in the keyword mask for this event. + Returns an enumerable collection of strings that contain the display names of the keywords used in + the keyword mask for this event. + + + + Gets the level of the event. The level signifies the severity of the event. For the name of the + level, get the value of the + + property. + + Returns a byte value. This value can be null. + + + Gets the display name of the level for this event. + Returns a string that contains the display name of the level for this event. + + + Gets the name of the event log where this event is logged. + Returns a string that contains a name of the event log that contains this event. + + + Gets the name of the computer on which this event was logged. + Returns a string that contains the name of the computer on which this event was logged. + + + Gets a list of query identifiers that this event matches. This event matches a query if the query + would return this event. + + Returns an enumerable collection of integer values. + + + Gets the opcode of the event. The opcode defines a numeric value that identifies the activity or a + point within an activity that the application was performing when it raised the event. For the name of + the opcode, get the value of the + + property. + + Returns a short value. This value can be null. + + + Gets the display name of the opcode for this event. + Returns a string that contains the display name of the opcode for this event. + + + Gets the process identifier for the event provider that logged this event. + Returns an integer value. This value can be null. + + + Gets the user-supplied properties of the event. + Returns a list of + + objects. + + + + Gets the globally unique identifier (GUID) of the event provider that published this event. + + Returns a GUID value. This value can be null. + + + Gets the name of the event provider that published this event. + Returns a string that contains the name of the event provider that published this event. + + + Gets qualifier numbers that are used for event identification. + Returns an integer value. This value can be null. + + + Gets the event record identifier of the event in the log. + Returns a long value. This value can be null. + + + Gets a globally unique identifier (GUID) for a related activity in a process for which an event is + involved. + + Returns a GUID value. This value can be null. + + + Gets a task identifier for a portion of an application or a component that publishes an event. A + task is a 16-bit value with 16 top values reserved. This type allows any value between 0x0000 and 0xffef + to be used. For the name of the task, get the value of the + + property. + + Returns an integer value. This value can be null. + + + Gets the display name of the task for the event. + Returns a string that contains the display name of the task for the event. + + + Gets the thread identifier for the thread that the event provider is running in. + Returns an integer value. This value can be null. + + + Gets the time, in + + format, that the event was created. + + Returns a + + value. The value can be null. + + + + Gets the XML representation of the event. All of the event properties are represented in the + event's XML. The XML conforms to the event schema. + + Returns a string that contains the XML representation of the event. + + + Gets the security descriptor of the user whose context is used to publish the event. + Returns a + + value. + + + + Gets the version number for the event. + Returns a byte value. This value can be null. + + + Used to access the Event Log service on the local computer or a remote computer so you can manage + and gather information about the event logs and event providers on the computer. + + + + Initializes a new + + object, establishes a connection with the local Event Log service. + + + + Initializes a new + + object, and establishes a connection with the Event Log service on the specified computer. The + credentials (user name and password) of the user who calls the method is used for the credentials to + access the remote computer. + + The name of the computer on which to connect to the Event Log service. + + + Initializes a new + + object, and establishes a connection with the Event Log service on the specified computer. The specified + credentials (user name and password) are used for the credentials to access the remote computer. + + The name of the computer on which to connect to the Event Log service. + The domain of the specified user. + The user name used to connect to the remote computer. + The password used to connect to the remote computer. + The type of connection to use for the connection to the remote computer. + + + Cancels any operations (such as reading an event log or subscribing to an event log) that are + currently active for the Event Log service that this session object is connected to. + + + + Clears events from the specified event log. + The name of the event log to clear all the events from. + + + Clears events from the specified event log, and saves the cleared events to the specified file. + + The name of the event log to clear all the events from. + The path to the file in which the cleared events will be saved. The file should end + in .evtx. + + + + Releases all the resources used by this object. + + + Releases the unmanaged resources used by this object, and optionally releases the managed + resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Exports events into an external log file. The events are stored without the event messages. + + The name of the event log to export events from, or the path to the event log file to + export events from. + + Specifies whether the string used in the path parameter specifies the name of an + event log, or the path to an event log file. + + The query used to select the events to export. Only the events returned from the query + will be exported. + + The path to the log file (ends in .evtx) in which the exported events will be + stored after this method is executed. + + + + Exports events into an external log file. A flag can be set to indicate that the method will + continue exporting events even if the specified query fails for some logs. The events are stored without + the event messages. + + The name of the event log to export events from, or the path to the event log file to + export events from. + + Specifies whether the string used in the path parameter specifies the name of an + event log, or the path to an event log file. + + The query used to select the events to export. Only the events returned from the query + will be exported. + + The path to the log file (ends in .evtx) in which the exported events will be + stored after this method is executed. + + + + indicates that the method will continue exporting events even if the specified query fails for some + logs, and + + indicates that this method will not continue to export events when the specified query fails. + + + + Exports events and their messages into an external log file. + The name of the event log to export events from, or the path to the event log file to + export events from. + + Specifies whether the string used in the path parameter specifies the name of an + event log, or the path to an event log file. + + The query used to select the events to export. Only the events returned from the query + will be exported. + + The path to the log file (ends in .evtx) in which the exported events will be + stored after this method is executed. + + + + Exports events and their messages into an external log file. A flag can be set to indicate that the + method will continue exporting events even if the specified query fails for some logs. The event + messages are exported in the specified language. + + The name of the event log to export events from, or the path to the event log file to + export events from. + + Specifies whether the string used in the path parameter specifies the name of an + event log, or the path to an event log file. + + The query used to select the events to export. Only the events returned from the query + will be exported. + + The path to the log file (ends in .evtx) in which the exported events will be + stored after this method is executed. + + + + indicates that the method will continue exporting events even if the specified query fails for some + logs, and + + indicates that this method will not continue to export events when the specified query fails. + + The culture that specifies which language that the exported event messages + will be in. + + + + Gets an object that contains runtime information for the specified event log. + The name of the event log to get information about, or the path to the event log file + to get information about. + + Specifies whether the string used in the path parameter specifies the name of an + event log, or the path to an event log file. + + An object that contains information about the specified log. + + + Gets an enumerable collection of all the event log names that are registered with the Event Log + service. + + An enumerable collection of strings that contain the event log names. + + + Gets an enumerable collection of all the event provider names that are registered with the Event + Log service. An event provider is an application that publishes events to an event log. + + An enumerable collection of strings that contain the event provider names. + + + Gets a static predefined session object that is connected to the Event Log service on the local + computer. + + A predefined session object that is connected to the Event Log service on the local computer. + + + + Contains the status code or error code for a specific event log. This status can be used to + determine if the event log is available for an operation. + + + + Gets the name of the event log for which the status code is obtained. + The name of the event log for which the status code is obtained. + + + Gets the status code or error code for the event log. This status or error is the result of a read + or subscription operation on the event log. + + The status code or error code for the event log. + + + Defines the type of events that are logged in an event log. Each log can only contain one type of + event. + + + + These events are primarily for end users, administrators, and support. The events that are found in + the Administrative type logs indicate a problem and a well-defined solution that an administrator can + act on. An example of an administrative event is an event that occurs when an application fails to + connect to a printer. + + + + Events in an analytic event log are published in high volume. They describe program operation and + indicate problems that cannot be handled by user intervention. + + + + Events in a debug type event log are used solely by developers to diagnose a problem for + debugging. + + + + Events in an operational type event log are used for analyzing and diagnosing a problem or + occurrence. They can be used to trigger tools or tasks based on the problem or occurrence. An example of + an operational event is an event that occurs when a printer is added or removed from a system. + + + + Allows you to subscribe to incoming events. Each time a desired event is published to an event log, + the + + event is raised, and the method that handles this event will be executed. + + + + Initializes a new instance of the + + class by specifying an event query. + + Specifies a query for the event subscription. When an event is logged that matches + the criteria expressed in the query, then the + + event is raised. + + + + Initializes a new instance of the + + class by specifying an event query and a bookmark that is used as starting position for the query. + + Specifies a query for the event subscription. When an event is logged that matches + the criteria expressed in the query, then the + + event is raised. + + The bookmark (placeholder) used as a starting position in the event log or stream of + events. Only events that have been logged after the bookmark event will be returned by the query. + + + + Initializes a new instance of the + + class by specifying an event query, a bookmark that is used as starting position for the query, and a + Boolean value that determines whether to read the events that already exist in the event log. + + Specifies a query for the event subscription. When an event is logged that matches + the criteria expressed in the query, then the + + event is raised. + + The bookmark (placeholder) used as a starting position in the event log or stream of + events. Only events that have been logged after the bookmark event will be returned by the query. + + A Boolean value that determines whether to read the events that already + exist in the event log. If this value is, then the existing events are read and if + this value is, then the existing events are not read. + + + + Initializes a new instance of the + + class by specifying the name or path to an event log. + + The path or name of the event log monitor for events. If any event is logged in this + event log, then the + + event is raised. + + + + Releases all the resources used by this object. + + + Releases the unmanaged resources used by this object, and optionally releases the managed + resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Gets or sets a value that indicates whether this object starts delivering events to the event + delegate. + + + + when this object can deliver events to the event delegate; + + when this object has stopped delivery. + + + + Allows setting a delegate (event handler method) that gets called every time an event is published + that matches the criteria specified in the event query for this object. + + + + Contains the metadata (properties and settings) for an event that is defined in an event + provider. + + + + Gets the description template associated with the event using the current thread locale for the + description language. + + A string that contains the description template associated with the event. + + + Gets the identifier of the event that is defined in the event provider. + The event identifier. + + + Gets the keywords associated with the event that is defined in the event provider. + An enumerable collection of the keywords associated with the event. + + + Gets the level associated with the event that is defined in the event provider. The level defines + the severity of the event. + + The level associated with the event. + + + Gets a link to the event log that receives this event when the provider publishes this event. + + A link to the event log. + + + Gets the opcode associated with this event that is defined by an event provider. The opcode defines + a numeric value that identifies the activity or a point within an activity that the application was + performing when it raised the event. + + The opcode associated with this event. + + + Gets the task associated with the event. A task identifies a portion of an application or a + component that publishes an event. + + The task associated with the event. + + + Gets the template string for the event. Templates are used to describe data that is used by a + provider when an event is published. Templates optionally specify XML that provides the structure of an + event. The XML allows values that the event publisher provides to be inserted during the rendering of an + event. + + A string that contains the template for the event. + + + Gets the version of the event that qualifies the event identifier. + A byte value that contains the version of the event. + + + Contains an event opcode that is defined in an event provider. An opcode defines a numeric value + that identifies the activity or a point within an activity that the application was performing when it + raised the event. + + + + Gets the localized name for an event opcode. + The localized name for an event opcode. + + + Gets the non-localized name for an event opcode. + The non-localized name for an event opcode. + + + Gets the numeric value associated with the event opcode. + The numeric value associated with the event opcode. + + + Contains the value of an event property that is specified by the event provider when the event is + published. + + + + Gets the value of the event property that is specified by the event provider when the event is + published. + + The value of the event property. + + + Defines the properties of an event instance for an event that is received from an + + object. The event properties provide information about the event such as the name of the computer where + the event was logged and the time the event was created. This class is an abstract class. The + + class implements this class. + + + + Initializes a new instance of the + + class. + + + + Gets the globally unique identifier (GUID) for the activity in process for which the event is + involved. This allows consumers to group related activities. + + Returns a GUID value. + + + Gets a placeholder (bookmark) that corresponds to this event. This can be used as a placeholder in + a stream of events. + + Returns a + + object. + + + + Releases all the resources used by this object. + + + Releases the unmanaged resources used by this object, and optionally releases the managed + resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Gets the event message in the current locale. + Returns a string that contains the event message in the current locale. + + + Gets the event message, replacing variables in the message with the specified values. + The values used to replace variables in the event message. Variables are represented by + %n, where n is a number. + + Returns a string that contains the event message in the current locale. + + + Gets the identifier for this event. All events with this identifier value represent the same type + of event. + + Returns an integer value. This value can be null. + + + Gets the keyword mask of the event. Get the value of the + + property to get the name of the keywords used in this mask. + + Returns a long value. This value can be null. + + + Gets the display names of the keywords used in the keyword mask for this event. + Returns an enumerable collection of strings that contain the display names of the keywords used in + the keyword mask for this event. + + + + Gets the level of the event. The level signifies the severity of the event. For the name of the + level, get the value of the + + property. + + Returns a byte value. This value can be null. + + + Gets the display name of the level for this event. + Returns a string that contains the display name of the level for this event. + + + Gets the name of the event log where this event is logged. + Returns a string that contains a name of the event log that contains this event. + + + Gets the name of the computer on which this event was logged. + Returns a string that contains the name of the computer on which this event was logged. + + + Gets the opcode of the event. The opcode defines a numeric value that identifies the activity or a + point within an activity that the application was performing when it raised the event. For the name of + the opcode, get the value of the + + property. + + Returns a short value. This value can be null. + + + Gets the display name of the opcode for this event. + Returns a string that contains the display name of the opcode for this event. + + + Gets the process identifier for the event provider that logged this event. + Returns an integer value. This value can be null. + + + Gets the user-supplied properties of the event. + Returns a list of + + objects. + + + + Gets the globally unique identifier (GUID) of the event provider that published this event. + + Returns a GUID value. This value can be null. + + + Gets the name of the event provider that published this event. + Returns a string that contains the name of the event provider that published this event. + + + Gets qualifier numbers that are used for event identification. + Returns an integer value. This value can be null. + + + Gets the event record identifier of the event in the log. + Returns a long value. This value can be null. + + + Gets a globally unique identifier (GUID) for a related activity in a process for which an event is + involved. + + Returns a GUID value. This value can be null. + + + Gets a task identifier for a portion of an application or a component that publishes an event. A + task is a 16-bit value with 16 top values reserved. This type allows any value between 0x0000 and 0xffef + to be used. To obtain the task name, get the value of the + + property. + + Returns an integer value. This value can be null. + + + Gets the display name of the task for the event. + Returns a string that contains the display name of the task for the event. + + + Gets the thread identifier for the thread that the event provider is running in. + Returns an integer value. This value can be null. + + + Gets the time, in + + format, that the event was created. + + Returns a + + value. The value can be null. + + + + Gets the XML representation of the event. All of the event properties are represented in the event + XML. The XML conforms to the event schema. + + Returns a string that contains the XML representation of the event. + + + Gets the security descriptor of the user whose context is used to publish the event. + Returns a + + value. + + + + Gets the version number for the event. + Returns a byte value. This value can be null. + + + When the + + event is raised, an instance of this object is passed to the delegate method that handles the event. + This object contains the event that was published to the event log or the exception that occurred when + the event subscription failed. + + + + Gets the exception that occurred when the event subscription failed. The exception has a + description of why the subscription failed. + + The exception that occurred when the event subscription failed. + + + Gets the event record that is published to the event log. This event matches the criteria from the + query specified in the event subscription. + + The event record. + + + Contains an event task that is defined in an event provider. The task identifies a portion of an + application or a component that publishes an event. A task is a 16-bit value with 16 top values + reserved. + + + + Gets the localized name for the event task. + The localized name for the event task. + + + Gets the event globally unique identifier (GUID) associated with the task. + The event GUID associated with the task. + + + Gets the non-localized name of the event task. + The non-localized name of the event task. + + + Gets the numeric value associated with the task. + The numeric value associated with the task. + + + Specifies that a string contains a name of an event log or the file system path to an event log + file. + + + + A path parameter contains the file system path to an event log file. + + + A path parameter contains the name of the event log. + + + Contains static information about an event provider, such as the name and id of the provider, and + the collection of events defined in the provider. + + + + Initializes a new instance of the + + class by specifying the name of the provider that you want to retrieve information about. + + The name of the event provider that you want to retrieve information about. + + + + Initializes a new instance of the + + class by specifying the name of the provider that you want to retrieve information about, the event log + service that the provider is registered with, and the language that you want to return the information + in. + + The name of the event provider that you want to retrieve information about. + + The + + object that specifies whether to get the provider information from a provider on the local computer or a + provider on a remote computer. + + The culture that specifies the language that the information should be + returned in. + + + + Gets the localized name of the event provider. + Returns a string that contains the localized name of the event provider. + + + Releases all the resources used by this object. + + + Releases the unmanaged resources used by this object, and optionally releases the managed + resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Gets an enumerable collection of + + objects, each of which represents an event that is defined in the provider. + + Returns an enumerable collection of + + objects. + + + + Gets the base of the URL used to form help requests for the events in this event provider. + + Returns a + + value. + + + + Gets the globally unique identifier (GUID) for the event provider. + Returns the GUID value for the event provider. + + + Gets an enumerable collection of + + objects, each of which represent an event keyword that is defined in the event provider. + + Returns an enumerable collection of + + objects. + + + + Gets an enumerable collection of + + objects, each of which represent a level that is defined in the event provider. + + Returns an enumerable collection of + + objects. + + + + Gets an enumerable collection of + + objects, each of which represent a link to an event log that is used by the event provider. + + Returns an enumerable collection of + + objects. + + + + Gets the path of the file that contains the message table resource that has the strings associated + with the provider metadata. + + Returns a string that contains the path of the provider message file. + + + Gets the unique name of the event provider. + Returns a string that contains the unique name of the event provider. + + + Gets an enumerable collection of + + objects, each of which represent an opcode that is defined in the event provider. + + Returns an enumerable collection of + + objects. + + + + Gets the path of the file that contains the message table resource that has the strings used for + parameter substitutions in event descriptions. + + Returns a string that contains the path of the file that contains the message table resource that + has the strings used for parameter substitutions in event descriptions. + + + + Gets the path to the file that contains the metadata associated with the provider. + Returns a string that contains the path to the file that contains the metadata associated with the + provider. + + + + Gets an enumerable collection of + + objects, each of which represent a task that is defined in the event provider. + + Returns an enumerable collection of + + objects. + + + + Defines values for the type of authentication used during a Remote Procedure Call (RPC) login to a + server. This login occurs when you create a + + object that specifies a connection to a remote computer. + + + + Use the default authentication method during RPC login. The default authentication is equivalent to + Negotiate. + + + + Use Kerberos authentication during RPC login. + + + Use the Negotiate authentication method during RPC login. This allows the client application to + select the most appropriate authentication method (NTLM or Kerberos) for the situation. + + + + Use Windows NT LAN Manager (NTLM) authentication during RPC login. + + + Defines the standard keywords that are attached to events by the event provider. For more + information about keywords, see. + + + + Attached to all failed security audit events. This keyword should only be used for events in the + Security log. + + + + Attached to all successful security audit events. This keyword should only be used for events in + the Security log. + + + + Attached to transfer events where the related Activity ID (Correlation ID) is a computed value and + is not guaranteed to be unique (not a real GUID). + + + + Attached to transfer events where the related Activity ID (Correlation ID) is a computed value and + is not guaranteed to be unique (not a real GUID). + + + + Attached to events which are raised using the RaiseEvent function. + + + This value indicates that no filtering on keyword is performed when the event is published. + + + + Attached to all response time events. + + + Attached to all Service Quality Mechanism (SQM) events. + + + Attached to all Windows Diagnostic Infrastructure (WDI) context events. + + + Attached to all Windows Diagnostic Infrastructure (WDI) diagnostic events. + + + Defines the standard event levels that are used in the Event Log service. The level defines the + severity of the event. Custom event levels can be defined beyond these standard levels. For more + information about levels, see. + + + + This level corresponds to critical errors, which is a serious error that has caused a major + failure. + + + + This level corresponds to normal errors that signify a problem. + + + This level corresponds to informational events or messages that are not errors. These events can + help trace the progress or state of an application. + + + + This value indicates that not filtering on the level is done during the event publishing. + + + This level corresponds to lengthy events or messages. + + + This level corresponds to warning events. For example, an event that gets published because a disk + is nearing full capacity is a warning event. + + + + Defines the standard opcodes that are attached to events by the event provider. For more + information about opcodes, see. + + + + An event with this opcode is a trace collection start event. + + + An event with this opcode is a trace collection stop event. + + + An event with this opcode is an extension event. + + + An event with this opcode is an informational event. + + + An event with this opcode is published when one activity in an application receives data. + + + An event with this opcode is published after an activity in an application replies to an event. + + + + An event with this opcode is published after an activity in an application resumes from a suspended + state. The event should follow an event with the Suspend opcode. + + + + An event with this opcode is published when one activity in an application transfers data or system + resources to another activity. + + + + An event with this opcode is published when an application starts a new transaction or activity. + This can be embedded into another transaction or activity when multiple events with the Start opcode + follow each other without an event with a Stop opcode. + + + + An event with this opcode is published when an activity or a transaction in an application ends. + The event corresponds to the last unpaired event with a Start opcode. + + + + An event with this opcode is published when an activity in an application is suspended. + + + Defines the standard tasks that are attached to events by the event provider. For more information + about tasks, see. + + + + No task is used to identify a portion of an application that publishes an event. + + + Represents language-neutral information for an event log entry. + + + Initializes a new instance of the + + class using the specified resource identifiers for the localized message and category text of the event + entry. + + A resource identifier that corresponds to a string defined in the message resource + file of the event source. + + A resource identifier that corresponds to a string defined in the category resource + file of the event source, or zero to specify no category for the event. + + The + + parameter is a negative value or a value larger than. + -or- + The + + parameter is a negative value or a value larger than. + + + + Initializes a new instance of the + + class using the specified resource identifiers for the localized message and category text of the event + entry and the specified event log entry type. + + A resource identifier that corresponds to a string defined in the message resource + file of the event source. + + A resource identifier that corresponds to a string defined in the category resource + file of the event source, or zero to specify no category for the event. + + An + + value that indicates the event type. + + + + is not a valid + + value. + + + + is a negative value or a value larger than. + -or- + + is a negative value or a value larger than. + + + + Gets or sets the resource identifier that specifies the application-defined category of the event + entry. + + A numeric category value or resource identifier that corresponds to a string defined in the + category resource file of the event source. The default is zero, which signifies that no category will + be displayed for the event entry. + + The property is set to a negative value or to a value + larger than. + + + + Gets or sets the event type of the event log entry. + An + + value that indicates the event entry type. The default value is. + + The property is not set to a valid + + value. + + + + Gets or sets the resource identifier that designates the message text of the event entry. + A resource identifier that corresponds to a string defined in the message resource file of the + event source. + + The property is set to a negative value or to a value + larger than. + + + + Provides interaction with Windows event logs. + + + Initializes a new instance of the + + class. Does not associate the instance with any log. + + + + Initializes a new instance of the + + class. Associates the instance with a log on the local computer. + + The name of the log on the local computer. + The log name is. + + The log name is invalid. + + + Initializes a new instance of the + + class. Associates the instance with a log on the specified computer. + + The name of the log on the specified computer. + The computer on which the log exists. + The log name is. + + The log name is invalid. + -or- + The computer name is invalid. + + + + Initializes a new instance of the + + class. Associates the instance with a log on the specified computer and creates or assigns the specified + source to the. + + The name of the log on the specified computer + The computer on which the log exists. + The source of event log entries. + The log name is. + + The log name is invalid. + -or- + The computer name is invalid. + + + + Begins the initialization of an + + used on a form or used by another component. The initialization occurs at runtime. + + + + is already initialized. + + + + Removes all entries from the event log. + The event log was not cleared successfully. + -or- + The log cannot be opened. A Windows error code is not available. + + A value is not specified for the + + property. Make sure the log name is not an empty string. + + The log does not exist. + + + Closes the event log and releases read and write handles. + The event log's read handle or write handle was not + released successfully. + + + + Establishes a valid event source for writing localized event messages, using the specified + configuration properties for the event source and the corresponding event log. + + The configuration properties for the event source and its target event log. + The computer name specified in + + is not valid. + -or- + The source name specified in + + is. + -or- + The log name specified in + + is not valid. Event log names must consist of printable characters and cannot include the characters + '*', '?', or '\'. + -or- + The log name specified in + + is not valid for user log creation. The Event log names AppEvent, SysEvent, and SecEvent are reserved + for system use. + -or- + The log name matches an existing event source name. + -or- + The source name specified in + + results in a registry key path longer than 254 characters. + -or- + The first 8 characters of the log name specified in + + are not unique. + -or- + The source name specified in + + is already registered. + -or- + The source name specified in + + matches an existing event log name. + + The registry key for the event log could not be + opened. + + + + is. + + + + Establishes the specified source name as a valid event source for writing entries to a log on the + local computer. This method can also create a new custom log on the local computer. + + The source name by which the application is registered on the local computer. + The name of the log the source's entries are written to. Possible values include + Application, System, or a custom event log. + + + + is an empty string ("") or. + -or- + + is not a valid event log name. Event log names must consist of printable characters, and cannot include + the characters '*', '?', or '\'. + -or- + + is not valid for user log creation. The event log names AppEvent, SysEvent, and SecEvent are reserved + for system use. + -or- + The log name matches an existing event source name. + -or- + The source name results in a registry key path longer than 254 characters. + -or- + The first 8 characters of + + match the first 8 characters of an existing event log name. + -or- + The source cannot be registered because it already exists on the local computer. + -or- + The source name matches an existing event log name. + + The registry key for the event log could not be opened + on the local computer. + + + + Establishes the specified source name as a valid event source for writing entries to a log on the + specified computer. This method can also be used to create a new custom log on the specified computer. + + The source by which the application is registered on the specified computer. + The name of the log the source's entries are written to. Possible values include + Application, System, or a custom event log. If you do not specify a value, + + defaults to Application. + + The name of the computer to register this event source with, or "." for the local + computer. + + The + + is not a valid computer name. + -or- + + is an empty string ("") or. + -or- + + is not a valid event log name. Event log names must consist of printable characters, and cannot include + the characters '*', '?', or '\'. + -or- + + is not valid for user log creation. The event log names AppEvent, SysEvent, and SecEvent are reserved + for system use. + -or- + The log name matches an existing event source name. + -or- + The source name results in a registry key path longer than 254 characters. + -or- + The first 8 characters of + + match the first 8 characters of an existing event log name on the specified computer. + -or- + The source cannot be registered because it already exists on the specified computer. + -or- + The source name matches an existing event source name. + + The registry key for the event log could not be opened + on the specified computer. + + + + Removes an event log from the local computer. + The name of the log to delete. Possible values include: Application, Security, System, + and any custom event logs on the computer. + + + + is an empty string ("") or. + + The registry key for the event log could not be opened + on the local computer. + -or- + The log does not exist on the local computer. + + The event log was not cleared successfully. + -or- + The log cannot be opened. A Windows error code is not available. + + + + Removes an event log from the specified computer. + The name of the log to delete. Possible values include: Application, Security, System, + and any custom event logs on the specified computer. + + The name of the computer to delete the log from, or "." for the local computer. + + + + is an empty string ("") or. + -or- + + is not a valid computer name. + + The registry key for the event log could not be opened + on the specified computer. + -or- + The log does not exist on the specified computer. + + The event log was not cleared successfully. + -or- + The log cannot be opened. A Windows error code is not available. + + + + Removes the event source registration from the event log of the local computer. + The name by which the application is registered in the event log system. + The + + parameter does not exist in the registry of the local computer. + -or- + You do not have write access on the registry key for the event log. + + + + Removes the application's event source registration from the specified computer. + The name by which the application is registered in the event log system. + The name of the computer to remove the registration from, or "." for the local + computer. + + The + + parameter is invalid. + -or- + The + + parameter does not exist in the registry of the specified computer. + -or- + You do not have write access on the registry key for the event log. + + + + cannot be deleted because in the registry, the parent registry key for + + does not contain a subkey with the same name. + + + + Releases the unmanaged resources used by the, and + optionally releases the managed resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Gets or sets a value indicating whether the + + receives + + event notifications. + + + + if the + + receives notification when an entry is written to the log; otherwise,. + + The event log is on a remote computer. + + + Ends the initialization of an + + used on a form or by another component. The initialization occurs at runtime. + + + + Gets the contents of the event log. + An + + holding the entries in the event log. Each entry is associated with an instance of the + + class. + + + + Occurs when an entry is written to an event log on the local computer. + + + Determines whether the log exists on the local computer. + The name of the log to search for. Possible values include: Application, Security, + System, other application-specific logs (such as those associated with Active Directory), or any custom + log on the computer. + + + + if the log exists on the local computer; otherwise,. + + The logName is + + or the value is empty. + + + + Determines whether the log exists on the specified computer. + The log for which to search. Possible values include: Application, Security, System, + other application-specific logs (such as those associated with Active Directory), or any custom log on + the computer. + + The name of the computer on which to search for the log, or "." for the local + computer. + + + + if the log exists on the specified computer; otherwise,. + + The + + parameter is an invalid format. Make sure you have used proper syntax for the computer on which you are + searching. + -or- + The + + is + + or the value is empty. + + + + Searches for all event logs on the local computer and creates an array of + + objects that contain the list. + + An array of type + + that represents the logs on the local computer. + + You do not have read access to the registry. + -or- + There is no event log service on the computer. + + + + Searches for all event logs on the given computer and creates an array of + + objects that contain the list. + + The computer on which to search for event logs. + An array of type + + that represents the logs on the given computer. + + The + + parameter is an invalid computer name. + + You do not have read access to the registry. + -or- + There is no event log service on the computer. + + + + Gets or sets the name of the log to read from or write to. + The name of the log. This can be Application, System, Security, or a custom log name. The default + is an empty string (""). + + + + Gets the event log's friendly name. + A name that represents the event log in the system's event viewer. + The specified + + does not exist in the registry for this computer. + + + + Gets the name of the log to which the specified source is registered. + The name of the event source. + The name of the computer on which to look, or "." for the local computer. + The name of the log associated with the specified source in the registry. + + + Gets or sets the name of the computer on which to read or write events. + The name of the server on which the event log resides. The default is the local computer ("."). + + The computer name is invalid. + + + Gets or sets the maximum event log size in kilobytes. + The maximum event log size in kilobytes. The default is 512, indicating a maximum file size of 512 + kilobytes. + + The specified value is less than 64, or greater than + 4194240, or not an even multiple of 64. + + The + + value is not a valid log name. + -or- + The registry key for the event log could not be opened on the target computer. + + + + Gets the number of days to retain entries in the event log. + The number of days that entries in the event log are retained. The default value is 7. + + + Changes the configured behavior for writing new entries when the event log reaches its maximum file + size. + + The overflow behavior for writing new entries to the event log. + The minimum number of days each event log entry is retained. This parameter is + used only if + + is set to. + + + + is not a valid + + value. + + + + is less than one, or larger than 365. + + The + + value is not a valid log name. + -or- + The registry key for the event log could not be opened on the target computer. + + + + Gets the configured behavior for storing new entries when the event log reaches its maximum log + file size. + + The + + value that specifies the configured behavior for storing new entries when the event log reaches its + maximum log size. The default is. + + + + Specifies the localized name of the event log, which is displayed in the server Event Viewer. + + The fully specified path to a localized resource file. + The resource identifier that indexes a localized string within the resource file. + + The + + value is not a valid log name. + -or- + The registry key for the event log could not be opened on the target computer. + + + + is. + + + + Gets or sets the source name to register and use when writing to the event log. + The name registered with the event log as a source of entries. The default is an empty string + (""). + + The source name results in a registry key path longer than 254 + characters. + + + + Determines whether an event source is registered on the local computer. + The name of the event source. + + + if the event source is registered on the local computer; otherwise,. + + + + was not found, but some or all of the event logs could not be searched. + + + + Determines whether an event source is registered on a specified computer. + The name of the event source. + The name the computer on which to look, or "." for the local computer. + + + if the event source is registered on the given computer; otherwise,. + + + + is an invalid computer name. + + + + was not found, but some or all of the event logs could not be searched. + + + + Gets or sets the object used to marshal the event handler calls issued as a result of an + + entry written event. + + The + + used to marshal event-handler calls issued as a result of an + + event on the event log. + + + + Writes an information type entry, with the given message text, to the event log. + The string to write to the event log. + The + + property of the + + has not been set. + -or- + The method attempted to register a new event source, but the computer name in + + is not valid. + -or- + The source is already registered for a different event log. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + The registry key for the event log could not be + opened. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an error, warning, information, success audit, or failure audit entry with the given message + text to the event log. + + The string to write to the event log. + One of the + + values. + + The + + property of the + + has not been set. + -or- + The method attempted to register a new event source, but the computer name in + + is not valid. + -or- + The source is already registered for a different event log. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + + + is not a valid. + + The registry key for the event log could not be + opened. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an entry with the given message text and application-defined event identifier to the event + log. + + The string to write to the event log. + One of the + + values. + + The application-specific identifier for the event. + The + + property of the + + has not been set. + -or- + The method attempted to register a new event source, but the computer name in + + is not valid. + -or- + The source is already registered for a different event log. + -or- + + is less than zero or greater than. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + The registry key for the event log could not be + opened. + + + + is not a valid. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an entry with the given message text, application-defined event identifier, and + application-defined category to the event log. + + The string to write to the event log. + One of the + + values. + + The application-specific identifier for the event. + The application-specific subcategory associated with the message. + The + + property of the + + has not been set. + -or- + The method attempted to register a new event source, but the computer name in + + is not valid. + -or- + The source is already registered for a different event log. + -or- + + is less than zero or greater than. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + The registry key for the event log could not be + opened. + + + + is not a valid. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an entry with the given message text, application-defined event identifier, and + application-defined category to the event log, and appends binary data to the message. + + The string to write to the event log. + One of the + + values. + + The application-specific identifier for the event. + The application-specific subcategory associated with the message. + An array of bytes that holds the binary data associated with the entry. + The + + property of the + + has not been set. + -or- + The method attempted to register a new event source, but the computer name in + + is not valid. + -or- + The source is already registered for a different event log. + -or- + + is less than zero or greater than. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + The registry key for the event log could not be + opened. + + + + is not a valid. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an information type entry with the given message text to the event log, using the specified + registered event source. + + The source by which the application is registered on the specified computer. + The string to write to the event log. + The + + value is an empty string (""). + -or- + The + + value is. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + The registry key for the event log could not be + opened. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an error, warning, information, success audit, or failure audit entry with the given message + text to the event log, using the specified registered event source. + + The source by which the application is registered on the specified computer. + The string to write to the event log. + One of the + + values. + + The + + value is an empty string (""). + -or- + The + + value is. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + The registry key for the event log could not be + opened. + + + + is not a valid. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an entry with the given message text and application-defined event identifier to the event + log, using the specified registered event source. + + The source by which the application is registered on the specified computer. + The string to write to the event log. + One of the + + values. + + The application-specific identifier for the event. + The + + value is an empty string (""). + -or- + The + + value is. + -or- + + is less than zero or greater than. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + The registry key for the event log could not be + opened. + + + + is not a valid. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an entry with the given message text, application-defined event identifier, and + application-defined category to the event log, using the specified registered event source. The + + can be used by the Event Viewer to filter events in the log. + + The source by which the application is registered on the specified computer. + The string to write to the event log. + One of the + + values. + + The application-specific identifier for the event. + The application-specific subcategory associated with the message. + The + + value is an empty string (""). + -or- + The + + value is. + -or- + + is less than zero or greater than. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + The registry key for the event log could not be + opened. + + + + is not a valid. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an entry with the given message text, application-defined event identifier, and + application-defined category to the event log (using the specified registered event source) and appends + binary data to the message. + + The source by which the application is registered on the specified computer. + The string to write to the event log. + One of the + + values. + + The application-specific identifier for the event. + The application-specific subcategory associated with the message. + An array of bytes that holds the binary data associated with the entry. + The + + value is an empty string (""). + -or- + The + + value is. + -or- + + is less than zero or greater than. + -or- + The message string is longer than 31,839 bytes (32,766 bytes on Windows operating systems before Windows + Vista). + -or- + The source name results in a registry key path longer than 254 characters. + + + + is not a valid. + + The registry key for the event log could not be + opened. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an event log entry with the given event data, message replacement strings, and associated + binary data. + + An + + instance that represents a localized event log entry. + + An array of bytes that holds the binary data associated with the entry. + An array of strings to merge into the message text of the event log entry. + The + + property of the + + has not been set. + -or- + The method attempted to register a new event source, but the computer name in + + is not valid. + -or- + The source is already registered for a different event log. + -or- + + is less than zero or greater than. + -or- + + has more than 256 elements. + -or- + One of the + + elements is longer than 32766 bytes. + -or- + The source name results in a registry key path longer than 254 characters. + + + + is. + + The registry key for the event log could not be + opened. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes a localized entry to the event log. + An + + instance that represents a localized event log entry. + + An array of strings to merge into the message text of the event log entry. + The + + property of the + + has not been set. + -or- + The method attempted to register a new event source, but the computer name in + + is not valid. + -or- + The source is already registered for a different event log. + -or- + + is less than zero or greater than. + -or- + + has more than 256 elements. + -or- + One of the + + elements is longer than 32766 bytes. + -or- + The source name results in a registry key path longer than 254 characters. + + + + is. + + The registry key for the event log could not be + opened. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an event log entry with the given event data, message replacement strings, and associated + binary data, and using the specified registered event source. + + The name of the event source registered for the application on the specified + computer. + + An + + instance that represents a localized event log entry. + + An array of bytes that holds the binary data associated with the entry. + An array of strings to merge into the message text of the event log entry. + The + + value is an empty string (""). + -or- + The + + value is. + -or- + + is less than zero or greater than. + -or- + + has more than 256 elements. + -or- + One of the + + elements is longer than 32766 bytes. + -or- + The source name results in a registry key path longer than 254 characters. + + + + is. + + The registry key for the event log could not be + opened. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Writes an event log entry with the given event data and message replacement strings, using the + specified registered event source. + + The name of the event source registered for the application on the specified + computer. + + An + + instance that represents a localized event log entry. + + An array of strings to merge into the message text of the event log entry. + The + + value is an empty string (""). + -or- + The + + value is. + -or- + + is less than zero or greater than. + -or- + + has more than 256 elements. + -or- + One of the + + elements is longer than 32766 bytes. + -or- + The source name results in a registry key path longer than 254 characters. + + + + is. + + The registry key for the event log could not be + opened. + + The operating system reported an error when writing + the event entry to the event log. A Windows error code is not available. + + + + Encapsulates a single record in the event log. This class cannot be inherited. + + + Gets the text associated with the + + property for this entry. + + The application-specific category text. + The space could not be allocated for one of the insertion strings + associated with the category. + + + + Gets the category number of the event log entry. + The application-specific category number for this entry. + + + Gets the binary data associated with the entry. + An array of bytes that holds the binary data associated with the entry. + + + Gets the event type of this entry. + The event type that is associated with the entry in the event log. + + + Performs a comparison between two event log entries. + The + + to compare. + + + + if the + + objects are identical; otherwise,. + + + + Gets the application-specific event identifier for the current event entry. + The application-specific identifier for the event message. + + + Gets the index of this entry in the event log. + The index of this entry in the event log. + + + Gets the resource identifier that designates the message text of the event entry. + A resource identifier that corresponds to a string definition in the message resource file of the + event source. + + + + Gets the name of the computer on which this entry was generated. + The name of the computer that contains the event log. + + + Gets the localized message associated with this event entry. + The formatted, localized text for the message. This includes associated replacement strings. + + The space could not be allocated for one of the insertion strings + associated with the message. + + + + Gets the replacement strings associated with the event log entry. + An array that holds the replacement strings stored in the event entry. + + + Gets the name of the application that generated this event. + The name registered with the event log as the source of this event. + + + Populates a + + with the data needed to serialize the target object. + + The + + to populate with data. + + The destination (see) for + this serialization. + + + + Gets the local time at which this event was generated. + The local time at which this event was generated. + + + Gets the local time at which this event was written to the log. + The local time at which this event was written to the log. + + + Gets the name of the user who is responsible for this event. + The security identifier (SID) that uniquely identifies a user or group. + Account information could not be obtained for the user's SID. + + + + Defines size and enumerators for a collection of + + instances. + + + + Copies the elements of the + + to an array of + + instances, starting at a particular array index. + + The one-dimensional array of + + instances that is the destination of the elements copied from the collection. The array must have + zero-based indexing. + + The zero-based index in the array at which copying begins. + + + Gets the number of entries in the event log (that is, the number of elements in the + + collection). + + The number of entries currently in the event log. + + + Supports a simple iteration over the + + object. + + An object that can be used to iterate over the collection. + + + Gets an entry in the event log, based on an index that starts at 0 (zero). + The zero-based index that is associated with the event log entry. + The event log entry at the location that is specified by the + + parameter. + + + + Copies the elements of the collection to an, starting at a particular + + index. + + The one-dimensional + + that is the destination of the elements that are copied from the collection. The + + must have zero-based indexing. + + The zero-based index in + + at which copying begins. + + + + Gets a value that indicates whether access to the + + is synchronized (thread-safe). + + + + if access to the collection is not synchronized (thread-safe). + + + + Gets an object that can be used to synchronize access to the + + object. + + An object that can be used to synchronize access to the collection. + + + Specifies the event type of an event log entry. + + + An error event. This indicates a significant problem the user should know about; usually a loss of + functionality or data. + + + + A failure audit event. This indicates a security event that occurs when an audited access attempt + fails; for example, a failed attempt to open a file. + + + + An information event. This indicates a significant, successful operation. + + + A success audit event. This indicates a security event that occurs when an audited access attempt + is successful; for example, logging on successfully. + + + + A warning event. This indicates a problem that is not immediately significant, but that may signify + conditions that could cause future problems. + + + + Provides a simple listener that directs tracing or debugging output to an. + + + + Initializes a new instance of the + + class without a trace listener. + + + + Initializes a new instance of the + + class using the specified event log. + + The event log to write to. + + + Initializes a new instance of the + + class using the specified source. + + The name of an existing event log source. + + + Closes the event log so that it no longer receives tracing or debugging output. + + + Gets or sets the event log to write to. + The event log to write to. + + + Gets or sets the name of this. + + The name of this trace listener. + + + Writes trace information, a data object, and event information to the event log. + An object that contains the current process ID, thread ID, and stack trace + information. + + A name used to identify the output; typically the name of the application that + generated the trace event. + + One of the enumeration values that specifies the type of event that has caused the + trace. + + A numeric identifier for the event. The combination of + + and + + uniquely identifies an event. + + A data object to write to the output file or stream. + + + is not specified. + -or- + The log entry string exceeds 32,766 characters. + + + + Writes trace information, an array of data objects, and event information to the event log. + + An object that contains the current process ID, thread ID, and stack trace + information. + + A name used to identify the output; typically the name of the application that + generated the trace event. + + One of the enumeration values that specifies the type of event that has caused the + trace. + + A numeric identifier for the event. The combination of + + and + + uniquely identifies an event. + + An array of data objects. + + + is not specified. + -or- + The log entry string exceeds 32,766 characters. + + + + Writes trace information, a message, and event information to the event log. + An object that contains the current process ID, thread ID, and stack trace + information. + + A name used to identify the output; typically the name of the application that + generated the trace event. + + One of the enumeration values that specifies the type of event that has caused the + trace. + + A numeric identifier for the event. The combination of + + and + + uniquely identifies an event. + + The trace message. + + + is not specified. + -or- + The log entry string exceeds 32,766 characters. + + + + Writes trace information, a formatted array of objects, and event information to the event log. + + An object that contains the current process ID, thread ID, and stack trace + information. + + A name used to identify the output; typically the name of the application that + generated the trace event. + + One of the enumeration values that specifies the type of event that has caused the + trace. + + A numeric identifier for the event. The combination of + + and + + uniquely identifies an event. + + A format string that contains zero or more format items that correspond to objects in + the + + array. + + An + + array containing zero or more objects to format. + + + + is not specified. + -or- + The log entry string exceeds 32,766 characters. + + + + Writes a message to the event log for this instance. + The message to write. + + + exceeds 32,766 characters. + + + + Writes a message to the event log for this instance. + The message to write. + + + exceeds 32,766 characters. + + + + Represents the configuration settings used to create an event log source on the local computer or a + remote computer. + + + + Initializes a new instance of the + + class with a specified event source and event log name. + + The name to register with the event log as a source of entries. + The name of the log to which entries from the source are written. + + + Gets or sets the number of categories in the category resource file. + The number of categories in the category resource file. The default value is zero. + The property is set to a negative value or to a value + larger than. + + + + Gets or sets the path of the resource file that contains category strings for the source. + The path of the category resource file. The default is an empty string (""). + + + Gets or sets the name of the event log to which the source writes entries. + The name of the event log. This can be Application, System, or a custom log name. The default value + is "Application." + + + + Gets or sets the name of the computer on which to register the event source. + The name of the system on which to register the event source. The default is the local computer + ("."). + + The computer name is invalid. + + + Gets or sets the path of the message resource file that contains message formatting strings for the + source. + + The path of the message resource file. The default is an empty string (""). + + + Gets or sets the path of the resource file that contains message parameter strings for the + source. + + The path of the parameter resource file. The default is an empty string (""). + + + Gets or sets the name to register with the event log as an event source. + The name to register with the event log as a source of entries. The default is an empty string + (""). + + + + Specifies how to handle entries in an event log that has reached its maximum file size. + + + Indicates that existing entries are retained when the event log is full and new entries are + discarded. + + + + Indicates that each new entry overwrites the oldest entry when the event log is full. + + + Indicates that new events overwrite events older than specified by the + + property value when the event log is full. New events are discarded if the event log is full and there + are no events older than specified by the + + property value. + + + + \ No newline at end of file diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.xml.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.xml.meta new file mode 100644 index 00000000..12d529c0 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/lib/netstandard2.0/System.Diagnostics.EventLog.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 489f9538dbeff83c997ce6bf33f6f1ed +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/useSharedDesignerContext.txt b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/useSharedDesignerContext.txt new file mode 100644 index 00000000..e69de29b diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/useSharedDesignerContext.txt.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/useSharedDesignerContext.txt.meta new file mode 100644 index 00000000..18accd48 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/useSharedDesignerContext.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c1220170af88122768f30307d1d3e8f1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/version.txt b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/version.txt new file mode 100644 index 00000000..f5d54e72 --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/version.txt @@ -0,0 +1 @@ +0f7f38c4fd323b26da10cce95f857f77f0f09b48 diff --git a/Assets/Packages/System.Diagnostics.EventLog.4.7.0/version.txt.meta b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/version.txt.meta new file mode 100644 index 00000000..3e792c7b --- /dev/null +++ b/Assets/Packages/System.Diagnostics.EventLog.4.7.0/version.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 23cf80991b1d017ea980b261719b3287 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0.meta new file mode 100644 index 00000000..399a5815 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d433416a763e8e7c8984dc98773b34ce +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/.signature.p7s b/Assets/Packages/System.Security.Principal.Windows.4.7.0/.signature.p7s new file mode 100644 index 00000000..aed0689f Binary files /dev/null and b/Assets/Packages/System.Security.Principal.Windows.4.7.0/.signature.p7s differ diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/LICENSE.TXT b/Assets/Packages/System.Security.Principal.Windows.4.7.0/LICENSE.TXT new file mode 100644 index 00000000..984713a4 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/LICENSE.TXT @@ -0,0 +1,23 @@ +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/LICENSE.TXT.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0/LICENSE.TXT.meta new file mode 100644 index 00000000..69b4c265 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/LICENSE.TXT.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1002fbbfd09f900f2803aa982bb2171f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/System.Security.Principal.Windows.nuspec b/Assets/Packages/System.Security.Principal.Windows.4.7.0/System.Security.Principal.Windows.nuspec new file mode 100644 index 00000000..fe9db1e5 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/System.Security.Principal.Windows.nuspec @@ -0,0 +1,66 @@ + + + + System.Security.Principal.Windows + 4.7.0 + System.Security.Principal.Windows + Microsoft + microsoft,dotnetframework + false + MIT + https://licenses.nuget.org/MIT + https://github.com/dotnet/corefx + http://go.microsoft.com/fwlink/?LinkID=288859 + Provides classes for retrieving the current Windows user and for interacting with Windows users and groups. + +Commonly Used Types: +System.Security.Principal.WindowsIdentity +System.Security.Principal.SecurityIdentifier +System.Security.Principal.NTAccount +System.Security.Principal.WindowsPrincipal +System.Security.Principal.IdentityReference +System.Security.Principal.IdentityNotMappedException +System.Security.Principal.WindowsBuiltInRole +System.Security.Principal.WellKnownSidType + +When using NuGet 3.x this package requires at least version 3.4. + https://go.microsoft.com/fwlink/?LinkID=799421 + © Microsoft Corporation. All rights reserved. + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/System.Security.Principal.Windows.nuspec.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0/System.Security.Principal.Windows.nuspec.meta new file mode 100644 index 00000000..b0b10cda --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/System.Security.Principal.Windows.nuspec.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5b2acc3f05ce2bc44a9e64495ac621ce +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/THIRD-PARTY-NOTICES.TXT b/Assets/Packages/System.Security.Principal.Windows.4.7.0/THIRD-PARTY-NOTICES.TXT new file mode 100644 index 00000000..77a243ef --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/THIRD-PARTY-NOTICES.TXT @@ -0,0 +1,375 @@ +.NET Core uses third-party libraries or other resources that may be +distributed under licenses different than the .NET Core software. + +In the event that we accidentally failed to list a required notice, please +bring it to our attention. Post an issue or email us: + + dotnet@microsoft.com + +The attached notices are provided for information only. + +License notice for ASP.NET +------------------------------- + +Copyright (c) .NET Foundation. All rights reserved. +Licensed under the Apache License, Version 2.0. + +Available at +https://github.com/aspnet/AspNetCore/blob/master/LICENSE.txt + +License notice for Slicing-by-8 +------------------------------- + +http://sourceforge.net/projects/slicing-by-8/ + +Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + + +This software program is licensed subject to the BSD License, available at +http://www.opensource.org/licenses/bsd-license.html. + + +License notice for Unicode data +------------------------------- + +http://www.unicode.org/copyright.html#License + +Copyright © 1991-2017 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +License notice for Zlib +----------------------- + +https://github.com/madler/zlib +http://zlib.net/zlib_license.html + +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +*/ + +License notice for Mono +------------------------------- + +http://www.mono-project.com/docs/about-mono/ + +Copyright (c) .NET Foundation Contributors + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for International Organization for Standardization +----------------------------------------------------------------- + +Portions (C) International Organization for Standardization 1986: + Permission to copy in any form is granted for use with + conforming SGML systems and applications as defined in + ISO 8879, provided this notice is included in all copies. + +License notice for Intel +------------------------ + +"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +License notice for Xamarin and Novell +------------------------------------- + +Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Copyright (c) 2011 Novell, Inc (http://www.novell.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Third party notice for W3C +-------------------------- + +"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. +This work is being provided by the copyright holders under the following license. +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders." + +License notice for Bit Twiddling Hacks +-------------------------------------- + +Bit Twiddling Hacks + +By Sean Eron Anderson +seander@cs.stanford.edu + +Individually, the code snippets here are in the public domain (unless otherwise +noted) — feel free to use them however you please. The aggregate collection and +descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are +distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and +without even the implied warranty of merchantability or fitness for a particular +purpose. + +License notice for Brotli +-------------------------------------- + +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +compress_fragment.c: +Copyright (c) 2011, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +decode_fuzzer.c: +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." + +License notice for Json.NET +------------------------------- + +https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md + +The MIT License (MIT) + +Copyright (c) 2007 James Newton-King + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +License notice for vectorized base64 encoding / decoding +-------------------------------------------------------- + +Copyright (c) 2005-2007, Nick Galbreath +Copyright (c) 2013-2017, Alfred Klomp +Copyright (c) 2015-2017, Wojciech Mula +Copyright (c) 2016-2017, Matthieu Darbois +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/THIRD-PARTY-NOTICES.TXT.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0/THIRD-PARTY-NOTICES.TXT.meta new file mode 100644 index 00000000..3cea82a1 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/THIRD-PARTY-NOTICES.TXT.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 892ad5a7fe11651a8a3caf20690f2fd7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib.meta new file mode 100644 index 00000000..66c7f95c --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9eb7acbec2e49bb6b8445d88de68cf97 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0.meta new file mode 100644 index 00000000..2f8a8861 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80fa151c021583060b0bbe24eed9dbfd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.dll b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.dll new file mode 100644 index 00000000..19d0fc0e Binary files /dev/null and b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.dll differ diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.dll.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.dll.meta new file mode 100644 index 00000000..e494cfc2 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: ef048d394f2bbc13d8aeabe29905bdd1 +labels: +- NuGetForUnity +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Any: + enabled: 1 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.xml b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.xml new file mode 100644 index 00000000..7ffbeb19 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.xml @@ -0,0 +1,1858 @@ + + + + System.Security.Principal.Windows + + + + Provides a safe handle to a Windows thread or process access token. For more information, see + Access Tokens. + + + + Initializes a new instance of the + + class. + + An + + object that represents the pre-existing handle to use. Using + + returns an invalid handle. + + + + Returns an invalid handle by instantiating a + + object with. + + Returns a + + object. + + + + Gets a value that indicates whether the handle is invalid. + + + if the handle is not valid; otherwise,. + + + + Represents an exception for a principal whose identity could not be mapped to a known identity. + + + + Initializes a new instance of the + + class. + + + + Initializes a new instance of the + + class by using the specified error message. + + The error message that explains the reason for the exception. + + + Initializes a new instance of the + + class by using the specified error message and inner exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. If + + is not null, the current exception is raised in a + + block that handles the inner exception. + + + + Gets serialization information with the data needed to create an instance of this + + object. + + The object that holds the serialized object data about the exception being + thrown. + + The object that contains contextual information about the source or + destination. + + + + Represents the collection of unmapped identities for an + + exception. + + The collection of unmapped identities. + + + Represents an identity and is the base class for the + + and + + classes. This class does not provide a public constructor, and therefore cannot be inherited. + + + + Returns a value that indicates whether the specified object equals this instance of the + + class. + + An object to compare with this + + instance, or a null reference. + + + + if + + is an object with the same underlying type and value as this + + instance; otherwise,. + + + + Serves as a hash function for. + + is suitable for use in hashing algorithms and data structures like a hash table. + + The hash code for this + + object. + + + + Returns a value that indicates whether the specified type is a valid translation type for the + + class. + + The type being queried for validity to serve as a conversion from. The following target types are valid: + + + + + + if + + is a valid translation type for the + + class; otherwise,. + + + + Compares two + + objects to determine whether they are equal. They are considered equal if they have the same canonical + name representation as the one returned by the + + property or if they are both. + + The left + + operand to use for the equality comparison. This parameter can be. + + The right + + operand to use for the equality comparison. This parameter can be. + + + + if + + and + + are equal; otherwise,. + + + + Compares two + + objects to determine whether they are not equal. They are considered not equal if they have different + canonical name representations than the one returned by the + + property or if one of the objects is + + and the other is not. + + The left + + operand to use for the inequality comparison. This parameter can be. + + The right + + operand to use for the inequality comparison. This parameter can be. + + + + if + + and + + are not equal; otherwise,. + + + + Returns the string representation of the identity represented by the + + object. + + The identity in string format. + + + Translates the account name represented by the + + object into another-derived type. + + The target type for the conversion from. + + The converted identity. + + + Gets the string value of the identity represented by the + + object. + + The string value of the identity represented by the + + object. + + + + Represents a collection of + + objects and provides a means of converting sets of-derived objects to-derived types. + + + + Initializes a new instance of the + + class with zero items in the collection. + + + + Initializes a new instance of the + + class by using the specified initial size. + + The initial number of items in the collection. The value of + + is a hint only; it is not necessarily the maximum number of items created. + + + + Adds an + + object to the + + collection. + + The + + object to add to the collection. + + + + is. + + + + Clears all + + objects from the + + collection. + + + + Indicates whether the + + collection contains the specified + + object. + + The + + object to check for. + + + + if the collection contains the specified object. + + + + is. + + + + Copies the + + collection to an + + array, starting at the specified index. + + An + + array object to which the + + collection is to be copied. + + The zero-based index in + + where the + + collection is to be copied. + + + + Gets the number of items in the + + collection. + + The number of + + objects in the + + collection. + + + + Gets an enumerator that can be used to iterate through the + + collection. + + An enumerator for the + + collection. + + + + Sets or gets the node at the specified index of the + + collection. + + The zero-based index in the + + collection. + + The + + at the specified index in the collection. If + + is greater than or equal to the number of nodes in the collection, the return value is. + + + + Removes the specified + + object from the collection. + + The + + object to remove. + + + + if the specified object was removed from the collection. + + + + is. + + + + + Gets an enumerator that can be used to iterate through the + + collection. + + An enumerator for the + + collection. + + + + Converts the objects in the collection to the specified type. Calling this method is the same as + calling + + with the second parameter set to, which means that exceptions will not be thrown + for items that fail conversion. + + The type to which items in the collection are being converted. + A + + collection that represents the converted contents of the original collection. + + + + Converts the objects in the collection to the specified type and uses the specified fault tolerance + to handle or ignore errors associated with a type not having a conversion mapping. + + The type to which items in the collection are being converted. + A Boolean value that determines how conversion errors are handled. + If + + is, conversion errors due to a mapping not being found for the translation result + in a failed conversion and exceptions being thrown. + If + + is, types that failed to convert due to a mapping not being found for the + translation are copied without being converted into the collection being returned. + + A + + collection that represents the converted contents of the original collection. + + + + Represents a user or group account. + + + Initializes a new instance of the + + class by using the specified name. + + The name used to create the + + object. This parameter cannot be + + or an empty string. + + + + is. + + + + is an empty string. + -or- + + is too long. + + + + Initializes a new instance of the + + class by using the specified domain name and account name. + + The name of the domain. This parameter can be + + or an empty string. Domain names that are null values are treated like an empty string. + + The name of the account. This parameter cannot be + + or an empty string. + + + + is. + + + + is an empty string. + -or- + + is too long. + -or- + + is too long. + + + + Returns a value that indicates whether this + + object is equal to a specified object. + + An object to compare with this + + object, or. + + + + if + + is an object with the same underlying type and value as this + + object; otherwise,. + + + + Serves as a hash function for the current + + object. The + + method is suitable for hashing algorithms and data structures like a hash table. + + A hash value for the current + + object. + + + + Returns a value that indicates whether the specified type is a valid translation type for the + + class. + + The type being queried for validity to serve as a conversion from. The following target types are valid: + - + + - + + + + + if + + is a valid translation type for the + + class; otherwise. + + + + Compares two + + objects to determine whether they are equal. They are considered equal if they have the same canonical + name representation as the one returned by the + + property or if they are both. + + The left operand to use for the equality comparison. This parameter can be. + + The right operand to use for the equality comparison. This parameter can be. + + + + if + + and + + are equal; otherwise. + + + + Compares two + + objects to determine whether they are not equal. They are considered not equal if they have different + canonical name representations than the one returned by the + + property or if one of the objects is + + and the other is not. + + The left operand to use for the inequality comparison. This parameter can be. + + The right operand to use for the inequality comparison. This parameter can be. + + + + if + + and + + are not equal; otherwise. + + + + Returns the account name, in Domain \ Account format, for the account represented by the + + object. + + The account name, in Domain \ Account format. + + + Translates the account name represented by the + + object into another-derived type. + + The target type for the conversion from. The target type must be a type that is considered + valid by the + + method. + + The converted identity. + + + is. + + + + is not an + + type. + + Some or all identity references + could not be translated. + + The source account name is too long. + -or- + A Win32 error code was returned. + + + + Returns a string representation of this + + object. + + The string representation of this + + object. + + + + Represents a security identifier (SID) and provides marshaling and comparison operations for + SIDs. + + + + Initializes a new instance of the + + class by using a specified binary representation of a security identifier (SID). + + The byte array that represents the SID. + The byte offset to use as the starting index in. + + + + Initializes a new instance of the + + class by using an integer that represents the binary form of a security identifier (SID). + + An integer that represents the binary form of a SID. + + + Initializes a new instance of the + + class by using the specified well known security identifier (SID) type and domain SID. + + One of the enumeration values. This value must not be. + + The domain SID. This value is required for the following + + values. This parameter is ignored for any other + + values. + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + + + + Initializes a new instance of the + + class by using the specified security identifier (SID) in Security Descriptor Definition Language (SDDL) + format. + + SDDL string for the SID used to create the + + object. + + + + Returns the account domain security identifier (SID) portion from the SID represented by the + + object if the SID represents a Windows account SID. If the SID does not represent a Windows account SID, + this property returns. + + The account domain SID portion from the SID represented by the + + object if the SID represents a Windows account SID; otherwise, it returns. + + + + Returns the length, in bytes, of the security identifier (SID) represented by the + + object. + + The length, in bytes, of the SID represented by the + + object. + + + + Compares the current + + object with the specified + + object. + + The object to compare with the current object. + A signed number indicating the relative values of this instance and. + Return Value + + Description + + Less than zero + + This instance is less than. + + Zero + + This instance is equal to. + + Greater than zero + + This instance is greater than. + + + + Returns a value that indicates whether this + + object is equal to a specified object. + + An object to compare with this + + object, or. + + + + if + + is an object with the same underlying type and value as this + + object; otherwise,. + + + + Indicates whether the specified + + object is equal to the current + + object. + + The object to compare with the current object. + + + if the value of + + is equal to the value of the current + + object. + + + + Copies the binary representation of the specified security identifier (SID) represented by the + + class to a byte array. + + The byte array to receive the copied SID. + The byte offset to use as the starting index in. + + + + Serves as a hash function for the current + + object. The + + method is suitable for hashing algorithms and data structures like a hash table. + + A hash value for the current + + object. + + + + Returns a value that indicates whether the security identifier (SID) represented by this + + object is a valid Windows account SID. + + + + if the SID represented by this + + object is a valid Windows account SID; otherwise,. + + + + Returns a value that indicates whether the security identifier (SID) represented by this + + object is from the same domain as the specified SID. + + The SID to compare with this + + object. + + + + if the SID represented by this + + object is in the same domain as the + + SID; otherwise,. + + + + Returns a value that indicates whether the specified type is a valid translation type for the + + class. + + The type being queried for validity to serve as a conversion from. The following target types are valid: + - + + - + + + + + if + + is a valid translation type for the + + class; otherwise,. + + + + Returns a value that indicates whether the + + object matches the specified well known security identifier (SID) type. + + A value to compare with the + + object. + + + + if + + is the SID type for the + + object; otherwise,. + + + + Returns the maximum size, in bytes, of the binary representation of the security identifier. + + + + Returns the minimum size, in bytes, of the binary representation of the security identifier. + + + + Compares two + + objects to determine whether they are equal. They are considered equal if they have the same canonical + representation as the one returned by the + + property or if they are both. + + The left operand to use for the equality comparison. This parameter can be. + + The right operand to use for the equality comparison. This parameter can be. + + + + if + + and + + are equal; otherwise,. + + + + Compares two + + objects to determine whether they are not equal. They are considered not equal if they have different + canonical name representations than the one returned by the + + property or if one of the objects is + + and the other is not. + + The left operand to use for the inequality comparison. This parameter can be. + + The right operand to use for the inequality comparison. This parameter can be. + + + + if + + and + + are not equal; otherwise,. + + + + Returns the security identifier (SID), in Security Descriptor Definition Language (SDDL) format, + for the account represented by the + + object. An example of the SDDL format is S-1-5-9. + + The SID, in SDDL format, for the account represented by the + + object. + + + + Translates the account name represented by the + + object into another-derived type. + + The target type for the conversion from. The target type must be a type that is + considered valid by the + + method. + + The converted identity. + + + is. + + + + is not an + + type. + + Some or all identity references + could not be translated. + + A Win32 error code was returned. + + + Returns an uppercase Security Descriptor Definition Language (SDDL) string for the security + identifier (SID) represented by this + + object. + + An uppercase SDDL string for the SID represented by the + + object. + + + + Defines the privileges of the user account associated with the access token. + + + The user can change the default owner, primary group, or discretionary access control list (DACL) + of the token. + + + + The user can change the attributes of the groups in the token. + + + The user can enable or disable privileges in the token. + + + The user can adjust the session identifier of the token. + + + The user has all possible access to the token. + + + The user can attach a primary token to a process. + + + The user can duplicate the token. + + + The user can impersonate a client. + + + The maximum value that can be assigned for the + + enumeration. + + + + The user can query the token. + + + The user can query the source of the token. + + + The user has standard read rights and the + + privilege for the token. + + + + The user has standard write rights and the, + + and + + privileges for the token. + + + + Defines a set of commonly used security identifiers (SIDs). + + + Indicates a SID that matches the account administrators group. + + + Indicates a SID that matches the certificate administrators group. + + + Indicates a SID that matches the account computer group. + + + Indicates a SID that matches the account controller group. + + + Indicates a SID that matches the account domain administrator group. + + + Indicates a SID that matches the account domain guests group. + + + Indicates a SID that matches the account domain users group. + + + Indicates a SID that matches the enterprise administrators group. + + + Indicates a SID that matches the account guest group. + + + Indicates a SID that matches the account Kerberos target group. + + + Indicates a SID that matches the policy administrators group. + + + Indicates a SID that matches the RAS and IAS server account. + + + Indicates a SID that matches the schema administrators group. + + + Indicates a SID for the anonymous account. + + + Indicates a SID for an authenticated user. + + + Indicates a SID for a batch process. This SID is added to the process of a token when it logs on as + a batch job. + + + + Indicates a SID that matches the account operators account. + + + Indicates a SID that matches the administrator account. + + + Indicates a SID that matches the Windows Authorization Access group. + + + Indicates a SID that matches the backup operators group. + + + Indicates a SID that matches the domain account. + + + Indicates a SID that matches the guest account. + + + Indicates a SID that allows a user to create incoming forest trusts. It is added to the token of + users who are a member of the Incoming Forest Trust Builders built-in group in the root domain of the + forest. + + + + Indicates a SID that matches the network operators group. + + + Indicates a SID that matches the group of users that have remote access to monitor the computer. + + + + Indicates a SID that matches the group of users that have remote access to schedule logging of + performance counters on this computer. + + + + Indicates a SID that matches the power users group. + + + Indicates a SID that matches pre-Windows 2000 compatible accounts. + + + Indicates a SID that matches the print operators group. + + + Indicates a SID that matches remote desktop users. + + + Indicates a SID that matches the replicator account. + + + Indicates a SID that matches the system operators group. + + + Indicates a SID that matches built-in user accounts. + + + Indicates a creator group server SID. + + + Indicates a SID that matches the creator group of an object. + + + Indicates a creator owner server SID. + + + Indicates a SID that matches the owner or creator of an object. + + + Indicates a SID for a dial-up account. + + + Indicates a SID present when the Microsoft Digest authentication package authenticated the + client. + + + + Indicates a SID for an enterprise controller. + + + Indicates a SID for an interactive account. This SID is added to the process of a token when it + logs on interactively. + + + + Indicates a SID that matches a local service. + + + Indicates a local SID. + + + Indicates a SID that matches the local system. + + + Indicates a SID that matches logon IDs. + + + Indicates the maximum defined SID in the + + enumeration. + + + + Indicates a SID that matches a network service. + + + Indicates a SID for a network account. This SID is added to the process of a token when it logs on + across a network. + + + + Indicates a SID for the Windows NT authority. + + + Indicates a SID present when the Microsoft NTLM authentication package authenticated the client. + + + + Indicates a null SID. + + + Indicates a SID present when the user authenticated across a forest with the selective + authentication option enabled. If this SID is present, then + + cannot be present. + + + + Indicates a proxy SID. + + + Indicates a SID that matches remote logons. + + + Indicates a SID for restricted code. + + + Indicates a SID present when the Secure Channel (SSL/TLS) authentication package authenticated the + client. + + + + Indicates a SID for self. + + + Indicates a SID for a service. This SID is added to the process of a token when it logs on as a + service. + + + + Indicates a SID that matches a terminal server account. + + + Indicates a SID present when the user authenticated from within the forest or across a trust that + does not have the selective authentication option enabled. If this SID is present, then + + cannot be present. + + + + Indicates a SID that matches an account read-only controllers group. + + + Indicates a SID that matches the application package authority. + + + Indicates a SID that applies to all app containers. + + + Indicates a SID that matches the built-in DCOM certification services access group. + + + Indicates a SID that allows a user to use cryptographic operations. It is added to the token of + users who are a member of the CryptoOperators built-in group. + + + + Indicates a SID that matches the distributed COM user group. + + + Indicates a SID that matches an event log readers group. + + + Indicates a SID that matches the Internet built-in user group. + + + Indicates a SID is present in a server that can issue Terminal Server licenses. + + + Indicates a SID that matches a cacheable principals group. + + + Indicates a SID for documents library capability for app containers. + + + Indicates a SID for Windows credentials capability for app containers. + + + Indicates a SID of Internet client and server capability for app containers. + + + Indicates a SID of Internet client capability for app containers. + + + Indicates a SID for music library capability for app containers. + + + Indicates a SID for pictures library capability for app containers. + + + Indicates a SID of private network client and server capability for app containers. + + + Indicates a SID for removable storage capability for app containers. + + + Indicates a SID for shared user certificates capability for app containers. + + + Indicates a SID for videos library capability for app containers. + + + Indicates a SID that matches a console logon group. + + + Indicates a SID that matches a creator and owner rights group. + + + Indicates a SID that matches an enterprise wide read-only controllers group. + + + Indicates a SID that matches a high level of trust label. + + + Indicates a SID that matches the Internet user group. + + + Indicates a SID that matches a local logon group. + + + Indicates a SID that matches an low level of trust label. + + + Indicates a SID that matches an medium level of trust label. + + + Indicates a SID that matches the medium plus integrity label. + + + Indicates a SID that matches a read-only enterprise domain controller. + + + Indicates a SID that matches a non-cacheable principals group. + + + Indicates a SID that matches a system label. + + + Indicates a SID that matches a certificate for the given organization. + + + Indicates a SID that matches an untrusted label. + + + Indicates a SID that matches a write restricted code group. + + + Indicates a SID that matches everyone. + + + Specifies the type of Windows account used. + + + An anonymous account. + + + A Windows guest account. + + + A standard user account. + + + A Windows system account. + + + Specifies common roles to be used with. + + + + Account operators manage the user accounts on a computer or domain. + + + Administrators have complete and unrestricted access to the computer or domain. + + + Backup operators can override security restrictions for the sole purpose of backing up or restoring + files. + + + + Guests are more restricted than users. + + + Power users possess most administrative permissions with some restrictions. Thus, power users can + run legacy applications, in addition to certified applications. + + + + Print operators can take control of a printer. + + + Replicators support file replication in a domain. + + + System operators manage a particular computer. + + + Users are prevented from making accidental or intentional system-wide changes. Thus, users can run + certified applications, but not most legacy applications. + + + + Represents a Windows user. + + + Initializes a new instance of the + + class for the user represented by the specified Windows account token. + + The account token for the user on whose behalf the code is running. + + + is 0. + -or- + + is duplicated and invalid for impersonation. + + The caller does not have the correct permissions. + -or- + A Win32 error occurred. + + + + Initializes a new instance of the + + class for the user represented by the specified Windows account token and the specified authentication + type. + + The account token for the user on whose behalf the code is running. + (Informational use only.) The type of authentication used to identify the user. + + + is 0. + -or- + + is duplicated and invalid for impersonation. + + The caller does not have the correct permissions. + -or- + A Win32 error occurred. + + + + Initializes a new instance of the + + class for the user represented by the specified Windows account token, the specified authentication + type, and the specified Windows account type. + + The account token for the user on whose behalf the code is running. + (Informational use only.) The type of authentication used to identify the user. + One of the enumeration values. + + + is 0. + -or- + + is duplicated and invalid for impersonation. + + The caller does not have the correct permissions. + -or- + A Win32 error occurred. + + + + Initializes a new instance of the + + class for the user represented by the specified Windows account token, the specified authentication + type, the specified Windows account type, and the specified authentication status. + + The account token for the user on whose behalf the code is running. + (Informational use only.) The type of authentication used to identify the user. + One of the enumeration values. + + + to indicate that the user is authenticated; otherwise,. + + + + is 0. + -or- + + is duplicated and invalid for impersonation. + + The caller does not have the correct permissions. + -or- + A Win32 error occurred. + + + + Initializes a new instance of the + + class for the user represented by information in a + + stream. + + The object containing the account information for the user. + An object that indicates the stream characteristics. + A + + cannot be serialized across processes. + + The caller does not have the correct permissions. + -or- + A Win32 error occurred. + + + + Initializes a new instance of the + + class by using the specified + + object. + + The object from which to construct the new instance of. + + + + Initializes a new instance of the + + class for the user represented by the specified User Principal Name (UPN). + + The UPN for the user on whose behalf the code is running. + Windows returned the Windows NT status code + STATUS_ACCESS_DENIED. + + There is insufficient memory available. + The caller does not have the correct permissions. + -or- + The computer is not attached to a Windows 2003 or later domain. + -or- + The computer is not running Windows 2003 or later. + -or- + The user is not a member of the domain the computer is attached to. + + + + Gets this + + for this + + instance. + + Returns a. + + + + Gets the type of authentication used to identify the user. + The type of authentication used to identify the user. + Windows returned the Windows NT status code + STATUS_ACCESS_DENIED. + + There is insufficient memory available. + The caller does not have the correct permissions. + -or- + The computer is not attached to a Windows 2003 or later domain. + -or- + The computer is not running Windows 2003 or later. + -or- + The user is not a member of the domain the computer is attached to. + + + + Gets all claims for the user represented by this Windows identity. + A collection of claims for this + + object. + + + + Creates a new object that is a copy of the current instance. + A copy of the current instance. + + + Identifies the name of the default + + issuer. + + + + Gets claims that have the + + property key. + + A collection of claims that have the + + property key. + + + + Releases all resources used by the. + + + + Releases the unmanaged resources used by the + + and optionally releases the managed resources. + + + + to release both managed and unmanaged resources; + + to release only unmanaged resources. + + + + Returns a + + object that you can use as a sentinel value in your code to represent an anonymous user. The property + value does not represent the built-in anonymous identity used by the Windows operating system. + + An object that represents an anonymous user. + + + Returns a + + object that represents the current Windows user. + + An object that represents the current user. + The caller does not have the correct permissions. + + + + Returns a + + object that represents the Windows identity for either the thread or the process, depending on the value + of the + + parameter. + + + + to return the + + only if the thread is currently impersonating; + + to return the + + of the thread if it is impersonating or the + + of the process if the thread is not currently impersonating. + + An object that represents a Windows user. + + + Returns a + + object that represents the current Windows user, using the specified desired token access level. + + A bitwise combination of the enumeration values. + An object that represents the current user. + + + Gets the groups the current Windows user belongs to. + An object representing the groups the current Windows user belongs to. + + + Gets the impersonation level for the user. + One of the enumeration values that specifies the impersonation level. + + + Gets a value that indicates whether the user account is identified as an anonymous account by the + system. + + + + if the user account is an anonymous account; otherwise,. + + + + Gets a value indicating whether the user has been authenticated by Windows. + + + if the user was authenticated; otherwise,. + + + + Gets a value indicating whether the user account is identified as a + + account by the system. + + + + if the user account is a + + account; otherwise,. + + + + Gets a value indicating whether the user account is identified as a + + account by the system. + + + + if the user account is a + + account; otherwise,. + + + + Gets the user's Windows logon name. + The Windows logon name of the user on whose behalf the code is being run. + + + Gets the security identifier (SID) for the token owner. + An object for the token owner. + + + Runs the specified action as the impersonated Windows identity. Instead of using an impersonated + method call and running your function in, you can use + + and provide your function directly as a parameter. + + The SafeAccessTokenHandle of the impersonated Windows identity. + The System.Action to run. + + + Runs the specified function as the impersonated Windows identity. Instead of using an impersonated + method call and running your function in, you can use + + and provide your function directly as a parameter. + + The SafeAccessTokenHandle of the impersonated Windows identity. + The System.Func to run. + The type of object used by and returned by the function. + The result of the function. + + + Implements the + + interface and is called back by the deserialization event when deserialization is complete. + + The source of the deserialization event. + + + Sets the + + object with the logical context information needed to recreate an instance of this execution context. + + An object containing the information required to serialize the. + + An object containing the source and destination of the serialized stream associated + with the. + + + + Gets the Windows account token for the user. + The handle of the access token associated with the current execution thread. + + + Gets the security identifier (SID) for the user. + An object for the user. + + + Gets claims that have the + + property key. + + A collection of claims that have the + + property key. + + + + Enables code to check the Windows group membership of a Windows user. + + + Initializes a new instance of the + + class by using the specified + + object. + + The object from which to construct the new instance of. + + + + is. + + + + Gets all Windows device claims from this principal. + A collection of all Windows device claims from this principal. + + + Gets the identity of the current principal. + The + + object of the current principal. + + + + Determines whether the current principal belongs to the Windows user group with the specified + relative identifier (RID). + + The RID of the Windows user group in which to check for the principal's membership + status. + + + + if the current principal is a member of the specified Windows user group, that is, in a particular role; + otherwise,. + + + + Determines whether the current principal belongs to the Windows user group with the specified + security identifier (SID). + + A + + that uniquely identifies a Windows user group. + + + + if the current principal is a member of the specified Windows user group; otherwise,. + + + + is. + + Windows returned a Win32 error. + + + Determines whether the current principal belongs to the Windows user group with the specified. + + One of the + + values. + + + + if the current principal is a member of the specified Windows user group; otherwise,. + + + + is not a valid + + value. + + + + Determines whether the current principal belongs to the Windows user group with the specified + name. + + The name of the Windows user group for which to check membership. + + + if the current principal is a member of the specified Windows user group; otherwise,. + + + + Gets all Windows user claims from this principal. + A collection of all Windows user claims from this principal. + + + \ No newline at end of file diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.xml.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.xml.meta new file mode 100644 index 00000000..31e19b55 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/lib/netstandard2.0/System.Security.Principal.Windows.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c6c355c400b756023851479dce9ccee1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/useSharedDesignerContext.txt b/Assets/Packages/System.Security.Principal.Windows.4.7.0/useSharedDesignerContext.txt new file mode 100644 index 00000000..e69de29b diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/useSharedDesignerContext.txt.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0/useSharedDesignerContext.txt.meta new file mode 100644 index 00000000..af07929a --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/useSharedDesignerContext.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2d4dc2ae11974ebf68603df2ae53f45c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/version.txt b/Assets/Packages/System.Security.Principal.Windows.4.7.0/version.txt new file mode 100644 index 00000000..f5d54e72 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/version.txt @@ -0,0 +1 @@ +0f7f38c4fd323b26da10cce95f857f77f0f09b48 diff --git a/Assets/Packages/System.Security.Principal.Windows.4.7.0/version.txt.meta b/Assets/Packages/System.Security.Principal.Windows.4.7.0/version.txt.meta new file mode 100644 index 00000000..a1887709 --- /dev/null +++ b/Assets/Packages/System.Security.Principal.Windows.4.7.0/version.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5d3e9494c173db19b96ffe6298773ba9 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index c13ccad1..6ca7c20a 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -377,12 +377,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 843c6bfa00a27d14184145d28d98f33c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 2000 energyDraw: 30 energyProduction: 150 - crew: 7 - crewCapacity: 20 + crewNeeded: 7 + crewQuarters: 20 --- !u!114 &25841634 MonoBehaviour: m_ObjectHideFlags: 0 @@ -829,12 +831,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!1 &92040606 @@ -1050,7 +1054,7 @@ Transform: m_GameObject: {fileID: 116197406} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 4, y: 24, z: 0} + m_LocalPosition: {x: 4, y: 25, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -1068,12 +1072,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a06280dcf2610f340b3409d0824e526a, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 50 energyProduction: 0 - crew: 4 - crewCapacity: 0 + crewNeeded: 3 + crewQuarters: 0 projectilePrefab: {fileID: 5654400622174641897, guid: 31131311ffb51fc42a911f89d07e56a6, type: 3} projectileSpeed: 1500 reloadTime: 1 @@ -1722,12 +1728,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 843c6bfa00a27d14184145d28d98f33c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 2000 energyDraw: 30 energyProduction: 150 - crew: 7 - crewCapacity: 20 + crewNeeded: 7 + crewQuarters: 20 --- !u!1 &185009410 GameObject: m_ObjectHideFlags: 0 @@ -1758,7 +1766,7 @@ Transform: m_GameObject: {fileID: 185009410} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 19, y: -39, z: 0} + m_LocalPosition: {x: 20, y: -39, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -1776,12 +1784,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!114 &185009413 @@ -2213,6 +2223,7 @@ GameObject: - component: {fileID: 292801186} - component: {fileID: 292801184} - component: {fileID: 292801187} + - component: {fileID: 292801188} m_Layer: 6 m_Name: Player m_TagString: Untagged @@ -2288,6 +2299,20 @@ MonoBehaviour: energyProduction: 6 crewCapacity: 3 crew: 2 +--- !u!114 &292801188 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 292801180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 51beb7d3839b46ae91fd236d4f53e511, type: 3} + m_Name: + m_EditorClassIdentifier: Game.Ships::Ships.ShipCrewAssigner + crewMembers: [] + generateMissingCrewMembers: 1 --- !u!1 &323945044 GameObject: m_ObjectHideFlags: 0 @@ -2839,12 +2864,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!28 &341220837 @@ -3566,12 +3593,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 843c6bfa00a27d14184145d28d98f33c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 2000 energyDraw: 30 energyProduction: 150 - crew: 7 - crewCapacity: 20 + crewNeeded: 7 + crewQuarters: 20 --- !u!1 &443114472 GameObject: m_ObjectHideFlags: 0 @@ -4508,7 +4537,8 @@ Transform: m_LocalPosition: {x: 19, y: 1, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 1026511462} m_Father: {fileID: 292801185} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &521192487 @@ -4697,12 +4727,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 21aa0218bee341148b64f7ab86433ad1, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 150 energyProduction: 0 - crew: 5 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 lineRenderer: {fileID: 521192492} beamRange: 200 maxFireDuration: 2 @@ -4711,6 +4743,7 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 961 icon: {fileID: 1865393218821458671, guid: 8f61f8d23847b2d46b2c194f226b8f84, type: 3} + originPoint: {fileID: 1026511462} reloadTime: 5 --- !u!120 &521192492 LineRenderer: @@ -5106,12 +5139,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!1 &558805765 @@ -5509,12 +5544,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a06280dcf2610f340b3409d0824e526a, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 50 energyProduction: 0 - crew: 4 - crewCapacity: 0 + crewNeeded: 4 + crewQuarters: 0 projectilePrefab: {fileID: 5654400622174641897, guid: 31131311ffb51fc42a911f89d07e56a6, type: 3} projectileSpeed: 1500 reloadTime: 1 @@ -5770,12 +5807,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a06280dcf2610f340b3409d0824e526a, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 50 energyProduction: 0 - crew: 4 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 projectilePrefab: {fileID: 5654400622174641897, guid: fbb05823f916f824da20fe66a7de32d4, type: 3} projectileSpeed: 200 reloadTime: 0.2 @@ -6002,12 +6041,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!114 &696995298 @@ -7271,12 +7312,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!1 &938120420 @@ -7679,12 +7722,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!1 &968734700 @@ -7718,6 +7763,37 @@ Transform: m_Children: [] m_Father: {fileID: 1735107390} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1026511461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1026511462} + m_Layer: 6 + m_Name: originPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1026511462 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026511461} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.17, y: -0.52, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 521192485} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1040490545 GameObject: m_ObjectHideFlags: 0 @@ -8224,12 +8300,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a06280dcf2610f340b3409d0824e526a, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 20 energyProduction: 0 - crew: 4 - crewCapacity: 0 + crewNeeded: 4 + crewQuarters: 0 projectilePrefab: {fileID: 5654400622174641897, guid: fbb05823f916f824da20fe66a7de32d4, type: 3} projectileSpeed: 200 reloadTime: 0.2 @@ -8910,12 +8988,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a06280dcf2610f340b3409d0824e526a, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 20 energyProduction: 0 - crew: 4 - crewCapacity: 0 + crewNeeded: 4 + crewQuarters: 0 projectilePrefab: {fileID: 5654400622174641897, guid: fbb05823f916f824da20fe66a7de32d4, type: 3} projectileSpeed: 200 reloadTime: 0.2 @@ -9142,12 +9222,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a06280dcf2610f340b3409d0824e526a, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 20 energyProduction: 0 - crew: 4 - crewCapacity: 0 + crewNeeded: 4 + crewQuarters: 0 projectilePrefab: {fileID: 5654400622174641897, guid: fbb05823f916f824da20fe66a7de32d4, type: 3} projectileSpeed: 200 reloadTime: 0.2 @@ -9584,12 +9666,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a06280dcf2610f340b3409d0824e526a, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 50 energyProduction: 0 - crew: 4 - crewCapacity: 0 + crewNeeded: 4 + crewQuarters: 0 projectilePrefab: {fileID: 5654400622174641897, guid: fbb05823f916f824da20fe66a7de32d4, type: 3} projectileSpeed: 200 reloadTime: 0.2 @@ -10141,12 +10225,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!1 &1383913807 @@ -10945,12 +11031,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 843c6bfa00a27d14184145d28d98f33c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 2000 energyDraw: 30 energyProduction: 200 - crew: 7 - crewCapacity: 20 + crewNeeded: 7 + crewQuarters: 20 --- !u!1 &1492072027 GameObject: m_ObjectHideFlags: 0 @@ -10999,12 +11087,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!114 &1492072030 @@ -12695,12 +12785,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 21aa0218bee341148b64f7ab86433ad1, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 150 energyProduction: 0 - crew: 5 - crewCapacity: 0 + crewNeeded: 5 + crewQuarters: 0 lineRenderer: {fileID: 1689674626} beamRange: 200 maxFireDuration: 2 @@ -12709,6 +12801,7 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 897 icon: {fileID: 1865393218821458671, guid: 8f61f8d23847b2d46b2c194f226b8f84, type: 3} + originPoint: {fileID: 0} reloadTime: 5 --- !u!1 &1735107389 GameObject: @@ -13307,12 +13400,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 843c6bfa00a27d14184145d28d98f33c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 2000 energyDraw: 30 energyProduction: 150 - crew: 7 - crewCapacity: 20 + crewNeeded: 7 + crewQuarters: 20 --- !u!1 &1882781144 GameObject: m_ObjectHideFlags: 0 @@ -13392,12 +13487,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a06280dcf2610f340b3409d0824e526a, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 200 energyDraw: 20 energyProduction: 0 - crew: 4 - crewCapacity: 0 + crewNeeded: 4 + crewQuarters: 0 projectilePrefab: {fileID: 5654400622174641897, guid: fbb05823f916f824da20fe66a7de32d4, type: 3} projectileSpeed: 200 reloadTime: 0.2 @@ -14035,12 +14132,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!1 &1920964441 @@ -14285,12 +14384,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 843c6bfa00a27d14184145d28d98f33c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 2000 energyDraw: 30 energyProduction: 200 - crew: 7 - crewCapacity: 20 + crewNeeded: 3 + crewQuarters: 20 --- !u!1 &1959479948 GameObject: m_ObjectHideFlags: 0 @@ -14425,7 +14526,7 @@ Transform: m_GameObject: {fileID: 1988705646} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -12.8, y: -39, z: 0} + m_LocalPosition: {x: -13, y: -39, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -14620,12 +14721,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!1 &1998466618 @@ -14998,12 +15101,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e58cee17deb728a4da8fdde864b3d57c, type: 3} m_Name: m_EditorClassIdentifier: + mainSkillType: 0 + assignedCrew: [] k__BackingField: energyCapacity: 100 energyDraw: 30 energyProduction: 0 - crew: 2 - crewCapacity: 0 + crewNeeded: 2 + crewQuarters: 0 thrust: 0 maxThrust: 1 --- !u!28 &2049620436 diff --git a/Assets/Scripts/Context/Tests/Game.Context.Tests.asmdef b/Assets/Scripts/Context/Tests/Game.Context.Tests.asmdef index d348dcac..2dd62403 100644 --- a/Assets/Scripts/Context/Tests/Game.Context.Tests.asmdef +++ b/Assets/Scripts/Context/Tests/Game.Context.Tests.asmdef @@ -11,7 +11,9 @@ "allowUnsafeCode": false, "overrideReferences": true, "precompiledReferences": [ - "nunit.framework.dll" + "nunit.framework.dll", + "ZLinq.dll", + "NSubstitute.dll" ], "autoReferenced": false, "defineConstraints": [ diff --git a/Assets/Scripts/Core/Ship/CrewMember.cs b/Assets/Scripts/Core/Ship/CrewMember.cs new file mode 100644 index 00000000..a1b825a5 --- /dev/null +++ b/Assets/Scripts/Core/Ship/CrewMember.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Core.Ship +{ + [Serializable] + public class CrewMember + { + [field: SerializeField] + public bool IsAlive { get; private set; } + + [field: SerializeField] + public string FirstName { get; private set; } + + [field: SerializeField] + public string LastName { get; private set; } + + [field: SerializeField] + public int Age { get; private set; } + + private readonly Dictionary _skills; + + public CrewMember(string firstName, string lastName, int age, + Dictionary skills = null) + { + FirstName = firstName; + LastName = lastName; + Age = age; + _skills = skills ?? new Dictionary(); + IsAlive = true; + } + + public event Action OnDied; + + public int GetSkillLevel(CrewSkillType skillType) + { + return _skills.GetValueOrDefault(skillType, 0); + } + + public void Kill() + { + if (!IsAlive) return; + IsAlive = false; + OnDied?.Invoke(this); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Ship/CrewMember.cs.meta b/Assets/Scripts/Core/Ship/CrewMember.cs.meta new file mode 100644 index 00000000..502e1a20 --- /dev/null +++ b/Assets/Scripts/Core/Ship/CrewMember.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ce9cf34257fd44bdb2f56cc313e265c6 \ No newline at end of file diff --git a/Assets/Scripts/Core/Ship/CrewSkillType.cs b/Assets/Scripts/Core/Ship/CrewSkillType.cs new file mode 100644 index 00000000..63fffcd9 --- /dev/null +++ b/Assets/Scripts/Core/Ship/CrewSkillType.cs @@ -0,0 +1,11 @@ +namespace Core.Ship +{ + public enum CrewSkillType + { + Navigation, + WeaponHandling, + Mechanics, + PowerEngineering, + Captain + } +} diff --git a/Assets/Scripts/Core/Ship/CrewSkillType.cs.meta b/Assets/Scripts/Core/Ship/CrewSkillType.cs.meta new file mode 100644 index 00000000..99ff781f --- /dev/null +++ b/Assets/Scripts/Core/Ship/CrewSkillType.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9c3b1e8269f04f8bb82f287373eaa6d4 \ No newline at end of file diff --git a/Assets/Scripts/Core/Ship/IModule.cs b/Assets/Scripts/Core/Ship/IModule.cs index ba4bd509..a747094c 100644 --- a/Assets/Scripts/Core/Ship/IModule.cs +++ b/Assets/Scripts/Core/Ship/IModule.cs @@ -1,22 +1,28 @@ +using System.Collections.Generic; using Core.Pixelation; using UnityEngine; namespace Core.Ship { - public enum ModuleType - { - Command, - Production, - Storage, - Weapon, - Engine - } - public interface IModule { ModuleType Type { get; } - IPixelatedRigidbody PixelatedRigidbody { get; } Transform Transform { get; } Resources Resources { get; } + float Efficiency { get; } + int CrewNeededCount { get; } + float EnergyCapacity { get; } + IReadOnlyList AssignedCrew { get; } + int CrewMissingCount { get; } + IPixelatedRigidbody PixelatedRigidbody { get; } + int AliveCrewCount { get; } + void FillCrewBySkill(List crew, out List remainingCrew); + bool AssignCrew(CrewMember member); + bool RemoveCrew(CrewMember member); + float GetCrewEfficiency(); + float GetEnergyDraw(); + float GetEnergyProduction(); + void KillAllCrew(); + void KillRandomCrew(int count); } } \ No newline at end of file diff --git a/Assets/Scripts/Core/Ship/IShip.cs b/Assets/Scripts/Core/Ship/IShip.cs index 498da939..8b2dd277 100644 --- a/Assets/Scripts/Core/Ship/IShip.cs +++ b/Assets/Scripts/Core/Ship/IShip.cs @@ -1,4 +1,5 @@ using Core.Gameplay.EasyTeam; +using LM.Graph; using UnityEngine; namespace Core.Ship @@ -8,6 +9,11 @@ public interface IShip ITeam Team { get; } IModule CommandModule { get; } Collider2D[] OwnColliders { get; } + float GeneralEfficiency { get; } + Graph ModuleGraph { get; } + Vector2 AttackTargetPosition { get; } + float CaptainMultiplier { get; } Vector2 GetPosition(); + void OnModuleDestroyed(IModule module); } } \ No newline at end of file diff --git a/Assets/Scripts/Core/Ship/ModuleType.cs b/Assets/Scripts/Core/Ship/ModuleType.cs new file mode 100644 index 00000000..370fe5c4 --- /dev/null +++ b/Assets/Scripts/Core/Ship/ModuleType.cs @@ -0,0 +1,11 @@ +namespace Core.Ship +{ + public enum ModuleType + { + Command, + Production, + Storage, + Weapon, + Engine + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Ship/ModuleType.cs.meta b/Assets/Scripts/Core/Ship/ModuleType.cs.meta new file mode 100644 index 00000000..cdc58128 --- /dev/null +++ b/Assets/Scripts/Core/Ship/ModuleType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1942556bc2db4e8eae0f623337e07ca4 +timeCreated: 1772219761 \ No newline at end of file diff --git a/Assets/Scripts/Core/Ship/Resources.cs b/Assets/Scripts/Core/Ship/Resources.cs index e7e3f210..04d0ccbc 100644 --- a/Assets/Scripts/Core/Ship/Resources.cs +++ b/Assets/Scripts/Core/Ship/Resources.cs @@ -9,17 +9,18 @@ public struct Resources public float energyDraw; public float energyProduction; - public int crew; - public int crewCapacity; + public int crewNeeded; + public int crewQuarters; - public Resources(float energyCapacity, float energyDraw, int crew, float energyProduction, int crewCapacity) + public Resources(float energyCapacity, float energyDraw, int crewNeeded, float energyProduction, + int crewQuarters) { this.energyCapacity = energyCapacity; this.energyDraw = energyDraw; this.energyProduction = energyProduction; - this.crew = crew; - this.crewCapacity = crewCapacity; + this.crewNeeded = crewNeeded; + this.crewQuarters = crewQuarters; } } } \ No newline at end of file diff --git a/Assets/Scripts/Core/Tests/CrewMemberTests.cs b/Assets/Scripts/Core/Tests/CrewMemberTests.cs new file mode 100644 index 00000000..0065f7c8 --- /dev/null +++ b/Assets/Scripts/Core/Tests/CrewMemberTests.cs @@ -0,0 +1,94 @@ +using System.Collections.Generic; +using Core.Ship; +using NUnit.Framework; + +namespace Core.Tests +{ + [TestFixture] + public class CrewMemberTests + { + [Test] + public void CrewMember_HasCorrectNameAndAge() + { + var crew = new CrewMember("Jane", "Doe", 30); + + Assert.AreEqual("Jane", crew.FirstName); + Assert.AreEqual("Doe", crew.LastName); + Assert.AreEqual(30, crew.Age); + } + + [Test] + public void CrewMember_IsAliveByDefault() + { + var crew = new CrewMember("John", "Smith", 25); + + Assert.IsTrue(crew.IsAlive); + } + + [Test] + public void Kill_SetsIsAliveToFalse() + { + var crew = new CrewMember("John", "Smith", 25); + + crew.Kill(); + + Assert.IsFalse(crew.IsAlive); + } + + [Test] + public void Kill_FiresOnDiedEvent() + { + var crew = new CrewMember("John", "Smith", 25); + CrewMember diedMember = null; + crew.OnDied += m => diedMember = m; + + crew.Kill(); + + Assert.AreSame(crew, diedMember); + } + + [Test] + public void Kill_CalledTwice_OnDiedFiredOnce() + { + var crew = new CrewMember("John", "Smith", 25); + var count = 0; + crew.OnDied += _ => count++; + + crew.Kill(); + crew.Kill(); + + Assert.AreEqual(1, count); + } + + [Test] + public void GetSkillLevel_ReturnsCorrectLevel() + { + var skills = new Dictionary + { + { CrewSkillType.Navigation, 5 }, + { CrewSkillType.Captain, 3 } + }; + var crew = new CrewMember("Ana", "Nova", 28, skills); + + Assert.AreEqual(5, crew.GetSkillLevel(CrewSkillType.Navigation)); + Assert.AreEqual(3, crew.GetSkillLevel(CrewSkillType.Captain)); + } + + [Test] + public void GetSkillLevel_UnsetSkill_ReturnsZero() + { + var crew = new CrewMember("Ana", "Nova", 28); + + Assert.AreEqual(0, crew.GetSkillLevel(CrewSkillType.WeaponHandling)); + } + + [Test] + public void CrewMember_NoSkillsDictionary_AllSkillsZero() + { + var crew = new CrewMember("Bob", "Ray", 40); + + foreach (CrewSkillType skill in System.Enum.GetValues(typeof(CrewSkillType))) + Assert.AreEqual(0, crew.GetSkillLevel(skill)); + } + } +} diff --git a/Assets/Scripts/Core/Tests/CrewMemberTests.cs.meta b/Assets/Scripts/Core/Tests/CrewMemberTests.cs.meta new file mode 100644 index 00000000..69f27119 --- /dev/null +++ b/Assets/Scripts/Core/Tests/CrewMemberTests.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 03c14f57a8c64ef19fdb121b563db1a3 \ No newline at end of file diff --git a/Assets/Scripts/Core/Tests/Game.Core.Tests.asmdef b/Assets/Scripts/Core/Tests/Game.Core.Tests.asmdef index 0de07f78..b26dff06 100644 --- a/Assets/Scripts/Core/Tests/Game.Core.Tests.asmdef +++ b/Assets/Scripts/Core/Tests/Game.Core.Tests.asmdef @@ -10,7 +10,9 @@ "allowUnsafeCode": false, "overrideReferences": true, "precompiledReferences": [ - "nunit.framework.dll" + "nunit.framework.dll", + "ZLinq.dll", + "NSubstitute.dll" ], "autoReferenced": false, "defineConstraints": [ diff --git a/Assets/Scripts/Events/Tests/Game.Events.Tests.asmdef b/Assets/Scripts/Events/Tests/Game.Events.Tests.asmdef index 2de6aaa6..94072b4e 100644 --- a/Assets/Scripts/Events/Tests/Game.Events.Tests.asmdef +++ b/Assets/Scripts/Events/Tests/Game.Events.Tests.asmdef @@ -11,7 +11,9 @@ "allowUnsafeCode": false, "overrideReferences": true, "precompiledReferences": [ - "nunit.framework.dll" + "nunit.framework.dll", + "ZLinq.dll", + "NSubstitute.dll" ], "autoReferenced": false, "defineConstraints": [ diff --git a/Assets/Scripts/Gameplay/Tests/Game.Gameplay.Tests.asmdef b/Assets/Scripts/Gameplay/Tests/Game.Gameplay.Tests.asmdef index f9da48a0..d383fa22 100644 --- a/Assets/Scripts/Gameplay/Tests/Game.Gameplay.Tests.asmdef +++ b/Assets/Scripts/Gameplay/Tests/Game.Gameplay.Tests.asmdef @@ -4,14 +4,17 @@ "references": [ "GUID:3453562d1089a90fc973630db854c59c", "GUID:27619889b8ba8c24980f49ee34dbb44a", - "GUID:24173525d8afb24ad9153261c706727e" + "GUID:24173525d8afb24ad9153261c706727e", + "GUID:b588e3e7a964822d3a9d587848dfd885" ], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": false, "overrideReferences": true, "precompiledReferences": [ - "nunit.framework.dll" + "nunit.framework.dll", + "ZLinq.dll", + "NSubstitute.dll" ], "autoReferenced": false, "defineConstraints": [ diff --git a/Assets/Scripts/Gameplay/Tests/Navigation/NavigationCalculatorTests.cs b/Assets/Scripts/Gameplay/Tests/Navigation/NavigationCalculatorTests.cs index 0013a427..0e228265 100644 --- a/Assets/Scripts/Gameplay/Tests/Navigation/NavigationCalculatorTests.cs +++ b/Assets/Scripts/Gameplay/Tests/Navigation/NavigationCalculatorTests.cs @@ -1,9 +1,8 @@ -using System; using System.Collections.Generic; -using Core.Gameplay.EasyTeam; using Core.Services; using Core.Ship; using Gameplay.Navigation; +using NSubstitute; using NUnit.Framework; using UnityEngine; @@ -42,18 +41,6 @@ SectorResult ShipAwareQuery(Vector2 sector, IShip _, IShip __) } } - private class FakeShip : IShip - { - public ITeam Team => null; - public IModule CommandModule => null; - public Collider2D[] OwnColliders => Array.Empty(); - - public Vector2 GetPosition() - { - return Vector2.zero; - } - } - [Test] public void NormalizePositionToSector_SnapsToSectorOrigin() { @@ -113,7 +100,7 @@ public void CalculatePath_ClearHorizontalCorridor_ReturnsNonNullPath() } [Test] - public void CalculatePath_AllNeighboursBlocked_ReturnsNull() + public void CalculatePath_AllNeighborsBlocked_ReturnsNull() { var blocked = new HashSet { @@ -130,7 +117,7 @@ public void CalculatePath_AllNeighboursBlocked_ReturnsNull() } [Test] - public void CalculatePath_AllNeighboursBlockedIfShipBig_ReturnsNull() + public void CalculatePath_AllNeighborsBlockedIfShipBig_ReturnsNull() { const float twoSectorsAway = SectorSize * 2; var blocked = new HashSet @@ -196,11 +183,11 @@ public void CalculatePath_DoesNotIncludeStartSector() public void CalculatePath_LargeShip_OnlyOneCorridor_StillFindsPath() { // Ship size = 2 * SectorSize → footprintRadius = 2, so navigability checks a 3×3 block of sectors. - // Block three of the four cardinal neighbours by placing an obstacle inside each of their 3×3 footprints + // Block three of the four cardinal neighbors by placing an obstacle inside each of their 3×3 footprints // without touching the right-hand corridor (neighbor at (+SectorSize, 0)). - // Left neighbour footprint contains (-2S, 0) → block it - // Up neighbour footprint contains (0, +2S) → block it - // Down neighbour footprint contains (0, -2S) → block it + // Left neighbor footprint contains (-2S, 0) → block it + // Up neighbor footprint contains (0, +2S) → block it + // Down neighbor footprint contains (0, -2S) → block it var blocked = new HashSet { new(-2 * SectorSize, 0f), @@ -240,12 +227,12 @@ public void CalculatePath_LargeShip_AllCorridorsBlocked_ReturnsNull() [Test] public void CalculatePath_ShipAware_ThirdShipWithDebrisBlocksPath() { - var callerShip = new FakeShip(); - var targetShip = new FakeShip(); - var thirdShip = new FakeShip(); + var callerShip = Substitute.For(); + var targetShip = Substitute.For(); + var thirdShip = Substitute.For(); // Sectors contain a third ship AND debris — both conditions independently block, together they definitely block - var allNeighbours = new Dictionary + var allNeighbors = new Dictionary { { new Vector2(SectorSize, 0f), new SectorResult(false, true, 0f, new[] { thirdShip }) }, { new Vector2(-SectorSize, 0f), new SectorResult(false, true, 0f, new[] { thirdShip }) }, @@ -255,50 +242,50 @@ public void CalculatePath_ShipAware_ThirdShipWithDebrisBlocksPath() var calculator = new NavigationCalculator(SectorSize, _ => SectorResult.Empty, - (sector, _, _) => allNeighbours.TryGetValue(sector, out var r) ? r : SectorResult.Empty); + (sector, _, _) => allNeighbors.TryGetValue(sector, out var r) ? r : SectorResult.Empty); var path = calculator.CalculatePath( new Vector3(5f, 5f), new Vector3(50f, 50f), 5, callerShip, targetShip); - Assert.IsNull(path, "Expected no path when all neighbouring sectors have both a third ship and debris"); + Assert.IsNull(path, "Expected no path when all neighboring sectors have both a third ship and debris"); } [Test] public void CalculatePath_ShipAware_ThirdShipInSectorBlocksPath() { - var callerShip = new FakeShip(); - var targetShip = new FakeShip(); - var thirdShip = new FakeShip(); + var callerShip = Substitute.For(); + var targetShip = Substitute.For(); + var thirdShip = Substitute.For(); // Place the third ship in the only direct route sector (0, SectorSize) // With only one neighbor available and it is blocked by a third ship, // surround start sector so every escape route contains the third ship - var allNeighbours = new Dictionary> + var allNeighbors = new Dictionary> { { new Vector2(SectorSize, 0f), new[] { thirdShip } }, { new Vector2(-SectorSize, 0f), new[] { thirdShip } }, { new Vector2(0f, SectorSize), new[] { thirdShip } }, { new Vector2(0f, -SectorSize), new[] { thirdShip } } }; - var blockedCalculator = BuildCalculatorWithShipAwareness(allNeighbours); + var blockedCalculator = BuildCalculatorWithShipAwareness(allNeighbors); var path = blockedCalculator.CalculatePath( new Vector3(5f, 5f), new Vector3(50f, 50f), 5, callerShip, targetShip); - Assert.IsNull(path, "Expected no path when all neighbouring sectors contain a third ship"); + Assert.IsNull(path, "Expected no path when all neighboring sectors contain a third ship"); } [Test] public void CalculatePath_ShipAware_CallerAndTargetShipsDoNotBlockPath() { - var callerShip = new FakeShip(); - var targetShip = new FakeShip(); + var callerShip = Substitute.For(); + var targetShip = Substitute.For(); // The only route forward (0, SectorSize) contains just the caller and target ships — must be passable var directRouteSector = new Vector2(0f, SectorSize); var shipsPerSector = new Dictionary> { - { directRouteSector, new IShip[] { callerShip, targetShip } } + { directRouteSector, new[] { callerShip, targetShip } } }; var calculator = BuildCalculatorWithShipAwareness(shipsPerSector); diff --git a/Assets/Scripts/LM/MathExt.cs b/Assets/Scripts/LM/MathExt.cs index 59cf9869..ca87e771 100644 --- a/Assets/Scripts/LM/MathExt.cs +++ b/Assets/Scripts/LM/MathExt.cs @@ -10,21 +10,11 @@ public static float AngleBetweenTwoPoints(Vector3 a, Vector3 b) return Mathf.Atan2(a.y - b.y, a.x - b.x) * Mathf.Rad2Deg; } - public static float SquaredDistance(Vector2 a, Vector2 b) - { - return Mathf.Pow(a.x - b.x, 2) + Mathf.Pow(a.y - b.y, 2); - } - public static float SimpleDistance(Vector2 a, Vector2 b) { return Mathf.Abs(a.x - b.x) + Mathf.Abs(a.y - b.y); } - public static int ClampInt(int value, int min, int max) - { - return Mathf.Min(Mathf.Max(min, value), max); - } - public static T RandomFrom(List list) { if (list == null || list.Count == 0) @@ -49,12 +39,41 @@ public static T RandomFrom(List list, T defaultReturn) public static T RandomFrom(T[] array) { - if (array == null || array.Length == 0) return default; + if (array == null || array.Length == 0) + { +#if UNITY_EDITOR + Debug.LogWarning("The list is empty or null. Returning default value."); +#endif + return default; + } var randomIndex = Random.Range(0, array.Length); return array[randomIndex]; } + /// + /// Randomly selects an element from the specified list, removes that element from the list, and returns it. + /// + /// + /// The element that was removed from the list, or default(T) if the list is null or contains no + /// elements. + /// + public static T RandomPullFrom(List list) + { + if (list == null || list.Count == 0) + { + Debug.LogWarning("The list is empty or null. Returning default value."); + return default; + } + + var randomIndex = Random.Range(0, list.Count); + + var value = list[randomIndex]; + + list.RemoveAt(randomIndex); + return value; + } + public static List FindGridIntersections(Vector2 aLineStart, Vector2 aDir, float aDistance) { var aResult = new List(); @@ -129,9 +148,15 @@ public static float Angle360(float angle) // angle between -90 and 90 symmetrical public static float AngleSym180(float angle) { - if (angle > 90) - angle -= (angle - 90) * 2; - else if (angle < -90) angle += (angle + 90) * 2; + switch (angle) + { + case > 90: + angle -= (angle - 90) * 2; + break; + case < -90: + angle += (angle + 90) * 2; + break; + } return angle; } @@ -158,5 +183,27 @@ public static void Shuffle(this IList list) (list[n], list[k]) = (list[k], list[n]); } } + + public static Vector2[] GetTriangleApexes(float sideLength) + { + var halfSideLength = sideLength / 2; + var triangleHeight = halfSideLength * Mathf.Sqrt(3); + + var triangleCenter = new Vector2(0, triangleHeight / 2); + var triangleBias = new Vector2(0, triangleHeight / 3) - triangleCenter; + + var vertexA = triangleBias + new Vector2(0, 2 * triangleHeight / 3); + var vertexB = triangleBias + new Vector2(-sideLength / 2, -triangleHeight / 3); + var vertexC = triangleBias + new Vector2(sideLength / 2, -triangleHeight / 3); + + Vector2[] vertices = { vertexA, vertexB, vertexC }; + + return vertices; + } + + public static int RandomInclusive(int x, int y) + { + return Random.Range(x, y + 1); + } } } \ No newline at end of file diff --git a/Assets/Scripts/Pixelation/Tests/Game.Pixelation.Tests.asmdef b/Assets/Scripts/Pixelation/Tests/Game.Pixelation.Tests.asmdef index 3a03fb91..5d91d8fc 100644 --- a/Assets/Scripts/Pixelation/Tests/Game.Pixelation.Tests.asmdef +++ b/Assets/Scripts/Pixelation/Tests/Game.Pixelation.Tests.asmdef @@ -11,7 +11,9 @@ "allowUnsafeCode": false, "overrideReferences": true, "precompiledReferences": [ - "nunit.framework.dll" + "nunit.framework.dll", + "ZLinq.dll", + "NSubstitute.dll" ], "autoReferenced": false, "defineConstraints": [ diff --git a/Assets/Scripts/Services/Tests/Game.Services.Tests.asmdef b/Assets/Scripts/Services/Tests/Game.Services.Tests.asmdef index bcf9b162..49e0c553 100644 --- a/Assets/Scripts/Services/Tests/Game.Services.Tests.asmdef +++ b/Assets/Scripts/Services/Tests/Game.Services.Tests.asmdef @@ -4,14 +4,17 @@ "references": [ "GUID:06792acb7c5af21edb53be64c5595512", "GUID:27619889b8ba8c24980f49ee34dbb44a", - "GUID:24173525d8afb24ad9153261c706727e" + "GUID:24173525d8afb24ad9153261c706727e", + "GUID:b588e3e7a964822d3a9d587848dfd885" ], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": false, "overrideReferences": true, "precompiledReferences": [ - "nunit.framework.dll" + "nunit.framework.dll", + "ZLinq.dll", + "NSubstitute.dll" ], "autoReferenced": false, "defineConstraints": [ diff --git a/Assets/Scripts/Services/Tests/ShipServiceTests.cs b/Assets/Scripts/Services/Tests/ShipServiceTests.cs index a7f90422..c0049ed7 100644 --- a/Assets/Scripts/Services/Tests/ShipServiceTests.cs +++ b/Assets/Scripts/Services/Tests/ShipServiceTests.cs @@ -1,8 +1,8 @@ -using System; using System.Collections.Generic; using System.Linq; using Core.Gameplay.EasyTeam; using Core.Ship; +using NSubstitute; using NUnit.Framework; using UnityEngine; using Object = UnityEngine.Object; @@ -41,10 +41,18 @@ public void GetShips_ReturnsEmpty_WhenNoShipsRegistered() Assert.AreEqual(0, _shipService.GetShips().Count); } + private static IShip CreateMockShip(ITeam team, Vector2 position) + { + var ship = Substitute.For(); + ship.Team.Returns(team); + ship.GetPosition().Returns(position); + return ship; + } + [Test] public void RegisterShip_AddsShip_ToGetShips() { - var ship = new FakeShip(_teamA, Vector2.zero); + var ship = CreateMockShip(_teamA, Vector2.zero); _shipService.RegisterShip(ship); @@ -55,7 +63,7 @@ public void RegisterShip_AddsShip_ToGetShips() [Test] public void UnregisterShip_RemovesShip_FromGetShips() { - var ship = new FakeShip(_teamA, Vector2.zero); + var ship = CreateMockShip(_teamA, Vector2.zero); _shipService.RegisterShip(ship); _shipService.UnregisterShip(ship); @@ -66,8 +74,8 @@ public void UnregisterShip_RemovesShip_FromGetShips() [Test] public void GetShipsOfTeam_ReturnsOnlyShipsOnThatTeam() { - var shipA = new FakeShip(_teamA, Vector2.zero); - var shipB = new FakeShip(_teamB, Vector2.zero); + var shipA = CreateMockShip(_teamA, Vector2.zero); + var shipB = CreateMockShip(_teamB, Vector2.zero); _shipService.RegisterShip(shipA); _shipService.RegisterShip(shipB); @@ -80,8 +88,8 @@ public void GetShipsOfTeam_ReturnsOnlyShipsOnThatTeam() [Test] public void GetEnemyShipsOf_ReturnsOnlyEnemyShips() { - var shipA = new FakeShip(_teamA, Vector2.zero); - var shipB = new FakeShip(_teamB, Vector2.zero); + var shipA = CreateMockShip(_teamA, Vector2.zero); + var shipB = CreateMockShip(_teamB, Vector2.zero); _shipService.RegisterShip(shipA); _shipService.RegisterShip(shipB); @@ -94,8 +102,8 @@ public void GetEnemyShipsOf_ReturnsOnlyEnemyShips() [Test] public void GetAlliedShipsOf_ReturnsSelf_AndAllies() { - var shipA = new FakeShip(_teamA, Vector2.zero); - var shipB = new FakeShip(_teamB, Vector2.zero); + var shipA = CreateMockShip(_teamA, Vector2.zero); + var shipB = CreateMockShip(_teamB, Vector2.zero); _shipService.RegisterShip(shipA); _shipService.RegisterShip(shipB); @@ -108,8 +116,8 @@ public void GetAlliedShipsOf_ReturnsSelf_AndAllies() [Test] public void GetAlliedShipsOf_ReturnsSelf_AndAlliesTeams() { - var shipA = new FakeShip(_teamA, Vector2.zero); - var shipB = new FakeShip(_teamB, Vector2.zero); + var shipA = CreateMockShip(_teamA, Vector2.zero); + var shipB = CreateMockShip(_teamB, Vector2.zero); _shipService.RegisterShip(shipA); _shipService.RegisterShip(shipB); @@ -124,8 +132,8 @@ public void GetAlliedShipsOf_ReturnsSelf_AndAlliesTeams() [Test] public void GetClosestEnemyShipOf_ReturnsClosestEnemy() { - var nearEnemy = new FakeShip(_teamB, new Vector2(5f, 0f)); - var farEnemy = new FakeShip(_teamB, new Vector2(100f, 0f)); + var nearEnemy = CreateMockShip(_teamB, new Vector2(5f, 0f)); + var farEnemy = CreateMockShip(_teamB, new Vector2(100f, 0f)); _shipService.RegisterShip(nearEnemy); _shipService.RegisterShip(farEnemy); @@ -137,7 +145,7 @@ public void GetClosestEnemyShipOf_ReturnsClosestEnemy() [Test] public void GetClosestEnemyShipOf_ReturnsNull_WhenNoEnemies() { - var ally = new FakeShip(_teamA, new Vector2(5f, 0f)); + var ally = CreateMockShip(_teamA, new Vector2(5f, 0f)); _shipService.RegisterShip(ally); var closest = _shipService.GetClosestEnemyShipOf(_teamA, Vector2.zero); @@ -148,7 +156,7 @@ public void GetClosestEnemyShipOf_ReturnsNull_WhenNoEnemies() [Test] public void RegisterShip_CalledTwice_DoesNotDuplicate() { - var ship = new FakeShip(_teamA, Vector2.zero); + var ship = CreateMockShip(_teamA, Vector2.zero); _shipService.RegisterShip(ship); _shipService.RegisterShip(ship); @@ -156,26 +164,6 @@ public void RegisterShip_CalledTwice_DoesNotDuplicate() Assert.AreEqual(1, _shipService.GetShips().Count); } - private class FakeShip : IShip - { - private readonly Vector2 _position; - - public FakeShip(ITeam team, Vector2 position) - { - Team = team; - _position = position; - } - - public ITeam Team { get; } - public IModule CommandModule => null; - public Collider2D[] OwnColliders => Array.Empty(); - - public Vector2 GetPosition() - { - return _position; - } - } - private class FakeTeam : ITeam { private readonly List _allies = new(); diff --git a/Assets/Scripts/Ships/Internal/ResourceManager.cs b/Assets/Scripts/Ships/Internal/ResourceManager.cs index a1a40957..8b4a3df6 100644 --- a/Assets/Scripts/Ships/Internal/ResourceManager.cs +++ b/Assets/Scripts/Ships/Internal/ResourceManager.cs @@ -24,7 +24,7 @@ public class ResourceManager : MonoBehaviour public int Crew => crew; public int CrewCapacity => crewCapacity; - public void Recalculate(List modules) + public void Recalculate(IReadOnlyList modules) { energyCapacity = 0; energyDraw = 0; @@ -35,12 +35,12 @@ public void Recalculate(List modules) foreach (var module in modules) { - energyCapacity += module.GetEnergyCapacity(); + energyCapacity += module.EnergyCapacity; energyDraw += module.GetEnergyDraw(); energyProduction += module.GetEnergyProduction(); - crewCapacity += module.GetCrewCapacity(); - crew += module.GetCrewCount(); + crewCapacity += module.CrewNeededCount; + crew += module.AliveCrewCount; } } diff --git a/Assets/Scripts/Ships/Modules/Cannon.cs b/Assets/Scripts/Ships/Modules/Cannon.cs index 738f52e9..ad2f481d 100644 --- a/Assets/Scripts/Ships/Modules/Cannon.cs +++ b/Assets/Scripts/Ships/Modules/Cannon.cs @@ -57,7 +57,7 @@ private void OnDestroy() public void Shoot() { if (!_reloadTimer.IsReady) return; - if (!Ship) return; + if (Ship == null) return; var targetPosition = Ship.AttackTargetPosition; diff --git a/Assets/Scripts/Ships/Modules/Command.cs b/Assets/Scripts/Ships/Modules/Command.cs index bf887c15..ef8f8e94 100644 --- a/Assets/Scripts/Ships/Modules/Command.cs +++ b/Assets/Scripts/Ships/Modules/Command.cs @@ -1,4 +1,5 @@ using Core.Ship; +using ZLinq; namespace Ships.Modules { @@ -9,5 +10,13 @@ protected override void Awake() base.Awake(); Type = ModuleType.Command; } + + public override float GetCrewEfficiency() + { + var captainTotal = AliveCrew.AsValueEnumerable() + .Sum(crew => crew.GetSkillLevel(CrewSkillType.Captain)); + + return 1f + captainTotal * CaptainBonusPerLevel; + } } } \ No newline at end of file diff --git a/Assets/Scripts/Ships/Modules/Laser.cs b/Assets/Scripts/Ships/Modules/Laser.cs index 40e93483..172107d8 100644 --- a/Assets/Scripts/Ships/Modules/Laser.cs +++ b/Assets/Scripts/Ships/Modules/Laser.cs @@ -6,6 +6,7 @@ using LM; using Pixelation; using UnityEngine; +using ZLinq; using Random = UnityEngine.Random; namespace Ships.Modules @@ -28,11 +29,14 @@ public class LaserBeam : Module, IWeapon [SerializeField] private GameObject icon; + [SerializeField] private Transform originPoint; + [Header("Weapon Base Settings")] [SerializeField] private float reloadTime = 2.0f; private CancellationTokenSource _fireCts; + private readonly RaycastHit2D[] _hits = new RaycastHit2D[100]; private bool _isFiring; private ManualTimer _reloadTimer; @@ -138,6 +142,26 @@ private void StopFiringCleanup() _fireCts = null; } + private RaycastHit2D RaycastIgnoringOwnColliders(Vector2 origin, Vector2 direction) + { + var size = Physics2D.RaycastNonAlloc(origin, direction, _hits, beamRange, hitLayers); + var ownColliders = Ship?.OwnColliders; + + for (var index = 0; index < Mathf.Min(size, _hits.Length); index++) + { + var hit = _hits[index]; + if (ownColliders == null || !IsOwnCollider(hit.collider, ownColliders)) + return hit; + } + + return default; + } + + private static bool IsOwnCollider(Collider2D collider, Collider2D[] ownColliders) + { + return ownColliders.AsValueEnumerable().Any(own => own == collider); + } + private async UniTask FireBeamUpdateAsync(CancellationToken token) { var timeRemaining = maxFireDuration * ShipModuleEfficiency; @@ -148,13 +172,13 @@ private async UniTask FireBeamUpdateAsync(CancellationToken token) timeRemaining -= Time.deltaTime; var attackPosition = GameInput.WorldPointerPosition; - Vector2 origin = transform.position; + Vector2 origin = originPoint.position; var direction = (attackPosition - origin).normalized; var endPoint = origin + direction * beamRange; lineRenderer.SetPosition(0, origin); - var hit = Physics2D.Raycast(origin, direction, beamRange, hitLayers); + var hit = RaycastIgnoringOwnColliders(origin, direction); if (hit.collider) { diff --git a/Assets/Scripts/Ships/Modules/Module.cs b/Assets/Scripts/Ships/Modules/Module.cs index 70c0a100..9a59a000 100644 --- a/Assets/Scripts/Ships/Modules/Module.cs +++ b/Assets/Scripts/Ships/Modules/Module.cs @@ -1,39 +1,55 @@ +using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using Core.Pixelation; using Core.Ship; +using LM; using Pixelation; using UnityEngine; using ZLinq; using Resources = Core.Ship.Resources; [assembly: InternalsVisibleTo("Game.Editor.InspectorExtensions")] +[assembly: InternalsVisibleTo("Game.Ships.Tests")] namespace Ships.Modules { [RequireComponent(typeof(PixelatedRigidbody))] public class Module : MonoBehaviour, IModule { + private const float CrewSkillBonusPerLevel = 0.02f; + protected const float CaptainBonusPerLevel = 0.05f; + + [SerializeField] private CrewSkillType mainSkillType; + + [SerializeField] + private List assignedCrew = new(); + private readonly Dictionary> _connectionPoints = new(); private readonly Dictionary _connections = new(); - protected Ship Ship { get; private set; } + private float _crewAppropriateSkillSum; + + protected List AliveCrew { get; private set; } + + internal CrewSkillType MainSkillTypeForTesting + { + set => mainSkillType = value; + } - /// - /// Gets a read-only view of connection points to other modules. - /// Used for serialization and testing. - /// - public IReadOnlyDictionary> ConnectionPoints => _connectionPoints; + protected IShip Ship { get; set; } - protected float Efficiency => Mathf.Pow( - (float)PixelatedRigidbody.CurrentPixelCount / PixelatedRigidbody.StartPixelCount, - 2); + internal IReadOnlyDictionary> ConnectionPoints => _connectionPoints; protected float ShipModuleEfficiency => Ship.GeneralEfficiency * Efficiency; + private float PixelEfficiency => + Mathf.Pow((float)PixelatedRigidbody.CurrentPixelCount / PixelatedRigidbody.StartPixelCount, 2); + protected virtual void Awake() { PixelatedRigidbody = GetComponent(); + OnCrewChange(); } private void Start() @@ -48,6 +64,8 @@ private void OnDestroy() { if (PixelatedRigidbody != null) PixelatedRigidbody.OnPixelsLost -= CheckCohesion; + KillAllCrew(); + Ship?.OnModuleDestroyed(this); } @@ -70,6 +88,16 @@ private void OnDrawGizmosSelected() } } + + public int AliveCrewCount => AliveCrew.Count; + + public virtual float EnergyCapacity => Resources.energyCapacity * Efficiency; + + public float Efficiency => PixelEfficiency * GetCrewEfficiency(); + + public IReadOnlyList AssignedCrew => assignedCrew; + public int CrewMissingCount => Mathf.Max(0, CrewNeededCount - AliveCrewCount); + [field: SerializeField] public Resources Resources { get; private set; } @@ -78,20 +106,51 @@ private void OnDrawGizmosSelected() public Transform Transform => transform; public ModuleType Type { get; protected set; } + public virtual int CrewNeededCount => Mathf.CeilToInt(Resources.crewNeeded); - public virtual int GetCrewCount() + public void FillCrewBySkill(List crew, out List remainingCrew) { - return Mathf.FloorToInt(Resources.crew * Efficiency); + if (crew == null) throw new ArgumentNullException(nameof(crew)); + + var membersOrderBySkill = crew.AsValueEnumerable().OrderByDescending(c => c.GetSkillLevel(mainSkillType)); + + var crewToAssign = membersOrderBySkill.Take(CrewMissingCount).ToList(); + + foreach (var crewMember in crewToAssign) + AssignCrew(crewMember); + + remainingCrew = membersOrderBySkill.Skip(crewToAssign.Count).ToList(); } - public virtual int GetCrewCapacity() + public bool AssignCrew(CrewMember member) { - return Mathf.FloorToInt(Resources.crewCapacity * Efficiency); + if (member == null) throw new ArgumentNullException(nameof(member)); + if (assignedCrew.Contains(member)) return false; + + assignedCrew.Add(member); + OnCrewChange(); + + member.OnDied += HandleCrewMemberDeath; + + return true; + } + + public bool RemoveCrew(CrewMember member) + { + var crewRemoved = assignedCrew.Remove(member); + if (crewRemoved) + UnsubscribeCrew(member); + OnCrewChange(); + return crewRemoved; } - public virtual float GetEnergyCapacity() + public virtual float GetCrewEfficiency() { - return Resources.energyCapacity * Efficiency; + if (CrewNeededCount == 0) return 1; + if (assignedCrew.Count == 0) return 0; + + return (1 - (float)CrewMissingCount / CrewNeededCount) * + (1 + _crewAppropriateSkillSum * Ship.CaptainMultiplier * CrewSkillBonusPerLevel); } public virtual float GetEnergyDraw() @@ -104,6 +163,44 @@ public virtual float GetEnergyProduction() return Resources.energyProduction * Efficiency; } + public void KillAllCrew() + { + foreach (var crew in assignedCrew) KillCrewMember(crew); + assignedCrew.Clear(); + + OnCrewChange(); + } + + public void KillRandomCrew(int count) + { + AliveCrew.Shuffle(); + + for (var i = 0; i < count && AliveCrew.Count > 0; i++) + { + var crewToKill = AliveCrew[0]; + KillCrewMember(crewToKill); + OnCrewChange(); + } + } + + private void HandleCrewMemberDeath(CrewMember member) + { + UnsubscribeCrew(member); + OnCrewChange(); + } + + private void UnsubscribeCrew(CrewMember member) + { + member.OnDied -= HandleCrewMemberDeath; + } + + private void KillCrewMember(CrewMember crewToKill) + { + UnsubscribeCrew(crewToKill); + crewToKill.Kill(); + OnCrewChange(); + } + public void Setup(Ship ship) { Ship = ship; @@ -123,6 +220,13 @@ public void SetupConnections(Module otherModule, ref FixedJoint2D joint) return; } + if (PixelatedRigidbody.PixelGrid == null || otherModule.PixelatedRigidbody.PixelGrid == null) + { + Debug.LogError( + $"Cannot SetupConnections: PixelGrid not initialized on '{name}' or '{otherModule.name}'!", this); + return; + } + var otherPixelatedRigidbody = otherModule.PixelatedRigidbody; var overlappingPoints = @@ -198,6 +302,12 @@ private void DetachConnections(Module otherModule) Ship.ModuleGraph.RemoveEdge(this, otherModule); } + private void OnCrewChange() + { + AliveCrew = assignedCrew.AsValueEnumerable().Where(crew => crew.IsAlive).ToList(); + _crewAppropriateSkillSum = AliveCrew.AsValueEnumerable().Sum(crew => crew.GetSkillLevel(mainSkillType)); + } + public void SetResources(Resources newResources) { Resources = newResources; diff --git a/Assets/Scripts/Ships/Ship.cs b/Assets/Scripts/Ships/Ship.cs index 71c25995..39ee683f 100644 --- a/Assets/Scripts/Ships/Ship.cs +++ b/Assets/Scripts/Ships/Ship.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.CompilerServices; using Core.Gameplay.Combat; using Core.Gameplay.EasyTeam; @@ -28,15 +29,18 @@ public class Ship : MonoBehaviour, IShip [SerializeField] private Team team; + private readonly List _allModulesCache = new(); + // ReSharper disable once CollectionNeverUpdated.Local private readonly DefaultDictionary> _modulesDictionary = new(() => new List()); private BiCohesionGraph _biCohesionGraph; - private Action _onCommandModuleNoPixelsLeft; [Inject] private IMapInfo _mapInfo; + private Action _onCommandModuleNoPixelsLeft; + [Inject] protected IShipService ShipService; @@ -45,14 +49,7 @@ internal ModuleConnectionFactory ModuleConnectionFactoryForTesting set => moduleConnectionFactory = value; } - private List AllModules => - ModuleGraph.GetAllNodes().AsValueEnumerable().OfType().ToList(); - - public float GeneralEfficiency => Math.Max(0.01f, ResourceManager.EnergyEfficiency); - - public Graph ModuleGraph => _biCohesionGraph; - - public Vector2 AttackTargetPosition { get; protected set; } + private IReadOnlyList AllModules => _allModulesCache; public List Weapons => _modulesDictionary[ModuleType.Weapon].AsValueEnumerable().Cast().ToList(); @@ -62,6 +59,9 @@ internal ModuleConnectionFactory ModuleConnectionFactoryForTesting public ResourceManager ResourceManager { get; private set; } + public int CrewMissingCount => + ModuleGraph.GetAllNodes().AsValueEnumerable().Sum(module => module.CrewMissingCount); + private void Awake() { CommandModule ??= GetComponentInChildren(); @@ -110,15 +110,23 @@ private void OnDestroy() CommandModule.PixelatedRigidbody.OnNoPixelsLeft -= _onCommandModuleNoPixelsLeft; } + public float GeneralEfficiency => Math.Max(0.01f, ResourceManager.EnergyEfficiency); + + public Graph ModuleGraph => _biCohesionGraph; + + public Vector2 AttackTargetPosition { get; protected set; } + + public float CaptainMultiplier => CommandModule.GetCrewEfficiency(); + public ITeam Team { get => team; private set => team = value as Team; } - public IModule CommandModule { get; internal set; } + public IModule CommandModule { get; private set; } - public Collider2D[] OwnColliders { get; private set; } = Array.Empty(); + public Collider2D[] OwnColliders { get; set; } = Array.Empty(); public Vector2 GetPosition() { @@ -126,6 +134,16 @@ public Vector2 GetPosition() return rb.LocalToWorldPoint(rb.WeightedCenter); } + public void OnModuleDestroyed(IModule module) + { + if (module == null) return; + + Debug.Log($"[Ship] Module destroyed: {module.Transform.name}", module.Transform); + + _biCohesionGraph.RemoveNode(module); + RecacheModulesDictionary(); + } + private async UniTaskVoid UpdateResourcesLoop() { var updateResourcesTimer = new SimpleTimer(UpdateResourcesTimer); @@ -139,16 +157,6 @@ private async UniTaskVoid UpdateResourcesLoop() } } - public void OnModuleDestroyed(IModule module) - { - if (module == null) return; - - Debug.Log($"[Ship] Module destroyed: {module.Transform.name}", module.Transform); - - _biCohesionGraph.RemoveNode(module); - RecacheModulesDictionary(); - } - private void HandleUnreachableModules(List unreachableModules) { Debug.Log( @@ -171,12 +179,18 @@ private void HandleUnreachableModules(List unreachableModules) private void RecacheModulesDictionary() { _modulesDictionary.Clear(); + _allModulesCache.Clear(); - foreach (var module in ModuleGraph.GetAllNodes()) _modulesDictionary[module.Type].Add(module as Module); + foreach (var module in ModuleGraph.GetAllNodes()) + { + var mod = module as Module; + _modulesDictionary[module.Type].Add(mod); + _allModulesCache.Add(mod); + } OwnColliders = GetComponentsInChildren(); - ResourceManager.Recalculate(AllModules); + ResourceManager.Recalculate(_allModulesCache); } internal void ReinitializeModules() @@ -222,6 +236,17 @@ public void StopShooting() weapon.StopShooting(); } + public void AssignCrewBySkill(IEnumerable crew) + { + var crewList = crew.ToList(); + + foreach (var module in ModuleGraph.GetAllNodes()) + { + module.FillCrewBySkill(crewList, out var remainingCrew); + crewList = remainingCrew.ToList(); + } + } + protected void MarkEnginesActivity(bool active) { foreach (var engine in Engines) diff --git a/Assets/Scripts/Ships/Ship.cs.meta b/Assets/Scripts/Ships/Ship.cs.meta index 4e4127eb..9e65d9cd 100644 --- a/Assets/Scripts/Ships/Ship.cs.meta +++ b/Assets/Scripts/Ships/Ship.cs.meta @@ -4,7 +4,7 @@ MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] - executionOrder: 10100 + executionOrder: -1 icon: {instanceID: 0} userData: assetBundleName: diff --git a/Assets/Scripts/Ships/ShipCrewAssigner.cs b/Assets/Scripts/Ships/ShipCrewAssigner.cs new file mode 100644 index 00000000..343e8d49 --- /dev/null +++ b/Assets/Scripts/Ships/ShipCrewAssigner.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using Core.Ship; +using LM; +using UnityEngine; +using Random = UnityEngine.Random; + +// ReSharper disable StringLiteralTypo + +namespace Ships +{ + [RequireComponent(typeof(Ship))] + public class ShipCrewAssigner : MonoBehaviour + { + [SerializeField] private List crewMembers = new(); + + [SerializeField] + private bool generateMissingCrewMembers = true; + + private readonly string[] _firstNames = + { + "John", "Jane", "Alex", "Emily", "Michael", "Sarah", "David", "Laura", "Chris", "Anna", "James", "Olivia", + "Robert", "Sophia", "Daniel", "Isabella", "Mark", "Mia", "Paul", "Amelia", "Andrew", "Charlotte", "Steven", + "Evelyn", "Kevin", "Abigail", "Brian", "Madison", "Jason", "Elizabeth", "Sara", "Mikołaj" + }; + + private readonly string[] _lastNames = + { + "Smith", "Johnson", "Brown", "Taylor", "Anderson", "Thomas", "Jackson", "White", "Harris", "Martin", + "Thompson", "Garcia", "Martinez", "Robinson", "Clark", "Rodriguez", "Lewis", "Lee", "Walker", + "Hall", "Allen", "Young", "King", "Wright", "Scott", "Green", "Bibska", "Kubś" + }; + + private Ship _ship; + + private void Awake() + { + _ship = GetComponent(); + } + + private void Start() + { + if (generateMissingCrewMembers) GenerateMissingCrewMembers(); + _ship.AssignCrewBySkill(crewMembers); + } + + private void GenerateMissingCrewMembers() + { + var missingCrewToGenerate = _ship.CrewMissingCount - crewMembers.Count; + for (var i = 0; i < missingCrewToGenerate; i++) + crewMembers.Add(new CrewMember( + MathExt.RandomFrom(_firstNames), MathExt.RandomFrom(_lastNames), + Random.Range(20, 50), + GenerateSkills())); + } + + private static Dictionary GenerateSkills() + { + var skills = new Dictionary(); + + foreach (CrewSkillType skillType in Enum.GetValues(typeof(CrewSkillType))) + skills[skillType] = Random.Range(0, 5); + + return skills; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Ships/ShipCrewAssigner.cs.meta b/Assets/Scripts/Ships/ShipCrewAssigner.cs.meta new file mode 100644 index 00000000..ad424302 --- /dev/null +++ b/Assets/Scripts/Ships/ShipCrewAssigner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51beb7d3839b46ae91fd236d4f53e511 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 10300 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Ships/Tests/CrewModuleTests.cs b/Assets/Scripts/Ships/Tests/CrewModuleTests.cs new file mode 100644 index 00000000..9af01ef1 --- /dev/null +++ b/Assets/Scripts/Ships/Tests/CrewModuleTests.cs @@ -0,0 +1,649 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using Core.Ship; +using NSubstitute; +using NUnit.Framework; +using Pixelation; +using Ships.Tests.TestHelpers; +using UnityEngine; +using UnityEngine.TestTools; +using Zenject; +using ZLinq; +using Object = UnityEngine.Object; +using Resources = Core.Ship.Resources; + +namespace Ships.Tests +{ + [TestFixture] + public class CrewModuleTests + { + [SetUp] + public void SetUp() + { + _createdObjects = new List(); + _testRoot = new GameObject("TestRoot"); + _container = TestContainerFactory.CreateTestContainer(_testRoot.transform); + } + + [TearDown] + public void TearDown() + { + foreach (var obj in _createdObjects.AsValueEnumerable().Where(obj => obj != null)) + Object.DestroyImmediate(obj); + + if (_testRoot != null) + Object.DestroyImmediate(_testRoot); + } + + private DiContainer _container; + private GameObject _testRoot; + private List _createdObjects; + + private TestModule CreateStandaloneModule( + int crewNeeded = 3, + CrewSkillType mainSkill = CrewSkillType.Navigation, + float shipCaptainMultiplier = 1f + ) + { + var go = new GameObject("Module"); + _createdObjects.Add(go); + + go.AddComponent(); + var rb = go.AddComponent(); + rb.bodyType = RigidbodyType2D.Dynamic; + rb.gravityScale = 0f; + go.AddComponent(); + + var pxRb = go.AddComponent(); + _container.Inject(pxRb); + + var colors = new Color32[5, 5]; + var solid = new Color32(100, 100, 100, 255); + for (var x = 0; x < 5; x++) + for (var y = 0; y < 5; y++) + colors[x, y] = solid; + pxRb.SetTextureFromColors(colors); + + var module = go.AddComponent(); + module.SetModuleType(ModuleType.Production); + module.SetMainSkillType(mainSkill); + module.SetResources(new Resources(0, 0, crewNeeded, 0, 0)); + + var ship = Substitute.For(); + ship.CaptainMultiplier.Returns(shipCaptainMultiplier); + module.SetShip(ship); + + return module; + } + + private static CrewMember MakeCrew(string first = "John", string last = "Doe", int age = 30, + Dictionary skills = null) + { + return new CrewMember(first, last, age, skills); + } + + private static Delegate GetOnDiedDelegate(CrewMember crew) + { + var field = typeof(CrewMember).GetField("OnDied", BindingFlags.Instance | BindingFlags.NonPublic); + return field?.GetValue(crew) as Delegate; + } + + [Test] + public void AssignCrew_ReturnsTrue() + { + var module = CreateStandaloneModule(); + var crew = MakeCrew(); + + var result = module.AssignCrew(crew); + + Assert.IsTrue(result); + Assert.AreEqual(1, module.AssignedCrew.Count); + } + + [Test] + public void AssignCrew_BeyondCrewNeeded_StillSucceeds() + { + var module = CreateStandaloneModule(1); + module.AssignCrew(MakeCrew("A", "A", 20)); + + var overflow = MakeCrew("B", "B", 21); + var result = module.AssignCrew(overflow); + + Assert.IsTrue(result); + Assert.AreEqual(2, module.AssignedCrew.Count); + } + + [Test] + public void AssignCrew_SameMemberTwice_ReturnsFalse() + { + var module = CreateStandaloneModule(); + var crew = MakeCrew(); + + module.AssignCrew(crew); + var result = module.AssignCrew(crew); + + Assert.IsFalse(result); + Assert.AreEqual(1, module.AssignedCrew.Count); + } + + [Test] + public void AssignCrew_NullMember_ThrowsArgumentNullException() + { + var module = CreateStandaloneModule(); + + Assert.Throws(() => module.AssignCrew(null)); + } + + [Test] + public void RemoveCrew_ExistingMember_ReturnsTrue() + { + var module = CreateStandaloneModule(); + var crew = MakeCrew(); + module.AssignCrew(crew); + + var result = module.RemoveCrew(crew); + + Assert.IsTrue(result); + Assert.AreEqual(0, module.AssignedCrew.Count); + } + + [Test] + public void RemoveCrew_NonExistingMember_ReturnsFalse() + { + var module = CreateStandaloneModule(); + var crew = MakeCrew(); + + var result = module.RemoveCrew(crew); + + Assert.IsFalse(result); + } + + [Test] + public void CrewMissingCount_NoCrewAssigned_EqualsCrewNeeded() + { + var module = CreateStandaloneModule(); + + Assert.AreEqual(3, module.CrewMissingCount); + } + + [Test] + public void CrewMissingCount_PartiallyFilled_ReturnsDeficit() + { + var module = CreateStandaloneModule(); + module.AssignCrew(MakeCrew()); + + Assert.AreEqual(2, module.CrewMissingCount); + } + + [Test] + public void CrewMissingCount_FullyFilled_ReturnsZero() + { + var module = CreateStandaloneModule(2); + module.AssignCrew(MakeCrew("A", "A")); + module.AssignCrew(MakeCrew("B", "B")); + + Assert.AreEqual(0, module.CrewMissingCount); + } + + [Test] + public void CrewMissingCount_OverFilled_ReturnsNegative() + { + var module = CreateStandaloneModule(1); + module.AssignCrew(MakeCrew("A", "A")); + module.AssignCrew(MakeCrew("B", "B")); + module.AssignCrew(MakeCrew("C", "C")); + + Assert.AreEqual(0, module.CrewMissingCount); + } + + [Test] + public void CrewMissingCount_ZeroCrewNeeded_ReturnsZeroWhenCrewAssigned() + { + var module = CreateStandaloneModule(0); + module.AssignCrew(MakeCrew()); + + Assert.AreEqual(0, module.CrewMissingCount); + } + + [Test] + public void FillCrewBySkill_AssignsBestSkilledFirst() + { + var module = CreateStandaloneModule(2); + + var lowSkill = MakeCrew("Low", "Skill", 25, + new Dictionary { { CrewSkillType.Navigation, 1 } }); + var highSkill = MakeCrew("High", "Skill", 30, + new Dictionary { { CrewSkillType.Navigation, 10 } }); + var midSkill = MakeCrew("Mid", "Skill", 28, + new Dictionary { { CrewSkillType.Navigation, 5 } }); + var topSkill = MakeCrew("Top", "Skill", 35, + new Dictionary { { CrewSkillType.Navigation, 15 } }); + + var crew = new List { lowSkill, highSkill, midSkill, topSkill }; + + module.FillCrewBySkill(crew, out var remaining); + + Assert.AreEqual(2, module.AssignedCrew.Count); + Assert.Contains(topSkill, (ICollection)module.AssignedCrew); + Assert.Contains(highSkill, (ICollection)module.AssignedCrew); + Assert.AreEqual(2, remaining.Count); + Assert.Contains(midSkill, remaining); + Assert.Contains(lowSkill, remaining); + } + + [Test] + public void FillCrewBySkill_MoreCrewThanNeeded_OnlyAssignsNeededCount() + { + var module = CreateStandaloneModule(2, CrewSkillType.Mechanics); + + var crew = new List(); + for (var i = 0; i < 10; i++) + crew.Add(MakeCrew($"Crew{i}", "Member", 20 + i, + new Dictionary { { CrewSkillType.Mechanics, i } })); + + module.FillCrewBySkill(crew, out var remaining); + + Assert.AreEqual(2, module.AssignedCrew.Count); + Assert.AreEqual(8, remaining.Count); + } + + [Test] + public void FillCrewBySkill_FewerCrewThanNeeded_AssignsAllAvailable() + { + var module = CreateStandaloneModule(5); + var onlyCrew = MakeCrew("Only", "One", 25); + + module.FillCrewBySkill(new List { onlyCrew }, out var remaining); + + Assert.AreEqual(1, module.AssignedCrew.Count); + Assert.Contains(onlyCrew, (ICollection)module.AssignedCrew); + Assert.AreEqual(0, remaining.Count); + } + + [Test] + public void FillCrewBySkill_EmptyList_AssignsNone() + { + var module = CreateStandaloneModule(); + + module.FillCrewBySkill(new List(), out var remaining); + + Assert.AreEqual(0, module.AssignedCrew.Count); + Assert.AreEqual(0, remaining.Count); + } + + [Test] + public void FillCrewBySkill_NullList_ThrowsArgumentNullException() + { + var module = CreateStandaloneModule(); + + Assert.Throws(() => module.FillCrewBySkill(null, out _)); + } + + [Test] + public void FillCrewBySkill_AlreadyFullModule_AssignsNone() + { + var module = CreateStandaloneModule(2); + module.AssignCrew(MakeCrew("A", "A")); + module.AssignCrew(MakeCrew("B", "B")); + + var extraCrew = new List { MakeCrew("C", "C"), MakeCrew("D", "D") }; + module.FillCrewBySkill(extraCrew, out var remaining); + + Assert.AreEqual(2, module.AssignedCrew.Count); + Assert.AreEqual(2, remaining.Count); + } + + [Test] + public void FillCrewBySkill_DoesNotAssignDuplicates() + { + var module = CreateStandaloneModule(); + var existingCrew = MakeCrew("Existing", "Crew", 30, + new Dictionary { { CrewSkillType.Navigation, 10 } }); + module.AssignCrew(existingCrew); + + var newCrew = MakeCrew("New", "Crew", 25, + new Dictionary { { CrewSkillType.Navigation, 5 } }); + var crew = new List { existingCrew, newCrew }; + + module.FillCrewBySkill(crew, out _); + + Assert.AreEqual(2, module.AssignedCrew.Count); + Assert.Contains(existingCrew, (ICollection)module.AssignedCrew); + Assert.Contains(newCrew, (ICollection)module.AssignedCrew); + } + + [Test] + public void GetCrewBonus_NoCrewAssigned_ReturnsZero() + { + var module = CreateStandaloneModule(); + + Assert.AreEqual(0f, module.GetCrewEfficiency()); + } + + [Test] + public void GetCrewBonus_UsesMainSkillType() + { + var module = CreateStandaloneModule(mainSkill: CrewSkillType.Mechanics); + var skills = new Dictionary + { + { CrewSkillType.Navigation, 10 }, + { CrewSkillType.Mechanics, 0 } + }; + module.AssignCrew(MakeCrew("Nav", "Expert", 35, skills)); + + // fillRatio = 1 - 2/3 = 1/3, skillTotal(Mechanics) = 0 + // result = 1/3 * (1 + 0) = 1/3 + Assert.AreEqual(1f / 3f, module.GetCrewEfficiency(), 0.0001f); + } + + [Test] + public void GetCrewBonus_MatchingSkill_ReturnsPositiveBonus() + { + var module = CreateStandaloneModule(mainSkill: CrewSkillType.Navigation); + var skills = new Dictionary { { CrewSkillType.Navigation, 5 } }; + module.AssignCrew(MakeCrew("Nav", "Expert", 35, skills)); + + var bonus = module.GetCrewEfficiency(); + + Assert.Greater(bonus, 0f); + } + + [Test] + public void GetCrewBonus_CalculatesCorrectValue() + { + var module = CreateStandaloneModule(mainSkill: CrewSkillType.Navigation); + var skills = new Dictionary { { CrewSkillType.Navigation, 5 } }; + module.AssignCrew(MakeCrew("Nav", "Pro", 30, skills)); + + // fillRatio = 1 - 2/3 = 1/3, skillTotal=5, captainMultiplier=1.0 + // bonus = 1/3 * (1 + 5 * 1.0 * 0.02) = 1/3 * 1.1 ≈ 0.3667 + var bonus = module.GetCrewEfficiency(); + + Assert.AreEqual(1f / 3f * 1.1f, bonus, 0.0001f); + } + + [Test] + public void GetCrewBonus_MultipleCrew_SumsSkillLevels() + { + var module = CreateStandaloneModule(mainSkill: CrewSkillType.WeaponHandling); + module.AssignCrew(MakeCrew("A", "A", 25, + new Dictionary { { CrewSkillType.WeaponHandling, 3 } })); + module.AssignCrew(MakeCrew("B", "B", 30, + new Dictionary { { CrewSkillType.WeaponHandling, 7 } })); + + // fillRatio = 1 - 1/3 = 2/3, skillTotal=10, captainMultiplier=1.0 + // bonus = 2/3 * (1 + 10 * 1.0 * 0.02) = 2/3 * 1.2 = 0.8 + var bonus = module.GetCrewEfficiency(); + + Assert.AreEqual(2f / 3f * 1.2f, bonus, 0.0001f); + } + + [Test] + public void GetCrewBonus_CaptainOnly_NoBonusWhenNoMainSkill() + { + var module = CreateStandaloneModule(mainSkill: CrewSkillType.Mechanics); + var captainOnlySkills = new Dictionary + { + { CrewSkillType.Captain, 10 } + }; + module.AssignCrew(MakeCrew("Cap", "Only", 40, captainOnlySkills)); + + // fillRatio = 1/3, skillTotal(Mechanics)=0, captainMultiplier=1+10*0.05=1.5 + // result = 1/3 * (1 + 0) = 1/3 + Assert.AreEqual(1f / 3f, module.GetCrewEfficiency(), 0.0001f); + } + + [Test] + public void GetCrewBonus_CaptainAmplifies_ComparedToNoCaptain() + { + var moduleShitCaptain = + CreateStandaloneModule(mainSkill: CrewSkillType.Navigation, shipCaptainMultiplier: .5f); + var moduleGreatCaptain = + CreateStandaloneModule(mainSkill: CrewSkillType.Navigation, shipCaptainMultiplier: 2f); + + var plainSkills = new Dictionary { { CrewSkillType.Navigation, 4 } }; + var captainSkills = new Dictionary + { + { CrewSkillType.Navigation, 4 }, + { CrewSkillType.Captain, 5 } + }; + + moduleShitCaptain.AssignCrew(MakeCrew("Nav", "Plain", 30, plainSkills)); + moduleGreatCaptain.AssignCrew(MakeCrew("Nav", "Cap", 30, captainSkills)); + + Assert.Greater(moduleGreatCaptain.GetCrewEfficiency(), moduleShitCaptain.GetCrewEfficiency()); + } + + [Test] + public void Efficiency_FullPixels_NoCrewExpected_EqualsOne() + { + var module = CreateStandaloneModule(0); + + Assert.AreEqual(1f, module.Efficiency, 0.0001f); + } + + + [Test] + public void Efficiency_FullPixels_CrewExpected_EqualsZero() + { + var module = CreateStandaloneModule(1); + + Assert.AreEqual(0f, module.Efficiency, 0.0001f); + } + + + [Test] + public void Efficiency_FullPixels_WithCrew_IncludesCrewBonus() + { + var module = CreateStandaloneModule(1); + var skills = new Dictionary { { CrewSkillType.Navigation, 5 } }; + module.AssignCrew(MakeCrew("Nav", "Expert", 30, skills)); + + // fillRatio = 1, GetCrewMultiplier = 1 * (1 + 5 * 1.0 * 0.02) = 1.1, efficiency = 1.0 * 1.1 = 1.1 + Assert.AreEqual(1.1f, module.Efficiency, 0.0001f); + } + + [UnityTest] + public IEnumerator DestroyModule_KillsAssignedCrew() + { + var module = CreateStandaloneModule(); + var crew1 = MakeCrew("Alice", "A", 25); + var crew2 = MakeCrew("Bob", "B"); + module.AssignCrew(crew1); + module.AssignCrew(crew2); + + yield return null; + + Object.DestroyImmediate(module.gameObject); + + yield return null; + + Assert.IsFalse(crew1.IsAlive, "crew1 should be dead after module destruction"); + Assert.IsFalse(crew2.IsAlive, "crew2 should be dead after module destruction"); + } + + [UnityTest] + public IEnumerator DestroyModule_WithNoCrew_DoesNotThrow() + { + var module = CreateStandaloneModule(); + + yield return null; + + Assert.DoesNotThrow(() => Object.DestroyImmediate(module.gameObject)); + + yield return null; + } + + [UnityTest] + public IEnumerator DestroyModule_FiresOnDiedEventForEachCrewMember() + { + var module = CreateStandaloneModule(); + var crew1 = MakeCrew("Alice", "A", 25); + var crew2 = MakeCrew("Bob", "B"); + module.AssignCrew(crew1); + module.AssignCrew(crew2); + + var diedMembers = new List(); + crew1.OnDied += member => diedMembers.Add(member); + crew2.OnDied += member => diedMembers.Add(member); + + yield return null; + + Object.DestroyImmediate(module.gameObject); + + yield return null; + + Assert.AreEqual(2, diedMembers.Count); + Assert.Contains(crew1, diedMembers); + Assert.Contains(crew2, diedMembers); + } + + [Test] + public void GetCrewNeededCount_ReturnsResourcesCrewNeeded() + { + var module = CreateStandaloneModule(5); + + Assert.AreEqual(5, module.CrewNeededCount); + } + + [Test] + public void GetCrewNeededCount_ZeroCrewNeeded_ReturnsZero() + { + var module = CreateStandaloneModule(0); + + Assert.AreEqual(0, module.CrewNeededCount); + } + + [Test] + public void EfficiencyGoesDown_AsCrewDies() + { + const int crewCount = 10; + + var module = CreateStandaloneModule(crewCount); + + var crew = new List(); + for (var i = 0; i < crewCount; i++) + { + var crewMember = MakeCrew($"Crew{i}", "Member", 20 + i, + new Dictionary { { CrewSkillType.Navigation, i } }); + crew.Add(crewMember); + module.AssignCrew(crewMember); + } + + var previousEfficiency = module.Efficiency; + for (var i = 0; i < crewCount / 2; i++) + { + crew[i].Kill(); + var currentEfficiency = module.Efficiency; + Assert.Less(currentEfficiency, previousEfficiency, + $"Efficiency should decrease after crew member {crew[i].FirstName} dies"); + previousEfficiency = currentEfficiency; + } + + for (var i = crewCount / 2; i < crewCount; i++) + { + module.KillRandomCrew(1); + var currentEfficiency = module.Efficiency; + Assert.Less(currentEfficiency, previousEfficiency, + $"Efficiency should decrease after crew member {crew[i].FirstName} dies"); + previousEfficiency = currentEfficiency; + } + + Assert.AreEqual(previousEfficiency, 0f, 0.0001f, + "Efficiency should be zero after all crew members are dead"); + } + + [Test] + public void KillAllCrew_KillsAllAssignedCrew() + { + var module = CreateStandaloneModule(); + var crew1 = MakeCrew("Alice", "A", 25); + var crew2 = MakeCrew("Bob", "B"); + var crew3 = MakeCrew("Charlie", "C", 35); + module.AssignCrew(crew1); + module.AssignCrew(crew2); + module.AssignCrew(crew3); + + module.KillAllCrew(); + + Assert.IsFalse(crew1.IsAlive); + Assert.IsFalse(crew2.IsAlive); + Assert.IsFalse(crew3.IsAlive); + Assert.AreEqual(0, module.AliveCrewCount); + } + + [Test] + public void KillAllCrew_DoesNotLeakOnDiedSubscription() + { + var module = CreateStandaloneModule(); + var crew = MakeCrew("Alice", "A", 25); + module.AssignCrew(crew); + + module.KillAllCrew(); + + Assert.IsNull(GetOnDiedDelegate(crew), + "Module should have unsubscribed from OnDied after KillAllCrew"); + } + + [Test] + public void KillRandomCrew_KillsSpecifiedCount() + { + var module = CreateStandaloneModule(5); + for (var i = 0; i < 5; i++) + module.AssignCrew(MakeCrew($"Crew{i}", "M", 20 + i)); + + module.KillRandomCrew(2); + + Assert.AreEqual(3, module.AliveCrewCount); + } + + [Test] + public void KillRandomCrew_MoreThanAvailable_KillsAll() + { + var module = CreateStandaloneModule(); + var crew1 = MakeCrew("A", "A", 20); + var crew2 = MakeCrew("B", "B", 25); + module.AssignCrew(crew1); + module.AssignCrew(crew2); + + module.KillRandomCrew(10); + + Assert.IsFalse(crew1.IsAlive); + Assert.IsFalse(crew2.IsAlive); + Assert.AreEqual(0, module.AliveCrewCount); + } + + [Test] + public void RemoveCrew_DoesNotLeakOnDiedSubscription() + { + var module = CreateStandaloneModule(); + var crew = MakeCrew("Alice", "A", 25); + module.AssignCrew(crew); + + module.RemoveCrew(crew); + + Assert.IsNull(GetOnDiedDelegate(crew), + "Module should have unsubscribed from OnDied after RemoveCrew"); + } + + [Test] + public void KillRandomCrew_DoesNotLeakOnDiedSubscription() + { + var module = CreateStandaloneModule(); + var crew1 = MakeCrew("A", "A", 20); + var crew2 = MakeCrew("B", "B", 25); + var crew3 = MakeCrew("C", "C"); + module.AssignCrew(crew1); + module.AssignCrew(crew2); + module.AssignCrew(crew3); + + module.KillRandomCrew(3); + + Assert.IsNull(GetOnDiedDelegate(crew1), "crew1 OnDied should have no subscribers"); + Assert.IsNull(GetOnDiedDelegate(crew2), "crew2 OnDied should have no subscribers"); + Assert.IsNull(GetOnDiedDelegate(crew3), "crew3 OnDied should have no subscribers"); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Ships/Tests/CrewModuleTests.cs.meta b/Assets/Scripts/Ships/Tests/CrewModuleTests.cs.meta new file mode 100644 index 00000000..d76b0c90 --- /dev/null +++ b/Assets/Scripts/Ships/Tests/CrewModuleTests.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e347e7e8db3b4f8895fd5cb018f3d801 \ No newline at end of file diff --git a/Assets/Scripts/Ships/Tests/Game.Ships.Tests.asmdef b/Assets/Scripts/Ships/Tests/Game.Ships.Tests.asmdef index 94a5db40..bd7cc52b 100644 --- a/Assets/Scripts/Ships/Tests/Game.Ships.Tests.asmdef +++ b/Assets/Scripts/Ships/Tests/Game.Ships.Tests.asmdef @@ -19,7 +19,8 @@ "overrideReferences": true, "precompiledReferences": [ "nunit.framework.dll", - "ZLinq.dll" + "ZLinq.dll", + "NSubstitute.dll" ], "autoReferenced": false, "defineConstraints": [ diff --git a/Assets/Scripts/Ships/Tests/ShipCrewAssignmentTests.cs b/Assets/Scripts/Ships/Tests/ShipCrewAssignmentTests.cs new file mode 100644 index 00000000..33377d70 --- /dev/null +++ b/Assets/Scripts/Ships/Tests/ShipCrewAssignmentTests.cs @@ -0,0 +1,266 @@ +using System.Collections; +using System.Collections.Generic; +using Core.Ship; +using NUnit.Framework; +using Pixelation; +using Ships.Internal; +using Ships.Modules; +using Ships.Tests.TestHelpers; +using UnityEngine; +using UnityEngine.TestTools; +using Zenject; +using ZLinq; +using Resources = Core.Ship.Resources; + +namespace Ships.Tests +{ + [TestFixture] + public class ShipCrewAssignmentTests + { + [SetUp] + public void SetUp() + { + _createdObjects = new List(); + _testRoot = new GameObject("TestRoot"); + _container = TestContainerFactory.CreateTestContainer(_testRoot.transform); + } + + [TearDown] + public void TearDown() + { + foreach (var obj in _createdObjects) + if (obj != null) + Object.DestroyImmediate(obj); + + if (_testRoot != null) + Object.DestroyImmediate(_testRoot); + } + + private DiContainer _container; + private GameObject _testRoot; + private List _createdObjects; + + private Ship CreateShipWithModules(params (int crewNeeded, CrewSkillType mainSkill)[] moduleConfigs) + { + var shipGo = CreateGameObject("TestShip"); + + CreateModule("Command", shipGo.transform, Vector2.zero, 5, 5, true, 0, CrewSkillType.Navigation); + + for (var i = 0; i < moduleConfigs.Length; i++) + { + var config = moduleConfigs[i]; + CreateModule($"Module{i}", shipGo.transform, + new Vector2(5 * (i + 1), 0), 5, 5, false, + config.crewNeeded, config.mainSkill); + } + + var connectionFactory = shipGo.AddComponent(); + shipGo.AddComponent(); + + shipGo.SetActive(false); + var ship = shipGo.AddComponent(); + _container.Inject(ship); + ship.ModuleConnectionFactoryForTesting = connectionFactory; + shipGo.SetActive(true); + + return ship; + } + + private void CreateModule(string name, Transform parent, Vector2 localPosition, + int width, int height, bool isCommand, int crewNeeded, CrewSkillType mainSkill) + { + var moduleGo = CreateGameObject(name); + moduleGo.transform.SetParent(parent); + moduleGo.transform.localPosition = localPosition; + + moduleGo.AddComponent(); + var rigidbody = moduleGo.AddComponent(); + rigidbody.bodyType = RigidbodyType2D.Dynamic; + rigidbody.gravityScale = 0f; + moduleGo.AddComponent(); + + var pixelatedRb = moduleGo.AddComponent(); + _container.Inject(pixelatedRb); + + Module module; + if (isCommand) + { + module = moduleGo.AddComponent(); + } + else + { + var testModule = moduleGo.AddComponent(); + testModule.SetModuleType(ModuleType.Production); + testModule.SetMainSkillType(mainSkill); + module = testModule; + } + + var colors = new Color32[width, height]; + var solid = new Color32(100, 100, 100, 255); + for (var x = 0; x < width; x++) + for (var y = 0; y < height; y++) + colors[x, y] = solid; + pixelatedRb.SetTextureFromColors(colors); + + module.SetResources(new Resources(0, 0, crewNeeded, 0, 0)); + } + + private GameObject CreateGameObject(string name) + { + var go = new GameObject(name); + _createdObjects.Add(go); + return go; + } + + private static CrewMember MakeCrew(string first = "John", string last = "Doe", int age = 30, + Dictionary skills = null) + { + return new CrewMember(first, last, age, skills); + } + + private IEnumerator WaitForStart() + { + yield return null; + yield return null; + } + + [UnityTest] + public IEnumerator AssignCrewRandomly_DistributesCrewAcrossModules() + { + var ship = CreateShipWithModules( + (crewNeeded: 2, mainSkill: CrewSkillType.Navigation), + (crewNeeded: 2, mainSkill: CrewSkillType.Mechanics)); + yield return WaitForStart(); + + var crew = new List(); + for (var i = 0; i < 4; i++) + crew.Add(MakeCrew($"Crew{i}", "Member", 25 + i)); + + ship.AssignCrewBySkill(crew); + + var totalAssigned = ship.ModuleGraph.GetAllNodes().AsValueEnumerable() + .Sum(m => m.AliveCrewCount); + Assert.AreEqual(4, totalAssigned); + } + + [UnityTest] + public IEnumerator AssignCrewRandomly_EmptyCrew_NoAssignment() + { + var ship = CreateShipWithModules( + (crewNeeded: 3, mainSkill: CrewSkillType.Navigation)); + yield return WaitForStart(); + + ship.AssignCrewBySkill(new List()); + + var totalAssigned = ship.ModuleGraph.GetAllNodes().AsValueEnumerable() + .Sum(m => m.AliveCrewCount); + Assert.AreEqual(0, totalAssigned); + } + + [UnityTest] + public IEnumerator AssignCrewRandomly_ExcessCrew_OnlyAssignsNeeded() + { + var ship = CreateShipWithModules( + (crewNeeded: 1, mainSkill: CrewSkillType.Navigation), + (crewNeeded: 1, mainSkill: CrewSkillType.Mechanics)); + yield return WaitForStart(); + + var crew = new List(); + for (var i = 0; i < 10; i++) + crew.Add(MakeCrew($"Crew{i}", "Member", 20 + i)); + + ship.AssignCrewBySkill(crew); + + var totalNeeded = ship.ModuleGraph.GetAllNodes().AsValueEnumerable() + .Sum(m => m.CrewNeededCount); + var totalAssigned = ship.ModuleGraph.GetAllNodes().AsValueEnumerable() + .Sum(m => m.AliveCrewCount); + Assert.AreEqual(totalNeeded, totalAssigned); + } + + [UnityTest] + public IEnumerator AssignCrewRandomly_AssignsBestSkilledToMatchingModules() + { + var ship = CreateShipWithModules( + (crewNeeded: 1, mainSkill: CrewSkillType.Navigation)); + yield return WaitForStart(); + + var navExpert = MakeCrew("Nav", "Expert", 30, + new Dictionary { { CrewSkillType.Navigation, 10 } }); + var mechExpert = MakeCrew("Mech", "Expert", 30, + new Dictionary { { CrewSkillType.Mechanics, 10 } }); + + ship.AssignCrewBySkill(new List { mechExpert, navExpert }); + + var navModule = ship.ModuleGraph.GetAllNodes().AsValueEnumerable() + .First(m => m.Type == ModuleType.Production); + + Assert.Contains(navExpert, (ICollection)navModule.AssignedCrew); + } + + [UnityTest] + public IEnumerator CrewMissingCount_SumsAcrossAllModules() + { + var ship = CreateShipWithModules( + (crewNeeded: 3, mainSkill: CrewSkillType.Navigation), + (crewNeeded: 5, mainSkill: CrewSkillType.Mechanics)); + yield return WaitForStart(); + + // Command module has 0 crewNeeded, so total = 3 + 5 = 8 + Assert.AreEqual(8, ship.CrewMissingCount); + } + + [UnityTest] + public IEnumerator CrewMissingCount_AfterAssignment_ReflectsRemaining() + { + var ship = CreateShipWithModules( + (crewNeeded: 3, mainSkill: CrewSkillType.Navigation), + (crewNeeded: 2, mainSkill: CrewSkillType.Mechanics)); + yield return WaitForStart(); + + var crew = new List(); + for (var i = 0; i < 3; i++) + crew.Add(MakeCrew($"Crew{i}", "Member", 25 + i)); + + ship.AssignCrewBySkill(crew); + + // 5 needed total, 3 assigned → 2 missing + Assert.AreEqual(2, ship.CrewMissingCount); + } + + [UnityTest] + public IEnumerator CrewMissingCount_FullyStaffed_ReturnsZero() + { + var ship = CreateShipWithModules( + (crewNeeded: 2, mainSkill: CrewSkillType.Navigation), + (crewNeeded: 1, mainSkill: CrewSkillType.Mechanics)); + yield return WaitForStart(); + + var crew = new List(); + for (var i = 0; i < 3; i++) + crew.Add(MakeCrew($"Crew{i}", "Member", 25 + i)); + + ship.AssignCrewBySkill(crew); + + Assert.AreEqual(0, ship.CrewMissingCount); + } + + [UnityTest] + public IEnumerator AssignCrewRandomly_InsufficientCrew_PartiallyFills() + { + var ship = CreateShipWithModules( + (crewNeeded: 5, mainSkill: CrewSkillType.Navigation), + (crewNeeded: 5, mainSkill: CrewSkillType.Mechanics)); + yield return WaitForStart(); + + var crew = new List { MakeCrew("Only", "One", 25) }; + + ship.AssignCrewBySkill(crew); + + var totalAssigned = ship.ModuleGraph.GetAllNodes().AsValueEnumerable() + .Sum(m => m.AliveCrewCount); + Assert.AreEqual(1, totalAssigned); + Assert.Greater(ship.CrewMissingCount, 0); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Ships/Tests/ShipCrewAssignmentTests.cs.meta b/Assets/Scripts/Ships/Tests/ShipCrewAssignmentTests.cs.meta new file mode 100644 index 00000000..0b8d7bce --- /dev/null +++ b/Assets/Scripts/Ships/Tests/ShipCrewAssignmentTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ae5c02cd5dbc4051b322905cb1c139e1 +timeCreated: 1772225055 \ No newline at end of file diff --git a/Assets/Scripts/Ships/Tests/ShipSnapshotServiceTests.cs b/Assets/Scripts/Ships/Tests/ShipSnapshotServiceTests.cs index 48e2346a..43c6849e 100644 --- a/Assets/Scripts/Ships/Tests/ShipSnapshotServiceTests.cs +++ b/Assets/Scripts/Ships/Tests/ShipSnapshotServiceTests.cs @@ -137,6 +137,7 @@ public IEnumerator ApplySnapshot_WhenModuleHasSprite_SnapshotColorsTakePriorityO var testSprite = Sprite.Create(spriteTexture, new Rect(0, 0, 3, 3), new Vector2(0.5f, 0.5f), 1); pixelatedRb.SetSpriteForTesting(testSprite); + pixelatedRb.Setup(null, true); var testModule = moduleGo.AddComponent(); testModule.SetModuleType(ModuleType.Production); @@ -238,6 +239,7 @@ public IEnumerator CaptureSnapshot_ThenApplySnapshot_RoundTrip_PreservesPixelCol spriteTexture.Apply(); var testSprite = Sprite.Create(spriteTexture, new Rect(0, 0, 4, 4), new Vector2(0.5f, 0.5f), 1); pixelatedRb.SetSpriteForTesting(testSprite); + pixelatedRb.Setup(null, true); var testModule = moduleGo.AddComponent(); testModule.SetModuleType(ModuleType.Production); @@ -420,8 +422,8 @@ public void ModuleSnapshot_JsonRoundTrip_PreservesAllFields() Assert.AreEqual(100f, restored.resources.energyCapacity, 0.001f); Assert.AreEqual(10f, restored.resources.energyDraw, 0.001f); Assert.AreEqual(50f, restored.resources.energyProduction, 0.001f); - Assert.AreEqual(5, restored.resources.crew); - Assert.AreEqual(10, restored.resources.crewCapacity); + Assert.AreEqual(5, restored.resources.crewNeeded); + Assert.AreEqual(10, restored.resources.crewQuarters); Assert.AreEqual(new Color32(255, 0, 0, 255), restored.pixelGrid.GetPixel(0, 0)); Assert.AreEqual(new Color32(0, 255, 0, 255), restored.pixelGrid.GetPixel(1, 0)); Assert.IsFalse(restored.pixelGrid.IsPixel(1, 1)); @@ -514,8 +516,8 @@ public void FromJson_HardcodedTinyShip_DeserializesExactPixelColors() ""energyCapacity"": 0.0, ""energyDraw"": 0.0, ""energyProduction"": 0.0, - ""crew"": 0, - ""crewCapacity"": 0 + ""crewNeeded"": 0, + ""crewQuarters"": 0 }, ""moduleComponentJson"": """" } @@ -565,8 +567,8 @@ public void FromJson_TwoModuleShip_DeserializesPositionsAndResources() ""energyCapacity"": 100.0, ""energyDraw"": 0.0, ""energyProduction"": 20.0, - ""crew"": 3, - ""crewCapacity"": 5 + ""crewNeeded"": 3, + ""crewQuarters"": 5 }, ""moduleComponentJson"": """" }, @@ -588,8 +590,8 @@ public void FromJson_TwoModuleShip_DeserializesPositionsAndResources() ""energyCapacity"": 0.0, ""energyDraw"": 15.0, ""energyProduction"": 0.0, - ""crew"": 1, - ""crewCapacity"": 2 + ""crewNeeded"": 1, + ""crewQuarters"": 2 }, ""moduleComponentJson"": """" } @@ -617,7 +619,7 @@ public void FromJson_TwoModuleShip_DeserializesPositionsAndResources() Assert.AreEqual(ModuleType.Command, bridge.moduleType); Assert.AreEqual(100f, bridge.resources.energyCapacity, 0.001f); Assert.AreEqual(20f, bridge.resources.energyProduction, 0.001f); - Assert.AreEqual(3, bridge.resources.crew); + Assert.AreEqual(3, bridge.resources.crewNeeded); Assert.AreEqual(new Color32(80, 80, 80, 255), bridge.pixelGrid.GetPixel(0, 0)); // Thruster @@ -869,8 +871,8 @@ public IEnumerator ApplyFromJson_HardcodedTinyShip_CreatesCorrectPixels() ""energyCapacity"": 0.0, ""energyDraw"": 0.0, ""energyProduction"": 0.0, - ""crew"": 0, - ""crewCapacity"": 0 + ""crewNeeded"": 0, + ""crewQuarters"": 0 }, ""moduleComponentJson"": """" } @@ -1024,8 +1026,8 @@ public IEnumerator CaptureSnapshot_Resources_SurviveJsonRoundTrip() Assert.AreEqual(200f, cmdSnap.resources.energyCapacity, 0.001f); Assert.AreEqual(50f, cmdSnap.resources.energyDraw, 0.001f); Assert.AreEqual(75f, cmdSnap.resources.energyProduction, 0.001f); - Assert.AreEqual(8, cmdSnap.resources.crew); - Assert.AreEqual(12, cmdSnap.resources.crewCapacity); + Assert.AreEqual(8, cmdSnap.resources.crewNeeded); + Assert.AreEqual(12, cmdSnap.resources.crewQuarters); } } } \ No newline at end of file diff --git a/Assets/Scripts/Ships/Tests/TestHelpers/TestContainerFactory.cs b/Assets/Scripts/Ships/Tests/TestHelpers/TestContainerFactory.cs index 7bd9a557..8b80bcf4 100644 --- a/Assets/Scripts/Ships/Tests/TestHelpers/TestContainerFactory.cs +++ b/Assets/Scripts/Ships/Tests/TestHelpers/TestContainerFactory.cs @@ -1,6 +1,6 @@ using Core.Services; using Events.Collision; -using Services; +using NSubstitute; using UnityEngine; using Zenject; @@ -18,10 +18,10 @@ public static DiContainer CreateTestContainer(Transform mapTransform) var testDebrisSpawner = new TestDebrisSpawner(); container.Bind().FromInstance(testDebrisSpawner).AsSingle(); - var mapInfo = new TestMapInfo(mapTransform); + var mapInfo = Substitute.For(); container.Bind().FromInstance(mapInfo).AsSingle(); - var shipService = new GameObject("ShipService").AddComponent(); + var shipService = Substitute.For(); container.Bind().FromInstance(shipService).AsSingle(); return container; diff --git a/Assets/Scripts/Ships/Tests/TestHelpers/TestModule.cs b/Assets/Scripts/Ships/Tests/TestHelpers/TestModule.cs index c661b089..57e63ae4 100644 --- a/Assets/Scripts/Ships/Tests/TestHelpers/TestModule.cs +++ b/Assets/Scripts/Ships/Tests/TestHelpers/TestModule.cs @@ -9,5 +9,15 @@ public void SetModuleType(ModuleType type) { Type = type; } + + public void SetMainSkillType(CrewSkillType skillType) + { + MainSkillTypeForTesting = skillType; + } + + public void SetShip(IShip ship) + { + Ship = ship; + } } } \ No newline at end of file diff --git a/Assets/Scripts/UI/Tests/Game.UI.Tests.asmdef b/Assets/Scripts/UI/Tests/Game.UI.Tests.asmdef index d1fa6be9..2044484a 100644 --- a/Assets/Scripts/UI/Tests/Game.UI.Tests.asmdef +++ b/Assets/Scripts/UI/Tests/Game.UI.Tests.asmdef @@ -11,7 +11,9 @@ "allowUnsafeCode": false, "overrideReferences": true, "precompiledReferences": [ - "nunit.framework.dll" + "nunit.framework.dll", + "ZLinq.dll", + "NSubstitute.dll" ], "autoReferenced": false, "defineConstraints": [ diff --git a/Assets/packages.config b/Assets/packages.config index 758d4bb4..78de00b3 100644 --- a/Assets/packages.config +++ b/Assets/packages.config @@ -1,4 +1,8 @@  + + + + \ No newline at end of file