99国产欧美另娄久久久精品_国内自拍农村少妇在线观看_久久亚洲道色宗和久久_日本aⅴ大伊香蕉精品视频_亚洲国产欧美日韩欧美特级_日本视频免费在线观看

  • 您的位置:首頁 > 新聞動態(tài) > UE4

    UE4插件,展示如何使用第三方庫制作UE4插件

    2018/3/20??????點擊:

    如何調(diào)用第三方封裝好的庫制作UE4插件? 


    MyEEGPlugin.uplugin

    {

        "FileVersion": 3,

        "Version": 1,

        "VersionName": "1.0",

        "FriendlyName": "MyEEGPlugin",

        "Description": "",

        "Category": "Other",

        "CreatedBy": "",

        "CreatedByURL": "",

        "DocsURL": "",

        "MarketplaceURL": "",

        "SupportURL": "",

        "CanContainContent": true,

        "IsBetaVersion": false,

        "Installed": false,

        "Modules": [

            {

                "Name": "MyEEGPlugin",

                "Type": "Runtime",

                "LoadingPhase": "Default"

            }

        ]

    }

    MyEEGPlugin.Build.cs

    // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.


    using UnrealBuildTool;

    using System.IO;


    public class MyEEGPlugin : ModuleRules

    {

        public MyEEGPlugin(TargetInfo Target)

        {


            PublicIncludePaths.AddRange(

                new string[] {

                    "MyEEGPlugin/Public"

                    // ... add public include paths required here ...

                }

                );



            PrivateIncludePaths.AddRange(

                new string[] {

                    "MyEEGPlugin/Private",

                    // ... add other private include paths required here ...

                }

                );



            PublicDependencyModuleNames.AddRange(

                new string[]

                {

                    "Core", "CoreUObject", "Engine", "InputCore", "Projects"

                    // ... add other public dependencies that you statically link with here ...

                }

                );



            PrivateDependencyModuleNames.AddRange(

                new string[]

                {

                    // ... add private dependencies that you statically link with here ...   

                }

                );



            DynamicallyLoadedModuleNames.AddRange(

                new string[]

                {

                    // ... add any modules that your module loads dynamically here ...

                }

                );


            LoadThinkGearLib(Target);//添加第三方庫

            //LoadAlgoSdkDll(Target);//添加第三方庫

        }


        private string ThirdPartyPath

        {

            get

            {

                return Path.GetFullPath(Path.Combine(ModuleDirectory, "../ThirdParty/"));

            }

        }

        public void LoadThinkGearLib(TargetInfo Target)

        {

            if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Win32))

            {

                string PlatformString = (Target.Platform == UnrealTargetPlatform.Win64) ? "64" : "";

                string LibrariesPath = Path.Combine(ThirdPartyPath, "ThinkGear", "lib");

                //test your path

                System.Console.WriteLine("... LibrariesPath -> " + LibrariesPath);


                PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "ThinkGear", "include"));

                PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "thinkgear" + PlatformString + ".lib"));

            }


            //Definitions.Add(string.Format("MY_DEFINE={0}", 0));

        }


        public void LoadAlgoSdkDll(TargetInfo Target)

        {

            if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Win32))

            {

                string PlatformString = (Target.Platform == UnrealTargetPlatform.Win64) ? "64" : "";

                string DllPath = Path.Combine(ThirdPartyPath, "bin", "AlgoSdkDll" + PlatformString + ".dll");


                PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "EEGAlgoSDK", "include"));

                PublicDelayLoadDLLs.Add(DllPath);

                //RuntimeDependencies.Add(new RuntimeDependency(DllPath));

            }

        }


    }

    MyEEGPlugin.h

    // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.


    #pragma once


    #include "ModuleManager.h"


    class FMyEEGPluginModule : public IModuleInterface

    {

    public:


        /** IModuleInterface implementation */

        virtual void StartupModule() override;

        virtual void ShutdownModule() override;


    private:

        /** Handle to the test dll we will load */

        void*    ExampleLibraryHandle;

    };

    MyEEGPlugin.cpp

    // Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.


    #include "MyEEGPlugin.h"

    #include "Core.h"

    #include "ModuleManager.h"

    #include "IPluginManager.h"

    //#include "ExampleLibrary.h"


    #define LOCTEXT_NAMESPACE "FMyEEGPluginModule"


    void FMyEEGPluginModule::StartupModule()

    {

        // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module


        // Get the base directory of this plugin

        FString BaseDir = IPluginManager::Get().FindPlugin("MyEEGPlugin")->GetBaseDir();


        // Add on the relative location of the third party dll and load it

        FString LibraryPath;

    #if PLATFORM_WINDOWS

        LibraryPath = FPaths::Combine(*BaseDir, TEXT("Binaries/ThirdParty/MyEEGPluginLibrary/Win64/ExampleLibrary.dll"));

    #elif PLATFORM_MAC

        LibraryPath = FPaths::Combine(*BaseDir, TEXT("Source/ThirdParty/MyEEGPluginLibrary/Mac/Release/libExampleLibrary.dylib"));

    #endif // PLATFORM_WINDOWS


        ExampleLibraryHandle = !LibraryPath.IsEmpty() ? FPlatformProcess::GetDllHandle(*LibraryPath) : nullptr;


        if (ExampleLibraryHandle)

        {

            // Call the test function in the third party library that opens a message box

            //ExampleLibraryFunction();

        }

        else

        {

            //FMessageDialog::Open(EAppMsgType::Ok, LOCTEXT("ThirdPartyLibraryError", "Failed to load example third party library"));

        }

    }


    void FMyEEGPluginModule::ShutdownModule()

    {

        // This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,

        // we call this function before unloading the module.


        // Free the dll handle

        FPlatformProcess::FreeDllHandle(ExampleLibraryHandle);

        ExampleLibraryHandle = nullptr;

    }


    #undef LOCTEXT_NAMESPACE


    IMPLEMENT_MODULE(FMyEEGPluginModule, MyEEGPlugin)

    MyEEGReceiver.h

    // Fill out your copyright notice in the Description page of Project Settings.


    #pragma once

    #include "Engine.h"

    #include "GameFramework/Actor.h"

    #include "MyEEGReceiver.generated.h"


    UCLASS()

    class AMyEEGReceiver : public AActor

    {

        GENERATED_BODY()


    public:   

        // Sets default values for this actor‘s properties

        AMyEEGReceiver();


    protected:

        // Called when the game starts or when spawned

        virtual void BeginPlay() override;

        int rawDataIndex;

        int lerpDataIndex;

        float totalAngle;


        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        float v;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        float s;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        float a;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        TArrayrawAttentions;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        TArrayrawMeditations;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        TArraylerpAttentions;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        TArraylerpMeditations;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        float attention1;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        float attention2;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        float meditation1;

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        float meditation2;

    public:   

        // Called every frame

        virtual void Tick(float DeltaTime) override;


        /** Called whenever this actor is being removed from a level */

        virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;



        UFUNCTION(BlueprintImplementableEvent, Category = "EEG")

        void BPEvent_GetNewAttention(float newAttention);


        UFUNCTION(BlueprintCallable, Category = "EEG")

        void IndexFunc();


        UFUNCTION(BlueprintCallable, Category = "EEG")

        void ComputeNewPos(float factor, UStaticMeshComponent* cube, float DeltaTime, float scaleFactorAtten=1, float scaleFactorMedi = 1, bool debug=false);


        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        int32 LatestMeditation;        //*新放松度

        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        int32 LatestAttention;        //*新專注度


        UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "EEG")

        bool ShowOnScreenDebugMessages;


        FORCEINLINE void ScreenMsg(const FString& Msg)

        {

            if (!ShowOnScreenDebugMessages) return;

            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, *Msg);

        }

        FORCEINLINE void ScreenMsg(const FString& Msg, const int32 Value)

        {

            if (!ShowOnScreenDebugMessages) return;

            GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("%s %d"), *Msg, Value));

        }

    };

    MyEEGReceiver.cpp

    // Fill out your copyright notice in the Description page of Project Settings.


    #include "MyEEGPlugin.h"

    #include "MyEEGReceiver.h"

    #include "thinkgear.h"


    #define NUM 3

    // Sets default values

    AMyEEGReceiver::AMyEEGReceiver()

    {

         // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don‘t need it.

        PrimaryActorTick.bCanEverTick = true;


        ShowOnScreenDebugMessages = true;

        v = 0; a = 1; s = 0;

        rawDataIndex = 0;

        lerpDataIndex = 0;

        rawAttentions.Init(0, NUM);

        rawMeditations.Init(0, NUM);

        totalAngle = 0;

    }


    long raw_data_count = 0;

    short *raw_data = NULL;

    bool bRunning = false;

    bool bInited = false;

    char *comPortName = NULL;

    int   dllVersion = 0;

    int   connectionId = -1;

    int   packetsRead = 0;

    int   errCode = 0;

    bool bConnectedHeadset = false;



    // Called when the game starts or when spawned

    void AMyEEGReceiver::BeginPlay()

    {

        Super::BeginPlay();


        /* Print driver version number */

        dllVersion = TG_GetVersion();

        ScreenMsg("ThinkGear DLL version:",dllVersion);

        //GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("ThinkGear DLL version: %d\n"), dllVersion));

        /* Get a connection ID handle to ThinkGear */

        connectionId = TG_GetNewConnectionId();

        if (connectionId < 0) {

            ScreenMsg("Failed to new connection ID");

        }

        else {

            /* Attempt to connect the connection ID handle to serial port "COM5" */

            /* NOTE: On Windows, COM10 and higher must be preceded by \\.\, as in

            *       "\\\\.\\COM12" (must escape backslashes in strings).  COM9

            *       and lower do not require the \\.\, but are allowed to include

            *       them.  On Mac OS X, COM ports are named like

            *       "/dev/tty.MindSet-DevB-1".

            */

            comPortName = "\\\\.\\COM6";

            errCode = TG_Connect(connectionId,

                comPortName,

                TG_BAUD_57600,

                TG_STREAM_PACKETS);

            if (errCode < 0)

            {

                ScreenMsg("TG_Connect() failed", errCode);

            }

            else

            {

                ScreenMsg("TG_Connect OK",connectionId);

            }

        }


    }


    // Called every frame

    void AMyEEGReceiver::Tick(float DeltaTime)

    {

        Super::Tick(DeltaTime);


        v = v + a*DeltaTime;

        s += v*DeltaTime;

        /* Read all currently available Packets, one at a time... */

        do {

            /* Read a single Packet from the connection */

            packetsRead = TG_ReadPackets(connectionId, 1);


            /* If TG_ReadPackets() was able to read a Packet of data... */

            if (packetsRead == 1) {

                //ScreenMsg("TG_ReadPackets");

                /* If the Packet containted a new raw wave value... */

                if (TG_GetValueStatus(connectionId, TG_DATA_RAW) != 0) {

                    int rawData = (int)TG_GetValue(connectionId, TG_DATA_RAW);

                    //ScreenMsg("TG_DATA_RAW",rawData);

                } /* end "If Packet contained a raw wave value..." */


                if (TG_GetValueStatus(connectionId, TG_DATA_POOR_SIGNAL) != 0) {

                    int ps=TG_GetValue(connectionId, TG_DATA_POOR_SIGNAL);

                    //ScreenMsg("TG_DATA_POOR_SIGNAL",ps);

                }


                if (TG_GetValueStatus(connectionId, TG_DATA_MEDITATION) != 0) {

                    float medi = TG_GetValue(connectionId, TG_DATA_MEDITATION);

                    LatestMeditation = (int32)medi;

                    //ScreenMsg("TG_DATA_MEDITATION", LatestMeditation);

                    rawMeditations[rawDataIndex] = medi;

                    float total = 0;

                    for (int i = 0; i < NUM; i++)

                        total += rawMeditations[i];

                    float avg_medi = total / NUM;

                    lerpMeditations.Add(avg_medi);

                }


                if (TG_GetValueStatus(connectionId, TG_DATA_ATTENTION) != 0) {

                    float atten = TG_GetValue(connectionId, TG_DATA_ATTENTION);

                    LatestAttention = (int32)atten;

                    rawAttentions[rawDataIndex] = atten;

                    float total = 0;

                    for (int i = 0; i < NUM; i++)

                        total += rawAttentions[i];

                    float avg_atten = total / NUM;

                    lerpAttentions.Add(avg_atten);


                    rawDataIndex++;

                    if (rawDataIndex == NUM)

                    {

                        rawDataIndex = 0;

                    }


                    ScreenMsg("avg_atten", avg_atten);

                    //BPEvent_GetNewAttention(TG_GetValue(connectionId, TG_DATA_ATTENTION));

                    //float atten=TG_GetValue(connectionId, TG_DATA_ATTENTION);

                    //float delta = atten - s;

                    //a = delta;

                    ScreenMsg("TG_DATA_ATTENTION", LatestAttention);

                    //ScreenMsg("delta", delta);

                    //ScreenMsg("s", s);

                }


            } /* end "If TG_ReadPackets() was able to read a Packet..." */


        } while (packetsRead > 0); /* Keep looping until all Packets read */

    }


    void AMyEEGReceiver::EndPlay(const EEndPlayReason::Type EndPlayReason)

    {

        Super::EndPlay(EndPlayReason);


        /* Clean up */

        TG_FreeConnection(connectionId);

    }


    void AMyEEGReceiver::IndexFunc()

    {

        int lerpNum = lerpAttentions.Num();

        if (lerpNum ==0)

            return;

        int idx1 = lerpDataIndex - 1;

        int idx2 = lerpDataIndex;

        idx1 = FMath::Max(idx1,0);

        idx2 = FMath::Min(idx2, lerpNum-1);

        attention1 = lerpAttentions[idx1];

        attention2 = lerpAttentions[idx2];

        meditation1 = lerpMeditations[idx1];

        meditation2 = lerpMeditations[idx2];

        if (lerpDataIndex < lerpNum-1)

        {

            lerpDataIndex++;

        }

    }


    void AMyEEGReceiver::ComputeNewPos(float factor, UStaticMeshComponent* cube, float DeltaTime,

        float scaleFactorAtten/*=1*/, float scaleFactorMedi/* = 1*/, bool debug/* = false*/)

    {

        float tmpAtten = FMath::Lerp(attention1, attention2, factor);

        float tmpMedit = FMath::Lerp(meditation1, meditation2, factor);

        static float testTime = 0;

        if (debug)

        {

            tmpMedit = 50 + sin(testTime) * 50;

            tmpAtten = 50 + sin(testTime) * 50; testTime += DeltaTime;

        }

        float s0 = tmpMedit*DeltaTime*scaleFactorMedi;

        FVector oldPos = cube->GetComponentLocation();

        float angle = FMath::Atan(s0 / (oldPos.Size()));

        FVector normalVec = oldPos.GetSafeNormal();

        FVector newPos = normalVec*(10000 + tmpAtten*scaleFactorAtten);

        cube->SetWorldLocation(newPos.RotateAngleAxis(FMath::RadiansToDegrees(angle),FVector(0,1,0)));

        FRotator Rotator = FRotator::ZeroRotator;

        totalAngle += FMath::RadiansToDegrees(angle);

        Rotator.Add(-totalAngle, 0, 0);

        if (totalAngle >= 360)

        {

            totalAngle = 0;

        }

        cube->SetWorldRotation(Rotator);

        UTextRenderComponent* text = dynamic_cast(cube->GetChildComponent(0));

        if (text)

        {

            FString t1 = FString::FromInt(tmpAtten);

            FString t2 = FString::FromInt(tmpMedit);

            FString t3 = FString::FromInt(totalAngle);

            FString tmp(", ");

            tmp = t1 + tmp + t2;

            text->SetText(FText::FromString(tmp));

        }

    }


    主站蜘蛛池模板: 热の无码热の有码热の综合_国产在线精品亚洲第一区香蕉_97在线超碰_久久久视频免费观看_国产精品美女一区二区_亚洲精品久久久蜜桃网站_欧美XXXX黑人又粗又长精品_麻豆精品国产 | 日本一区二区三区免费A片_成年人在线视频观看_精品国模一区二区三区浪潮_四虎永久在线精品免费播放_不卡欧美_在线国产精品视频_欧美一区二区性_中文字幕有码无码AV | 青青草视频偷拍_人人天天操_www·黄_人人射人人草_欧美精品在线一区二区三区_亚洲大片在线播放_国产伦精品一区二区三区视频黑人_www国产精品com | 日本三级动作片_色哟哟网页_少妇撒尿一区二区在线视频_图片区小说区另类春色_女人19毛片一级毛片_久久香蕉网站_国产精品网站在线观看_免费黄色大片 | 亚洲AV无码一区二区三区观看_视频成人免费_亚洲欧美精_国产精品喷水_亚洲永久网站_日本公妇被公侵犯中文字幕2_日韩中文字幕2019_成人欧美视频在线观看 | 91热爆视频_韩国av一区二区_夜夜躁狠狠躁日日躁视频_av在线免费播放_双飞两少妇国语对白_中文字幕在线乱码不卡二区区_色综合久久中文娱乐网_成年站免费网站看V片在线 | 亚洲а∨天堂一区_中文字幕人妻在线中文乱码怎么解决_91火爆视频_综合激情视频_成人123_91在线精品入口_狠狠爱婷婷_片多多免费观看高清影视 | 第一福利在线_国内精品免费一区二区2001_在线观看中文字幕网站_欧美一区二区三区性视频_亚洲日本成本人观看_亚洲一级毛片视频_高清一区在线_天天操人人爱 色欲aⅴ亚洲情无码AV_欧美喷潮久久久XXXXX_国产精品高潮呻吟久久av黑人_亚洲AV无码专区亚洲AV网站_姑娘第7集在线观看_国产成人精选视频在线观看_91视频在线视频_亚洲伦理一区 | 亚洲人成人影院在线观看_欧美国产一区二区在线_成熟女人色惰片免费视频_夜色成人网_高清日本视频_日本免费一区二区三区四区五六区_欧美性69式XXXX护士_涩涩成人 | 亚洲AV无码欧洲AV无码网站_国产精品视频色_大地资源网更新免费播放视频_私人影院性盈盈影院_久久99精品久久久久久236_最新亚洲人成无码网站_99热91_欧洲精品卡1卡2卡三卡 | 福利视频日韩_日本不卡免费一区_一久久久_粗暴进入娇小呻吟痛呼_激情伊人五月天久久综合_国产精品人妻熟女毛片av_精品少妇爆乳无码专区久久_日韩在线日韩 | 国产妇女馒头高清泬20P多_久久精品666_欧美成人国产_91免费视_麻豆视频网站在线观看_日韩免费黄色片_666av视频导航_裸体女人高潮毛片扒开一一区 | 精品视频—区二区三区免费_韩国久久久久_欧美在线一级_在办公室把护士给爽了动态图_国内一区二区视频_久久久久中文_亚洲成在人线在线播放_国产剧情乱偷 | 欧美日韩高清一区二区_www.se天堂_99国产精成人午夜视频一区二区_亚洲国产高清在线一区二区三区_久久婷婷五月综合色99啪_国产婷婷色一区二区三区在线_小尤奈无码视频_a4yy欧美一区二区三区 | 国产精品久久久久久久久吹潮_无码专区视频中文字幕_中文字幕在线免费看_亚洲视屏在线_久久精品一区中文字幕_精品日产一区二区三区_熟女体下毛荫荫黑森林_九九九九九少妇爽黄大片 | 日本久热_欧美影院_久草视频在线首页_中国业余老太性视频_男的操女的免费视频_一级毛片中国_国产精品99久久久久久宅男小说_麻豆国产精品久久人妻 | 日本久色_国产最顶级的黄色片在线免费观看_亚洲视频国产一区_日韩一区二区精品在线观看_91精品美利坚合众国_特黄三级又爽又粗又大_欧美性爱一区三区_亚洲色成人中文字幕网站 | 欧美性猛交xxxx免费看德国_蜜汁AV无码国产_国产voyeur精品偷窥222_综合久久2023_麻豆蜜桃视频_亚洲第一天堂网_久草在线视频免赞_国产丝袜在线精品丝袜不卡3D | 成人激情在线观看_国产v片_免费看午夜无码福利专区_久操国产在线_在线视频亚洲欧美_国产精品精品国内自产拍_国产夫妇肉麻对白_精品欧美视频 | 亚洲AV综合色区无码另类小说_天天超碰_成人免费看网站_91精品999_日韩三级视频_国产午夜精品视频免费不卡_91免费黄色_中国娇小与黑人巨大交 | www啦啦啦视频在线观看免费_一级国产aa片免费观看_无码精品A∨在线观看中文_九九精品视频在线观看_99国产精品2018视频全部_中国一级黄色片子_麻豆嫩芽忘忧草一区二区三区_99精品网 | 国产视频手机在线观看_日韩av免费一区二区_成人性生交大片兜免费看r_又黄又硬又湿又刺激视频免费_久久久精品人妻久久影视_99国产精品欲a_国产成人啪精品视频免费网站_JAPANESE国产在线观看 | 久久丫忘忧草产品_在线成人一区_精品久久久久久久久久_亚洲精品午夜_91骚片_最近2019中文字幕第二页_91视频麻豆_国产精品女A片爽爽波多野结衣 | 国产网站久久_超碰99热_国产痴女资源在线不卡_欧美偷拍另类_av不卡免费_艹逼视频免费观看_国产精品一区二区三区成人_亚洲成年人在线 | 欧美一区欧美二区_久久伊人精品中文字幕有软件_天天色综合合_久久情侣视频_久久aⅴ人妻少妇嫩草影院_91操bb_伊人久久视频_在线视频观看免费视频18 | 成年女人午夜毛片免费视频_日韩在线观看视频一区二区三区_一级免费播放_日本草逼视频_亚洲欧美日韩国产成人一区_麻豆最新网址_国产精品久久久久久久白丝_免费人成自慰网站 | aV无码久久久久不卡蜜桃_aaa日韩_91精品久久久久久久久久不卡_99精品视频精品精品视频_天天爽天天爽夜夜爽毛片_伊人网综合视频_99在线免费观看_国产精品乱码久久久久 | 欧美日韩中文字幕一区二区高清_人与性动交aaaabbbb_国产一区二区三区四区五区加勒比_国产成人综合欧美精品久久_99久久国产宗和精品1上映_日本丰满人要无码视频_日韩成人区_国产美女视频黄 | 日日操日日碰_一级免费特黄视频_国产精品一二三在线_美国三级日本三级久久99_日本中文字幕在线观看_岛国毛片_国产精品日产三级在线_网站黄色在线观看 | 中国xxxx老师xxx在线_啦啦啦资源视频在线完整免费高清_久久网精品视频_无遮无挡爽爽免费视频_亚洲精品av一区在线观看_国产91精品久久久久久_亚洲一区二区三区中文字幂_奶头好大揉着好爽GIF动态图 | CHINESE国产AV巨作VIDEOS_美女视频很黄很a免费_国产在线视频不卡香蕉_久久无码中文字幕免费影院蜜桃_国产激情_亚洲国产精_2021久久_国产亚洲精品美女久久久久 | 成人性生交大全免费看_少妇熟女高潮流白浆_日韩亚洲国产中文字幕欧美_国内精品久久久久影院中国_97视频热人人精品免费_蜜桃国精产品二三三区视频_国产精品无码日韩字幕资不卡_印度妓女野外xxww | 亚洲m码欧洲s码sss222_午夜伦4480yy私人影院免费_成人一区二区在线观看_国内精品免费一区二区三区_久草91视频_91视频导航_蜜臀av免费_玖玖国产 | 超碰二区_精品剧情V国产在线观看_色屁屁WWW免费看欧美激情_国产美女裸体丝袜喷水视频_免费又黄又爽又猛大片午夜_在线黄色av网站_国产91白丝在线播放_高潮喷水的网站 | 亚洲黄色性视频_www.亚洲一区二区_成人av午夜_精品久久ai_无码aⅴ免费中文字幕久久_5252aⅴhaose我爱久久_亚洲一区区_一级黄色带片 | 国产成人无码精品久久久免费_国产xxxx_欧美成人免费_97超碰97_色欲蜜桃AV无码中文字幕_老司机精品在线_九色视屏_av片免费看 | 99精品视频在线看_无码毛片一区二区本码视频_中文字幕无码日本欧美大片_欧美肉大捧一进一出_后入内射国产一区二区_avhd老司机101_欧美在线观看网站_视频亚洲区 | 国产美女网站视频_先锋中文字幕在线资源_免费中文字幕日产乱码_97国产婷婷视频_91精品久久久久久9s密挑_久久99精品久久久久久琪琪_三区影院_国语对白做爰xxxⅹ性69视频 | 水蜜桃免费视频_青青热久免费精品视频在线播放_在教室伦流澡到高潮h麻豆_外国特级免费片_久久婷婷一区_亚洲精品在线视频播放_a中文字幕_微拍福利88 | 欧美日本在线播放_久久亚洲日本_亚洲国产精选_亚洲一级性生活片_亚洲一区二区三区四区视频_91成人影库_玖玖精品在线视频_天天舔天天色 | 观看免费av_午夜国产影院_精品精品国产高清a毛片_天天躁夜夜躁狠狠久久成人网_无翼乌之侵犯工口全彩老师_亚洲双插_国产一在线精品一区在线观看_一本大道久久东京热无码av |