免费国产网站_秋霞午夜一区二区三区视频_99热在线看_日韩精品久久一区二区_午夜看一级毛片_天天鲁在视频在线观看

  • 您的位置:首頁 > 新聞動態 > UE4

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

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

    如何調用第三方封裝好的庫制作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));

        }

    }


    主站蜘蛛池模板: 草逼视频网站_911精品国产亚洲日本美国韩国_国产精品色呦呦_四虎精品免费视频_蜜桃视频在线免费观看_国产一级中文字幕 | 色一情一乱一伦一视频免费看_日本中文字幕二区_岛国aa_国产精品欧美激情_免费能看大奶子的黄色1片._www.国产黄色 | 52gao在线视频_欧美视频一级_av成人免费网站_久久精品国产一区二区_国产中文字幕在线_91美女高潮出水 | 亚洲不卡视频_久久精品国产精品久久久_www高清在线视频日韩欧美_蜜臀精品久久久久久蜜臀_极品福利视频_JAPANESE高潮喷水 | 免费99精品国产人妻自在现线_蜜臀国产在线视频_亚洲国产精品久久亚洲精品_中文精品在线观看_欧美日韩视频在线_久久久久亚洲精品无码系列 | 国产农村一级特黄α**毛片_精品一区二区三区四区五区_亚洲一区视频在线播放_日本丰满的人妻HD高清在线_日韩高清专区_日本免费网站大全视频 | 国产成人精品优优AV_久久成人国产精品免费_有剧情的av_日日摸日日碰夜夜爽视频_久久精品2019中文字幕_2021av天堂网手机版 | 三级国产_日韩一级黄色av_男人猛躁进女人全程无遮挡_h亚洲视频_制服丝袜有码中文字幕在线_亚洲精品三级 | 日本五级片_久久久精品视频成人_国产又色又爽又黄刺激视频_国产女极品在线观看AV_欧美亚洲国产激情_97色免费视频 | 日韩欧美第二页_久久青青精品_秋霞一级鲁丝片免费观看_亚洲综合三区_性爱视频网站_女优一区二区三区 | 99国精产品一区一区_欧美一级黄色片免费看_亚洲色欲在线播放一区_快穿妲己高H荡肉呻吟NP_亚洲欧美精品伊人久久_综合久久中文字幕 | 女人被添全过程a片免费视频_99精品国产高清_亚洲一区二区在线免费_免费看片亚洲_亚洲日韩成人无码_美女毛片在线观看 | 天堂最新版在线_国产69自拍_男人把女人桶到爽爆的视频_69无线观看免费版_久草视频在线免费_五月天综合网缴情五月中文 | 国产精品国产三级国产专区53_欧美精品黑人粗大免费_日本一区二区在线免费_日韩一区二区三区在线看_欧美日韩激情亚洲国产_91周晓琳系列在线观看第10部 | 国产婷婷色一区二区三区_国产免费看片_97毛片_成人性生爱a∨_麻豆免费在线观看视频_国产亚洲精品久久久久久牛牛 | 男人和女人日b视频_国产精品高潮呻吟久久av免费动漫_一级偷拍视频_亚欧综合在线_日韩一级在线_亚洲国产最新av片 | 神马久久免费视频_未禁18成禁人免费无遮挡_操你啦青青草_秋霞国产午夜伦午夜福利片_国产视频激情_爱爱视频免费在线观看 | 日本啪视频_青青草在观免费观看久_伊人色婷婷五月天激情狠狠五月天_亚洲天堂成人在线_久久免费一区_香蕉网站黄色 | 久久精品国产99久久久香蕉_欧美资源在线观看_一个人免费观看www视频二_国产Chinese男男GAy视频网_国产精品9区_精品久久九 欧美性孟交_日韩欧美国产视频一区_亚洲成人第一_在线看黄色av_免费的一级视频_一二三四视频在线观看中文版免费 | 国产乱XXXXX97国语对白_白浆一区二区_欧美日日干_精品一区二区三区四区av_日本xxxxxxx18—19_56av国产精品久久久久久久 | 少妇做爰高潮呻吟A片免费_亚洲精品久久久久久首妖_国产日产精品一区二区三区四区功能_小明看看免费平台永久_国产精品毛片久久_色久综合网 | 全免费a级毛片免费看视频免费下_亚洲高清日本_一区二区三区性视频_avman最新地址_国产日本视频一区二区_欧美日韩日本国产 免费无码av一区_97超碰免费人妻中文_在线观看91精品国产网站_波多野结衣AV在线无码中文观看_a级黑粗大硬长爽猛出猛进_亚洲日韩欧美在线一区二区 | 国产中的精品av涩差av_精品国产1_玩两个丰满老熟女在线视频_国产区免费观看_欧美精品第一页_蛇女欲潮性三级 | 国产片av不卡在线播放_日本爽快片18禁片_桃色福利影院_中文字幕久久久久人妻中出_亚洲成av人片一区二区三区_男人的天堂免费A级毛片无码 | 亚洲精品成人A片无码网站_女性高爱潮aaaa级视频免费_无码日韩人妻AV一区二区三区_伊人久久大香线蕉av桃_亚洲欧美日韩国产手机在线_久久久久久一级毛片免费无遮挡 | 春色校园综合人妻av_日韩有码中文字幕二区_日本美女一区二区三区_国产女精品_狠狠色综合网站久久久久久久高清_欧美国产综合视频 | 午夜在线观看视频_韩国日本福利在线_最新日本视频_在线观看欧美精品_免费播放片ⅴ免费人成视频_成人av片在线观看 | 女人自慰Aa大片_五月狠狠亚洲小说专区_欲色天天网综合久久_国产天堂一区二区_国产精品偷伦视频免费观看国产_国产裸体XXXX视频 | 高潮videossex潮喷_91欧美在线视频_免费日韩中文字幕_亚洲码一区二区三区_八个少妇沟厕小便漂亮各种大屁股_激情久久精品 | 国产精品一级_大地资源在线观看中文第二页_亚洲人成网站在线播放vr_纯肉浪货高H调教SM_无码精品国产VA在线观看_男女啪啪高清无遮挡免费 | 欧美日韩视频在线第一区_中文字幕第2页不卡_久久9999免费视频_久久久久久一级_久久久综_亚洲永久字幕 | 久久精品一区二区三区四区毛片_免费爆乳精品一区二区_久久国产精品视频在线_麻豆黄色网_www久久久久久_福利视频在线 | 久热在线_久久久久久夜精品精品免费_欧美日韩国产精品免费观看_中文字幕一区二区三区有限公司_中文字幕永久免费在线观看_青草视频在线观看免费 | 国产精品VA尤物在线观看蜜芽_国产人成在线观看_国产无遮挡免费真人视频在线观看_青草视频久久_国产亚洲精品久久久久婷婷瑜伽_亚洲AV无码男人的天堂 | 丰满少妇裸体免费视频_国产不卡在线观看视频_精品社区_99久久精品费精品国产一区二区_在线观看av你懂的_午夜琪琪网 | 农村少妇真人毛片视频_久久久91精品国产_sm斯慕视频国产踩踏视频sm_毛茸茸富婆xxxx乱大交_精品含羞草免费视频观看_爱看av网站 | 亚洲a级黄色_yourporn国产精品_国语自产拍精品香蕉在线播放_亚洲精品无码一区二区三区四虎_成人三级视频在线观看不卡_日本一级黄色录像 | 国产精品久久久久久久久免费看_天天干天天天_丰满少妇作爱视频免费观看_精品三级在线看_久久精品中文视频_琉璃免费看 | fc2在线_久久精品私人影院免费看_久久精品一区二区不卡_国产精品视频999_国产午夜精品一区二区三区在线观看_澳门精品无码一区二区三区 | 欧美在线二区_大战刚结婚的少妇_91rb成人_freechinese内射少妇_精品一区二区视频_a级黄色毛片视频 | 国产自产视频_双腿张开被9个黑人调教_999这里只有是极品_欧美亚洲综合成人a∨在线_亚欧乱色熟女一区二区三区_男男19禁啪啪无遮挡免费 |