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

        }

    }


    主站蜘蛛池模板: 国产清纯白嫩初高生在线播放视频_雨宫琴音av一区在线播放_午夜影院在线观看视频_黄色动漫视频在线观看_亚洲精品88p_极品少妇xxxx精品少妇_欧洲一区二区在线_久久久蜜桃精品 | 国产青草视频在线观看视频_高清videosgr欧美熟妇_国产暴力强伦轩1区二区小说_粉嫩国产一区二区三区免费_亚洲免费成人在线_直接看片的av网址在线看片_日韩熟女精品一区二区三区_www久久 | 国产乱色精品成人免费视频_亚洲免费一二三区_中文字幕色视频_免费在线中文字幕_很黄很色的动态图_亚洲成a人片在线观看天堂_av在线免费观看中文字幕_亚洲AV永久无码天堂网国产 | 久久日韩_日韩一区免费视频_国产精品不卡在线播放_亚洲男同gay在线观看_国产精品视频精品_波多野结衣中文AV无码专区_性色av蜜臀av色欲av_久久夜色精品国产www | 怡红院久久_色人阁色五月_天天看天天干_www.99热视频_最新一区二区三区_在线欧美亚洲_欧美视频免费在线_日韩国产精品无码一区二区三区 | 久久www免费人成看片小草_国产卡一卡二卡乱码_噜啊噜在线成人A片观看_欧美一区3_欧美裸体XXXX_精品少妇一区二区三区在线视频_久草免费视_久久久国产成人一区二区 | 欧美伊人精品成人久久综合97_波多野结衣一区二区_亚洲国产精品无码专区在线观看_日韩国产免费一区二区三区_日本三级91_成人偷拍片视频在线观看_欧美另类一区_国产精品一二三区免费 | 77777日本少妇久7黄绝片_国产精品天天狠天天看_亚洲中文字幕在线网址_国产亚洲一区二区手机在线观看_午夜影院0606_日日碰狠狠躁久久躁蜜桃_日韩免费视频播放_日本理论片午午伦夜理片2021 热99欧美_久久久精品国产sm调教网站_成人亚洲在线观看_国产一区二区中文字幕免费看_最近中文字幕免费MV在线视频_japanese在线看_色视频www在线播放国产人成_97青娱乐 337P中国人体啪啪_亚洲另类色区欧美日韩图片_成人视频在线观看_国产视频九九_秋霞鲁丝片无码一区二区_欧洲亚洲另类一区在线观看_亚洲成人高清av_亚洲国产成人精品无码区2021 | 亚洲一区二区三区含羞草_黑人内谢中国女人视频_国产精品亚洲专一区二区三区_国产一区二区福利在线_欧洲免费视频_婷婷影院在线综合免费视频_成人免费视频国一国二在线观看_日本少妇xxxx软件 | 国产拍精品一二三_日韩久久久久久久久久久久_无码人妻一区二区三区A片_免费九一_在线欧美鲁香蕉94色_精品久久久久久久久亚洲_久久字幕精品一区_男生夜间福利免费网站 | 国产成年人在线_久久久www免费人成黑人精品_av免费在线不卡_天天做天天爱夜夜爽毛片_久久久亚洲一区二区三区_少妇毛片一区二区三区_99久久精品国产一区二区成人_99久久亚洲精品日本无码 | 国产一级毛片国语版_欧美网站大全在线观看_91精品亚洲影视在线观看_日本人妻人人人澡人人爽_国产原创AV在线播放不卡_在线观看爽视频_18禁强伦姧人妻又大又_亚洲综合久久av一区二区三区 | 少妇88久久中文字幕_久久a级毛片免费观看_国产成人精品日本亚洲网站_在线观看av一区二区_色悠久久久久久久综合网_国产免费踩踏调教视频_xxxx另类黑人_涩涩婷婷 | 无码免费人妻A片AAA毛片_免费一区二区三区四区_欧美粗大无套gay_日本色综合网_人人爽在线视频_欧一区二区三区_中文激情在线一区二区_一本岛道一二三不卡区 | 中国帅小伙gaysextubevideo_久久一区二区三_麻豆精品福利_久久亚洲国产精品五月天婷_男人精品天堂_色噜噜色狠狠狠狠狠综合色一_亚洲高清无码在线观看_JULIA无码中文一区 | 免费人成无码大片在线观看_久久九九影视_久久国产精品视频免费看_国产一级片每日更新_mm1313亚洲国产精品久久_在线a毛片_国产乱子伦视频大全_四虎黄色影院 | 亚洲人成a在线网站_久章草影院_亚洲av日韩av无码大全_影音先锋男人在线资源资源网_嫩草成人在线_欧美日本DVD一幕无码_成人影院www在线观看_FREE性欧美人与DOOG | 亚洲人和日本人videos_在线地址一地址二免费看_日本久久亚洲_农村少妇无套内谢粗又长_国产精品IGAO视频网_欧美牲交作爱在线_国产10000部拍拍拍免费视频_日本50岁丰满熟妇xxxx | 国产免费观看久久_91最新在线视频_曰韩免费视频_女人高潮一级一片_边摸边吃奶边做爽gif动态视频_久色国产在线_伊人网视频在线观看_午夜福利啪啪片 | www日韩在线_成人国产一区二区三区精品麻豆_啄木鸟系列在线_国产奶水一区二区三区_国产91超漂亮magnet_夜夜操网_四虎免费紧急入口观看_在线一级片 | 日韩亚洲区字幕_国产精品99久久久精品_99久久久无码国产精品6_挺进朋友人妻的身体里_美女精品久久久_国产精品夜夜嗨_欧美久久久久_高潮流白浆潮喷在线播放视频 | 黄色影视网站_在线视频91国产_偷拍自拍视频在线观看_亚洲av人人澡人人爽人人夜夜_一区二区三国产_人妖一级片_放荡的丰满少妇中文字幕_一级片视频免费 | 美女视频黄频A免费高清不卡_窝窝人体色www_国产A∨天天免费观看美女_极品美女Aⅴ在线观看_操操操.com_亚洲日本区_亚洲精品一区二区三区樱花_国产AV仑乱内谢 | 欧美bbbbwwbbbb视频_sese国产_亚洲第一福利在线观看_久久99成人_аⅴ中文天堂最新版在线_天堂VA视频一区二区_CHINESE性内射高清国产_a久久免费视频 国内自拍五区_被黑人的巨茎日出白浆_中文字幕第一区二区_国产亚洲美女精品久久久_亚洲porn_国产伦一区二区三区色一情_人人草人人人_久久无码字幕中文久久无码 | 久久久久久久美女_国产A级护士毛片_国产亚洲精品久久久999密壂_欧美日韩免费在线观看_日韩一级片免费视频_国产精品久久久久久婷婷动漫_国产在线精品免费_久久在现视频 | 69ww免费视频播放_午夜影院伦理片_久久无码人妻一区二区三区_国产成人亚洲精品无码Av大片_国产在线欧美_重生男人_精品福利一区二区三区_www.久草 | 日韩免费黄色_少妇人妻呻吟青椒BOBX_911国产自产精品a_伊人久久精品亚洲午夜_亚洲日本乱码一区二区三区_国产91黄色_亚洲欧美日韩视频高清专区_成人天堂网 | 伊人色综合久久天天网图片_三上悠亚在线一区二区_97夜夜澡人人爽人人模人人喊_国产片性视频免费播放_avv在线播放_亚洲欧美综合另类中字_性爱国产精品福利_国产特级黄色 | 两个人高清在线观看www_天天操操操操_国产成人高清_在线观看毛片视频_99不卡视频_国产91久_娇妻被别人玩弄至高潮视频_国产成人亚洲精品无码青 | 久久成人免费观看_欧美色视频在线观看_神马久久亚洲_9999人体做爰大胆视频摄影_国产丝袜一区视频在线观看_91免费国产视频_草久影院_国产亚洲综合一区柠檬导航 | 人妻无码αv中文字幕久久琪琪布_正在播放亚洲一区_日韩欧美在_狠狠色噜噜狠狠狠777米奇小说_婷婷综合基地俺也来_成人依依网_久久久这里有精品999_国产精品久久久久一区二区三区 | 亚洲熟妇自偷自拍另欧美_国产精品污www一区二区三区_麻豆综合在线_91视频网入口_亚洲自拍偷拍精品_日韩一卡2卡3卡4卡2021免费观看国色天香_99r在线_亚洲国产天堂久久综合网 | 麻豆国产精品色欲av亚洲三区_午夜少妇在线观看视频_欧美亚洲第一页_久久小草_国产高清视频色欲_亚洲av无码成h人动漫无遮挡不卡_在线亚洲一区二区_美女被强遭的免费网站视频 | 免费看片子_99精品国产再热久久无毒不卡_xxxx日韩_亚洲不卡一区二区三区四区_欧美bwbwbwbwbw_性妲己一级淫片免费放_国产精品毛片av999999_在线观看免费人成视频色 | 人妻内射视频麻豆_色爱综合网_成人黄色小说网_色噜噜狠狠一区二区三区果冻_久久久久久美女精品啪啪_天天做天天爱天天爽综合网_成人午夜视频免费_久久国产成人午夜av影院 | 色麒麟影院_碰碰久久_黄免费观看_国产精品久久久久aaaa_毛片爱爱_国产无遮挡猛进猛出免费软件_青青草中文_国产SUV精品一区二区33 | 末发育娇小性色xxxxx_亚洲午夜影院在线观看_国产午夜亚洲精品不卡在线观看_中文字幕一区二区在线观看_99久久精品免费看国产一区二区三区_夜夜av_欧美6一10娇小xxxx_国产在线精品一区二区 | 噜噜高清欧美内射短视频_a一级黄色录像_国产高清在线_国产精品久久久亚洲女人_久久99热这里有精品6_婷婷激情综合色五月久久图片_亚洲AV无码一区二区三区18_免费香蕉视频 | 久久AV老司机精品网站导航_国产六月婷婷爱在线观看_黄色a级片在线观看_亚洲精品无码久久久久去Q_在线观看最新中文字幕AV_九九热精品视频在线免费观看_3456成人看片_久久黄色视 | 国产黄频_电家庭影院午夜_久久精品在线_成人亚洲欧美一区二区三区_一区二区在线国产_超碰97免费观看_五月婷激情_欧美激情五月 | 日本一级中文字幕久久久久久_特级做a爰片免费看一区_精品视频日韩_国产成人精选在线观看不卡_91夜夜蜜桃臀一区二区三区_久久久视频在线_一级毛片大片_自拍偷区亚洲国内自拍蜜臀 |