# Unreal Engine

## Plugin installation

Unzip the ***DTDAnalytics.zip*** archive to the ***Plugins*** folder of your project.

For a C++ project type, add the **`DTDAnalytics`** name to the list of dependency module names to the ***\<module\_name>.Build.cs*** file of the module in which you plan to use the plugin.

Example:

```cpp
PublicDependencyModuleNames.Add("DTDAnalytics");
```

## Data types

#### class UDTDAnalyticsLibrary

A class that implements analytic methods.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDAnalyticsBPLibrary.h"
```

#### class UDTDUserCardLibrary

A class that implements user card methods.

The class header:

```cpp
#include "DTDAnalytics/Public/DTDUserCardBPLibrary.h"
```

#### enum class EDTDTrackingStatus : uint8

SDK tracking status.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDTrackingStatus.h"
```

Values:

* `Unknown = 0` - leave tracking unchanged
* `Enable = 1` - tracking enabled
* `Disable = 2` - tracking disabled

Example:

```cpp
EDTDTrackingStatus TrackingStatus = EDTDTrackingStatus::Enable;
```

#### enum class EDTDLogLevel : uint8

SDK logging level.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDLogLevel.h"
```

Values:

* `Unknown = 0` - leave logging level unchanged
* `No = 1` - logging disabled
* `Error = 2` - logging of errors
* `Warning = 3` - logging of warnings and errors
* `Info = 4` - logging of information messages, warnings and errors
* `Debug = 5` - logging of debugging messages, informational messages, warnings and errors

Example:

```cpp
EDTDLogLevel LogLevel = EDTDLogLevel::Info;
```

#### enum class EDTDAccrualType : uint8

Types of resource accumulation.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDAccrualType.h"
```

Values:

* `Earned = 0` - earned resources
* `Bought = 1` - purchased resources

Example:

```cpp
EDTDAccrualType AccrualType = EDTDAccrualType::Earned;
```

#### enum class EDTDSocialNetwork : uint8

Predefined social media.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDSocialNetwork.h"
```

Values:

* `Facebook = 0`
* `Vkontakte = 1`
* `Twitter = 2`
* `Googleplus = 3`
* `Whatsapp = 4`
* `Viber = 5`
* `Evernote = 6`
* `Googlemail = 7`
* `Linkedin = 8`
* `Pinterest = 9`
* `Reddit = 10`
* `Renren = 11`
* `Tumblr = 12`
* `Qzone = 13`

Example:

```cpp
EDTDSocialNetwork SocialNetwork = EDTDSocialNetwork::Facebook;
```

#### enum class EDTDGender: uint8

User gender.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDGender.h"
```

Values:

* `Unknown = 0`
* `Male = 1`
* `Female = 2`

Example:

```cpp
EDTDGender Gender = EDTDGender::Female;
```

#### enum class EDTDReferralProperty : uint8

Referral properties.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDReferralProperty.h"
```

Values:

* `Source = 0`
* `Medium = 1`
* `Content = 2`
* `Campaign = 3`
* `Term = 4`

Example:

```cpp
EDTDReferralProperty ReferralProperty = EDTDReferralProperty::Source;
```

#### struct FDTDOptionalInt32

An optional parameter of int32 type

Header file:

```cpp
#include "DTDAnalytics/Public/DTDOptionalInt32.h"
```

| Member           | Type  | Description     |
| ---------------- | ----- | --------------- |
| ***`HasValue`*** | bool  | Option label    |
| ***`Value`***    | int32 | Parameter value |

For your convenience, we implemented the conversion constructor:

```
FDTDOptionalInt32(int32 value) : HasValue(true), Value(value) {}
```

Example:

```cpp
FDTDOptionalInt32 OptionalParameter = 1;
```

#### struct FDTDOptionalString

An optional parameter of FString type.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDOptionalString.h
```

| Member         | Type    | Description     |
| -------------- | ------- | --------------- |
| **`HasValue`** | bool    | Option label    |
| **`Value`**    | FString | Parameter value |

For your convenience, we implemented the conversion constructor:

```cpp
FDTDOptionalString(FString value) : HasValue(true), Value(value) {}
```

Example:

```cpp
FDTDOptionalString OptionalParameter = FString("StringValue");
```

#### struct FDTDAnalyticsConfiguration

Configuration of the analytics plugin.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDAnalyticsConfiguration.h"
```

| Member                       | Type               | Description                   |
| ---------------------------- | ------------------ | ----------------------------- |
| ***`LogLevel`***             | EDTDLogLevel       | Logging level                 |
| ***`CurrentLevel`***         | FDTDOptionalInt32  | Current level                 |
| ***`UserId`***               | FDTDOptionalString | User ID                       |
| ***`ApplicationVersion`***   | FDTDOptionalString | Application version (Windows) |
| ***`TrackingAvailability`*** | EDTDTrackingStatus | Tracking settings             |

Example:

```cpp
FDTDAnalyticsConfiguration config;
config.LogLevel = EDTDLogLevel::Debug;
config.CurrentLevel = 3;
config.UserId = FString("CUID");
config.ApplicationVersion = FString("1.2.3");
config.TrackingAvailability = EDTDTrackingStatus::Enable;
```

#### FDTDCustomEventParams

Custom parameters of a custom event.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDCustomEventParams.h"
```

| Member                   | Type                    | Description                              |
| ------------------------ | ----------------------- | ---------------------------------------- |
| ***`StringParameters`*** | TMap\<FString, FString> | String parameters                        |
| ***`IntParameters`***    | TMap\<FString, int64>   | Integer parameters                       |
| ***`FloatParameters`***  | TMap\<FString, float>   | Real parameters (floating-point numbers) |
| ***`BoolParameters`***   | TMap\<FString, bool>    | Boolean parameters                       |

{% hint style="info" %}
Warning: avoid duplicating keys in parameters of different types, because in native code dictionaries are merged into a single dictionary \[string: any].
{% endhint %}

Example:

```cpp
FDTDCustomEventParams params;
params.BoolParameters.Add("BoolKey", true);
params.FloatParameters.Add("FloatKey", 3.3);
params.IntParameters.Add("IntKey");
params.StringParameters.Add("StringKey", "StringValue");
```

#### struct FDTDStartProgressionEventParams

Parameters of the progression start event.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDStartProgressionEventParams.h"
```

| Member             | Type               | Description |
| ------------------ | ------------------ | ----------- |
| ***`Difficulty`*** | FDTDOptionalInt32  | Difficulty  |
| ***`Source`***     | FDTDOptionalString | Source      |

Example:

```cpp
FDTDStartProgressionEventParams params;
params.Difficulty = 3;
params.Source = FString("Source");
```

#### struct FDTDFinishProgressionEventParams

Parameters of the progression completion event.

Header file:

```cpp
#include "DTDAnalytics/Public/DTDFinishProgressionEventParams.h"
```

| Member                       | Type                  | Description                                                   |
| ---------------------------- | --------------------- | ------------------------------------------------------------- |
| ***`SuccessfulCompletion`*** | bool                  | Successful completion of the progression (‘false’ by default) |
| ***`Duration`***             | int32                 | Duration (if 0, duration is calculated automatically)         |
| ***`Spent`***                | TMap\<FString, int64> | Resources spent                                               |
| ***`Earned`***               | TMap\<FString, int64> | Resources earned                                              |

Example:

```cpp
FDTDFinishProgressionEventParams params;
params.Duration = 200;
params.SuccessfulCompletion = true;
params.Earned.Add("CurrencyName1", 1);
params.Spent.Add("CurrencyName2", 2);
```

#### Delegates

Header file:

```cpp
#include "DTDAnalytics/Public/DTDDelegates.h"
```

Definitions:

```cpp
DECLARE_DELEGATE_OneParam(FDTDLongListenerDelegate, int64);
DECLARE_DELEGATE_OneParam(FDTDGetterStringDelegate, const FString&);
DECLARE_DELEGATE_OneParam(FDTDGetterBoolDelegate, bool);
DECLARE_DELEGATE_OneParam(FDTDGetterIntDelegate, int32);
DECLARE_DELEGATE_OneParam(FDTDGetterLongDelegate, int64);
DECLARE_DELEGATE_OneParam(FDTDGetterGenderDelegate, EDTDGender);
DECLARE_DELEGATE_TwoParams(FDTDGetterOptionalStringDelegate, bool, const FString&);
DECLARE_DELEGATE_TwoParams(FDTDGetterOptionalBoolDelegate, bool, bool);
DECLARE_DELEGATE_TwoParams(FDTDGetterOptionalFloatDelegate, bool, float);
DECLARE_DELEGATE_TwoParams(FDTDGetterOptionalLongDelegate, bool, int64);
DECLARE_DELEGATE_ThreeParams(FDTDGetterOptionalStringWithKeyDelegate, bool, const FString&, const FString&);
DECLARE_DELEGATE_ThreeParams(FDTDGetterOptionalBoolWithKeyDelegate, bool, const FString&, bool);
DECLARE_DELEGATE_ThreeParams(FDTDGetterOptionalFloatWithKeyDelegate, bool, const FString&, float);
DECLARE_DELEGATE_ThreeParams(FDTDGetterOptionalLongWithKeyDelegate, bool, const FString&, int64);
```

## SDK initialization

#### SDK initialization without parameters:

![Blueprint](https://2105883905-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnGcP_ZeRJ1ipj9O8dF%2Fuploads%2FutBrHZ9UbR04AzfbtpTX%2Fimage.png?alt=media\&token=1985e5a1-656c-4483-8621-87461bdfc733)

| Member         | Type    | Description                                                                                                               |
| -------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
| ***`appKey`*** | FString | You can find it in the settings of the corresponding application in devtodev (Settings → SDK → Integration → Credentials) |

```cpp
UDTDAnalyticsBPLibrary::Initialize("AppKey");
```

#### SDK initialization with parameters:

![Blueprint](https://2105883905-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LnGcP_ZeRJ1ipj9O8dF%2Fuploads%2FBxRvwN9gLzd2oQSUH3fE%2Fimage.png?alt=media\&token=f929dd90-0828-45fb-9eb3-8ccd81d62c6b)

| Member         | Type                       | Description                                                                                                               |
| -------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| ***`appKey`*** | FString                    | You can find it in the settings of the corresponding application in devtodev (Settings → SDK → Integration → Credentials) |
| ***`config`*** | FDTDAnalyticsConfiguration | Initialization parameters                                                                                                 |

```cpp
FDTDAnalyticsConfiguration config;
config.LogLevel = EDTDLogLevel::Debug;
config.CurrentLevel = 3;
config.UserId = FString("CUID");
config.ApplicationVersion = FString("1.2.3");
config.TrackingAvailability = EDTDTrackingStatus::Enable;
UDTDAnalyticsBPLibrary::InitializeWithConfig("AppKey", config);
```
