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

        }

    }


    主站蜘蛛池模板: 999久久久国产精品消防器材_国产美女视频一区_日韩三级免费_国产超碰在线观看_亚州ava_亚洲AV无码专区日韩乱码不卡_久久久国产乱子伦精品_久久ri资源网 | av在线超碰_人与动人物视频a级毛片_中文字幕av网站_肉岳疯狂69式激情的高潮_91久久精品一区_久久99视频精品_97香蕉久久国产在线观看_中文字幕人成无码免费视频 | 日日碰狠狠添天天爽超碰97久久_999成人精品_免费黄色毛片_亚洲HEYZO专区无码综合_女人被躁到高潮嗷嗷叫69_国产成人久久综合777777麻豆_韩日在线观看视频_精品国产网站 | 二级片免费_国产精品午夜久久久久久99热_久久av青久久久av三区三区_免费大片AV手机看片高清_久久精品AV无码夜色_欧美XXXX做受欧美69_久在线视频播放免费视频_国产日韩欧美一区 | 亚洲亚洲精品三区日韩精品在线视频_6699久久久久久久77777'7_免费在线观看视频完整_精品av中文字幕在线毛片_aⅴ免费在线观看_深夜免费观看视频_日韩一区二区观看_日韩国产成人无码AV毛片蜜柚 | 丰满少妇人妻无码_亚洲理论_99手机在线视频_小箩莉h文徐韵婷合集小说_麻豆视频免费在线观看_35日本xxxxxxxxx25_欧美成人精品一区二区男人看_青青草成人免费 | 久久亚洲婷婷_国产原创大胆私拍视频_密室大逃脱第6期免费观看_色欲AV午夜一区二区三区_91精品国产91久久久久久青草_国产在线观看高清视频_国产真实乱偷精品视频免_日韩一级在线观看 | 日韩一级成人_日韩美女毛片_美女视频网站久久_亚洲AV最新天堂地址_av免费在线视_无码丰满熟妇juliaann_日本黄色影院在线观看_亚洲热久久 | 在线观看国产日韩欧美_日韩午夜视频免费_国产精品美女视频免费午夜版_夜夜爱夜夜操_日韩素人_久久久九九_国产在线看片_成人黄网站片免费视频 | 欧产日产国产精品98_在线精品观看国产_av大片网址_亚洲激情一级片_福利视频区_99久久久无码国产精品9_久草婷婷_偷拍自拍第二页 | 伦理片一级二级片_永久黄网站色视频免费_麻豆国产手机福利看片_国内av免费_久久AV喷潮久久AV高清_亚洲AV无码成H在线观看_一级片免费观看_日本亚洲视频 | 国产在线观看黄色_久久99精品久久久久久久久久_成a人v在线观看视频_AV无码专区亚洲AVL在线观看_激情视频中文字幕_狠狠丁香_肉嘟嘟WWW视频在线观看高清_亚洲综合色久 | 亚洲美女视频_日本69xxxxx_在线观看国精产品一区_国产精品久久久久久久久久久久久久_狠狠操社区_伊人精品成人久久综合软件_在线岛国片免费无码AV_秋霞无码一区二区视频在线观看 | 弄逼视频_午夜三级视频_一区二区三区欧美视频_色多多A级毛片免费看_久久91久久_色黄视频在线_日日摸夜夜添夜夜添老人妇人_午夜影院免费看 | 国产区亚洲区_黄色在线片_欧美日韩在线看片_欧美日韩偷拍一区_91av国产在线_成年人免费在线看惊悚片动作片_国产萌白酱喷水视频在线观看_少妇无力反抗慢慢张开双腿 | www.久久草.com_国产91在线高潮白浆在线观看_成人无码精品一区二区三区_久久高清亚洲_色婷婷狠狠18禁久久yyy☆_亚洲春色Aⅴ无码专区在线播放_av在线网站免费观看_少妇大叫太大太粗太爽了A片 | 欧美区一区_av网站一区二区三区_国产激情视频在线观看_日韩精品天堂_顶臀精品视频www_97免费在线_噜噜色噜噜_日韩精品免费看 | 亚洲在线免费观看视频_野花社区观看在线www官网_热久久国产_亚洲国产精品无码观看久久_两个人的WWW免费视频_超乳爆乳上司在线观看_亚洲天堂一区在线观看_久久天天躁狠狠躁夜夜96流白浆 | 中日黄色一级片_国产护士在线观看免费_日韩中文字幕网_91p亚洲_色窝窝51精品国产人妻消防_国产一区二区丁香婷婷_国产乱淫片视频_999精品国产人妻无码系列 | 国产一区二区三区美女_一个人看的www免费观看视频_在线成人看片_国产伦精品一区二区三区88av_亚洲精品无码AV中文字幕_精品久久久久久综合日本_九色成人在线_穿书自救指南2樱花动漫免费观看 | 欧洲一区在线观看_妞干网免费_一区二区国产日产_超碰aⅴ人人做人人爽欧美_国产又黄又硬又湿又黄的_欧美午夜无码大片免费看_久热精品视频在线播放_亚洲无亚洲人成网站77777 | 亚洲精品国产综合久久_中文成人无字幕乱码精品区_老司机精品免费视频_日韩精品人妻系列无码专区_国产成人精品免费视频大_久久6国产_日本特黄特色大片免费视频_大陆国产乱人伦 | 神马午夜窝窝_婷婷色中文字幕综合在线_久久免费资源_亚洲一区二区二区久久成人婷婷_欧美日韩一区在线播放_天天草天天干天天_午夜嘿嘿嘿在线观看_一区二区三区成人 | AAA无码偷拍亚洲_欧美成人aaaaa片_午夜影院男女_天天综合视频_国产精品亚洲专区在线观看_www.国产网站_37人体做爰久久久久久_爱射综合网 | 国产精品爱久久久久久久小说_黄色一级大片在线观看_久久精品99久久_91在线视频免费观看_www.51色.com_涩爱av色老久久精品偷偷鲁_成人二区_一本之道伊人 | 超碰网在线观看_日本xxxx裸体bbbb_国产中文在线播放_国产男女做爰高清全过小说_色视频在线观看免费_久草片免费福利_成人在线免费视频_www.免费av | JLZZJLZZ全部女高潮_国产成人久久AV免费看_国产边打电话边被躁视频_欧美大黄大色一级毛片_韩国av网站在线观看_免费特级婬片日本高清视频_男人天堂2023_不卡精品 | 男人J放进女人P全黄在线_9191视频_www.com黄_少妇午夜性影院私人影院成都_亚洲av片不卡无码影视_麻豆传媒免费看_99热5_佐山爱国产在线一区 | 欧美疯狂xxx免费视频_91桃色黄色_一本色道久久88综合日韩精品_成人亚洲_91综合网站_国产福利影院_国产精品第一区第27页_亚洲一区二区精品视频 | 欧美日韩欧美日韩在线观看视频_性吧有你.com_97在线中文字幕观看视频_澳门黄色网_精品a在线_久久久高清免费视频_乱子伦精品免费久久99_国模精品一区二区三区色天香 | 成人做爰69片免网站_女人高潮潮叫免费视频_97色se_中日韩在线观看_午夜熟女插插XX免费视频_女人被添全过程A片久久AV_国产精品精品国产_国产毛片在线 | 免费看片子_99精品国产再热久久无毒不卡_xxxx日韩_亚洲不卡一区二区三区四区_欧美bwbwbwbwbw_性妲己一级淫片免费放_国产精品毛片av999999_在线观看免费人成视频色 | WWW片香蕉内射在袋88AV8_欧美18—19sex性hd_欧美区视频_亚洲成人资源在线观看_一区二区精品在线_可以免费看av的网站_一性一交一伦一色一情人_偷偷操不一样的久久 | 成人乱码免费视频A片含羞草传媒_成人午夜毛片_国产精品久久久久永久免费_久久精品成人免费国产_亚州av网_91剧场_青青青草伊人_亚洲精品一区二区三区蜜桃久 | BBW厕所白嫩BBWXXXX_麻豆国产原创_免费乱码人妻系列无码专区_999www人成免费视频_久久成人一区_久久SE精品一区精品二区国产_欧美日韩一区_avav在线 | 亚洲国产欧美不卡在线观看_日韩色综合_国产爆乳无码av在线播放_粉粉嫩av一区二区三区四区_亚洲国产成人va在线观看_天天拍夜夜爽_久久久久久噜噜噜久久久精品_欧美久久国产精品 | 久久久999_国产精品6666_韩日av一区二区三区_18成人片黄网站WWW_国产精品偷伦在线观看_97人人做人人人难人人做_色777狠狠狠综合_国产色亚洲 | 久久不卡视频_性爱无码视频在线看_久久这里只有精品6_日本一区二区视频在线观看_色日韩综合_亚洲精品午睡沙发系列_99久久国产综合精品1_囯产av无码片毛片一级 | 日韩欧美国产1_护士巨好爽好大乳_伊人第四色_国产精品1页_国色天香综合网_黄色在线免费播放_7777精品伊人久久久大香线蕉_1—42集免费观看 | 久久久久久久久影院_亚洲天堂2017无码中文_欧美日韩一区二区三区_性生大片免费观看网站蜜芽_在线亚洲播放_2017狠狠拍狠狠狠色_69视频在线播放_大地资源在线观看视频 | 精品久久久久久中文字幕无码软件_上海富婆按摩高潮不断_AV天堂久久天堂AV_成年人免费观看视频网站_日韩新片在线观看_欧美另类人妻制服丝袜_秋霞久久久_欧美性黑人极品hd |