DEFINE_SCRIPT_REN(SCN_IKCompute, ComputeIK, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_INT(IKNumber) , "If available, compute IK in the scene. You can compute IK for several different render
Indicate it in the [instance].
", { ComputeSmallSceneIK(Smsc,IKNumber); }) DEFINE_SCRIPT(TRK_StatusColorGet, CATEGORY(Tracking) PARAM_INT_OPT(TrackeurID, 0), "Get mesh status color", { int status; if (TrackeurID >= MAX_ID) TrackeurID = MAX_ID-1; if (TrackeurID < 0) TrackeurID= 0; if (ID_TABLE[TrackeurID]) { RETURN_COLOR(ID_TABLE[TrackeurID]->StatusMeshColor); } else { RETURN_COLOR(0); } }) DEFINE_SCRIPT(TRK_ForceTracking, CATEGORY(Media AVI) PARAM_INT_OPT(set, 1), "Stock the Avi file into image file", { ForceTraking = set; }) DEFINE_SCRIPT(TRK_CameraGetFPS, CATEGORY(Tracking) ,"Get FPS of media tracking source", { RETURN_INT((u32)(1000.0 / (double)(trackMiliseconds_x_16>>8))); }) DEFINE_SCRIPT_REN(TRK_IDScaleSet, IDSetScale, CATEGORY(Tracking) PARAM_INT(IDNum) PARAM_VECTOR(NewScale), "Set the scale of the tracking mask", { ID_SetScale(IDNum , &NewScale); }) DEFINE_SCRIPT_REN(TRK_IDAutodetectParamsSet, IDSetAutodetectParams, CATEGORY(Tracking) PARAM_INT(IDNum) PARAM_FLOAT(ZoomFactor) PARAM_FLOAT(VerticalFactor) PARAM_FLOAT(RotationAngle), "Set better match auto-detect parrams", { Vector datas; datas.x = ZoomFactor; datas.y = VerticalFactor; datas.z = RotationAngle; ID_SetHaarParrams(IDNum , &datas); }) DEFINE_SCRIPT(TRK_IDNew, CATEGORY(Tracking) PARAM_INT(IDNum), "Create New ID", { ID_New(IDNum); }) DEFINE_SCRIPT(CAMERA_SetRes, CATEGORY(CAMERA) PARAM_INT_OPT(Witdh,320), "Change default resolution of camera. Use this before create media camera. Default is 320", { if (Witdh < 320) Witdh = 320; extern int CAMERA_SpecifyedW; CAMERA_SpecifyedW = Witdh; }) DEFINE_SCRIPT(CAMERA_List, CATEGORY(CAMERA) PARAM_INT_OPT(refresh, 0), "Get table of available camera
Warning, if only one camera is avilable, return camera name (no table)", { extern char WebCamNames[64][256]; extern int NbWebCams; if (refresh) { int GetWebCamNames(char compressors[][256], int *nbCompressors, int maxCompressors); GetWebCamNames(WebCamNames, &NbWebCams, 64); } for (int camIdx=0; camIdxif default camera changed, return true, else return false", { extern TCHAR CurrWebCam[256]; if (strcmp(camera, CurrWebCam)) { strcpy(CurrWebCam, camera); SetIniValue(CamcamCCM, "CurrWebCam", camera); SaveIniFile(CamcamCCM); u32 MediaIndex; if (GetMediaFromString("CAM1", &MediaIndex)) { int nbRef = 0; for (;ID_MEDIA[MediaIndex];nbRef++) DestroyMedia(MediaIndex); for (int i=0; iThe function returns the true new ID", { if (IDNum < NumberOfID) { CurrentID = IDNum; } else { CurrentID = ID_New(); } RETURN_INT( CurrentID); }) DEFINE_SCRIPT(TRK_IDMeshLoad, CATEGORY(Tracking) PARAM_INT(IDNum) PARAM_STRING(MeshName), "Load an mesh object for ID", { FILE *F; char path[2048]; if (IDNum >= NumberOfID) { ID_New(IDNum); } sprintf(path, ".\\%s", MeshName); F = fopen(path,"rt"); if (!F) { sprintf(path, ".\\%s.obj", MeshName); F = fopen(path,"rt"); } if (F) { extern u32 LoadObj(Mesh *LoadMesh,FILE *F); if (VALIDATE_ID(IDNum)) { Mesh MyMesh; LoadObj(&MyMesh,F); MyMesh.ulNumberOfSubObjects = 1; MyMesh.FaceSubObjectIndexes[0] = MyMesh.NumberOfFaces; MyMesh.FaceSubObjectIndexes[1] = 0; MyMesh.BVIfy(); ID_SetMesh(IDNum, &MyMesh); //ID_TABLE[IDNum]->p_UsedMesh = CopyMesh(&MyMesh); //LoadObj(ID_TABLE[IDNum]->p_UsedMesh, F); } else fclose(F); } }) DEFINE_SCRIPT_REN(SCN_CameraCopy, CopyCamera, CATEGORY(Small Scene) PARAM_SCENE(DestSmsc) PARAM_SCENE(SourceSmsc), "copy camera(CP) from SOURCE to DEST", { DestSmsc->CameraPosition = SourceSmsc->CameraPosition; }) #ifndef SKIMMED_NET DEFINE_SCRIPT_REN(NET_PortSet, SetNetPort, CATEGORY(Network) PARAM_INT(Port), "return 0 if can't open port", { RETURN_INT( NetObj->SetNetPort(Port)); }) #endif DEFINE_SCRIPT_REN(DRW_Text, DrawText, CATEGORY(Drawing) PARAM_INT(X) PARAM_INT(Y) PARAM_COLOR(color) PARAM_STRING(StringToWrite), "draw the text in current viewport", { if (!(SkipFunctions & SKIP_DRAWING)) { color = ARGB2ABGR(color); DI->DrawText((unsigned char *)StringToWrite,(float)X,(float)Y,1.0f,1.0f, color); } }) DEFINE_SCRIPT_REN(DRW_TextCenter, DrawTextCenter, CATEGORY(Drawing) PARAM_COLOR(color) PARAM_STRING(StringToWrite), "draw the text in current viewport", { if (!(SkipFunctions & SKIP_DRAWING)) { color = ARGB2ABGR(color); DI->DrawTextCentered((unsigned char *)StringToWrite, color); } }) DEFINE_SCRIPT_REN(DRW_FontText, RenderText, CATEGORY(Drawing) PARAM_INT(X) PARAM_INT(Y) PARAM_COLOR(color) PARAM_STRING(FontName) PARAM_STRING(StringToWrite) PARAM_INT_OPT(BlendingMode, -1) PARAM_FLOAT_OPT(scale, 1.0), "draw the text in current viewport with specified font
Font is a media specified by [FontName Size Mode FONT]
Mode is a mix of the options:
B: Bold - I: Italic - U: Underline
A: Antialiased - C: Contour - T: Transparency ", { if (!(SkipFunctions & SKIP_DRAWING)) { color = ARGB2ABGR(color); RenderText((unsigned char *)StringToWrite,(float)X,(float)Y,scale,scale, color, FontName, BlendingMode); } }) DEFINE_SCRIPT(DRW_Line, CATEGORY(Drawing) PARAM_INT(X1) PARAM_INT(Y1) PARAM_INT(X2) PARAM_INT(Y2) PARAM_COLOR(color) PARAM_INT_OPT(Lenght, 0), "Draw a line between (X1,Y1) and (X2,Y2)", { Vector A(X1,Y1,0); Vector B(X2,Y2,0); color = ARGB2ABGR(color); if (!(SkipFunctions & SKIP_DRAWING)) DI->Draw2DLine(color, &A, &B, Lenght); }) DEFINE_SCRIPT(DRW_Line3D, CATEGORY(Drawing) PARAM_SCENE(SmSc) PARAM_VECTOR(P1) PARAM_VECTOR(P2) PARAM_COLOR(color) PARAM_INT_OPT(Lenght, 0) PARAM_INT_OPT(ZTest, 1), "Draw a line between P1 and P2 in scene world", { if (!(SkipFunctions & SKIP_DRAWING)) { float Current_focale; if (SmSc->fFocalToUseForNextRender == 0) Current_focale = GetCurrentFocale(); else Current_focale = SmSc->fFocalToUseForNextRender; if (SmSc->HoloGraphicWindowWidth) DI->Holographic(&SmSc->HoloGraphicVector,SmSc->HoloGraphicWindowWidth); else DI->Perspective(Current_focale); MATRIX CP; MATRIX MatrixToSet; MATRIX WM; RS LineRS; GLOB_SetDefaultRS(&LineRS); if (!ZTest) LineRS.NOZTEST = 1; LineRS.BlendingMode = 1; DI->SetRS(&LineRS, -1); CP = SmSc->CameraPosition; CP.K *= -1.0f; CP.Inverse(MatrixToSet); WM = SmSc->RootMatrix; WM *= MatrixToSet; DI->Matrix(&WM); color = ARGB2ABGR(color); DI->DrawLine(color, &P1, &P2, Lenght); } }) DEFINE_SCRIPT(DRW_Triangle, CATEGORY(Drawing) PARAM_VECTOR(P1) PARAM_VECTOR(P2) PARAM_VECTOR(P3) PARAM_VECTOR_OPT(UV1, Vector(0,0,0)) PARAM_VECTOR_OPT(UV2, Vector(1,0,0)) PARAM_VECTOR_OPT(UV3, Vector(1,1,0)) PARAM_MEDIA(Mi) PARAM_INT_OPT(BlendMode,0), "Draw triangle with the specified uv", { if (!(SkipFunctions & SKIP_DRAWING)) { RenderTriangle(NULL, Mi, &P1,&P2,&P3,&UV1,&UV2,&UV3, BlendMode); } }) DEFINE_SCRIPT(DRW_Triangle3D, CATEGORY(Drawing) PARAM_SCENE(SmSc) PARAM_VECTOR(P1) PARAM_VECTOR(P2) PARAM_VECTOR(P3) PARAM_VECTOR_OPT(UV1, Vector(0,0,0)) PARAM_VECTOR_OPT(UV2, Vector(1,0,0)) PARAM_VECTOR_OPT(UV3, Vector(1,1,0)) PARAM_MEDIA(Mi) PARAM_INT_OPT(BlendMode,0), "Draw triangle with the specified uv", { if (!(SkipFunctions & SKIP_DRAWING)) { RenderTriangle(SmSc, Mi, &P1,&P2,&P3,&UV1,&UV2,&UV3, BlendMode); } }) DEFINE_SCRIPT_REN(SCN_Load, LoadSmSc, CATEGORY(Small Scene) PARAM_STRING(SceneName), "load 3D", { UnicID SmScID = SmallSceneDico.IsExist(SceneName); if (SmScID == -1) { if (LoadSmSc(SceneName) == -1) { //sprintf(LuaErrors, "Scene %s not Found", SceneName); RETURN_BOOL(0); } else { RETURN_BOOL(1); } } else { // Recreate Media if (virtualy destroyed) SmallScene *SmSc; SmSc = pSmallScenes[SmallSceneDico.mpst_Dico[SmScID].AssociatedValue]; ReLoadSmSc(SmSc); RETURN_BOOL(1); } }) DEFINE_SCRIPT(SCN_Delete, CATEGORY(Small Scene) PARAM_STRING(SceneName), "delete 3D", { DeleteSmSc(SceneName); }) DEFINE_SCRIPT(SCN_LinkObjectToVertex, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_INT(index) PARAM_STRING(DummyObject) PARAM_STRING(SceneObject) PARAM_INT_OPT(Force, 0), "Affect Dummy object to vertex in Scene Object", { RETURN_BOOL(AffectObjectToVertex(Smsc, index, DummyObject, SceneObject, Force)); }) DEFINE_SCRIPT(SCN_LinkObjectSnap, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_STRING(DummySnapSrc) PARAM_STRING(DummySnapDst), "Link snap dummy to dummy", { RETURN_BOOL(ObjectLinkSnap(Smsc, DummySnapSrc, DummySnapDst)); }) DEFINE_SCRIPT(SCN_LinkObjectScale, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_STRING(DummySnapSrc1) PARAM_STRING(DummySrc2) PARAM_STRING(DummySnapDst1) PARAM_STRING(DummyDst2) PARAM_INT(axe) PARAM_INT_OPT(mode, 0), "link snap dummy to dummy adding scale factor
Scale depends on used axes", { RETURN_BOOL(ObjectLinkScale(Smsc, DummySnapSrc1, DummySrc2, DummySnapDst1, DummyDst2, axe, mode)); }) DEFINE_SCRIPT(SCN_LinkScaleVectorGet, CATEGORY(Small Scene) PARAM_MATRIX(SrcMatrix) PARAM_VECTOR(SrcDummy) PARAM_MATRIX(DstMatrix) PARAM_VECTOR(DstDummy) PARAM_INT(axe) PARAM_INT_OPT(mode, 0), "link snap dummy to dummy adding scale factor
Scale depends on used axes", { Vector scaleVect = GetScaleVector(&SrcMatrix, &SrcDummy, &DstMatrix, &DstDummy, axe, mode); RETURN_VECTOR(&scaleVect); }) DEFINE_SCRIPT_REN(SCN_Render, Render, CATEGORY(Small Scene) PARAM_STRING(SmallSceneName), "Render smallscene", { START_RASTER(Rendering); if (!(SkipFunctions & SKIP_RENDER)) { RETURN_BOOL(RenderSmallScene(SmallSceneName)); } else { RETURN_BOOL(true); } STOP_RASTER(Rendering); }) DEFINE_SCRIPT(SCN_RenderIK, CATEGORY(Small Scene) PARAM_SCENE(SmallScene), "Render smallscene", { START_RASTER(Rendering); if (!(SkipFunctions & SKIP_RENDER)) DrawSmallSceneIK(SmallScene); STOP_RASTER(Rendering); }) DEFINE_SCRIPT(SCN_ReverseRender, CATEGORY(Small Scene) PARAM_STRING(SmallSceneName) PARAM_FLOAT_OPT(ComputeAlpha,0.0), "Reverse Render smallscene, ComputeAlpha mean compute alpha according to normale incidence to camera. 0 Will comupte alpha = 1", { START_RASTER(Rendering); if (!(SkipFunctions & SKIP_RENDER)) { DI->ComputeMaskAlpha = ComputeAlpha; ReverseRenderSmallScene(SmallSceneName); DI->ComputeMaskAlpha = 0.0; } STOP_RASTER(Rendering); }) DEFINE_SCRIPT_REN(SCN_MatrixReset, ResetMatrix, CATEGORY(Small Scene) PARAM_AFFECT(Affect) PARAM_SCENE(Smsc), "[.T] = Translation
[.R] = Rotation
[.TR] or nothing = Rotation + translation
restor small scene initial position", { if (Affect & 1) { Smsc->RootMatrix.T = Vector(0,0,0); } if (Affect & 2) { Smsc->RootMatrix.I = Vector(1,0,0); Smsc->RootMatrix.J = Vector(0,1,0); Smsc->RootMatrix.K = Vector(0,0,1); } ComputeSmallSceneHierarchie(Smsc); }) DEFINE_SCRIPT(SCN_RootMatrixGet, CATEGORY(Small Scene) PARAM_SCENE(Smsc), "Get Root Matrix", { RETURN_MATRIX(&Smsc->RootMatrix); }) DEFINE_SCRIPT(SCN_RootMatrixSet, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_MATRIX(Mat), "Set Root Matrix", { Smsc->RootMatrix = Mat; ComputeSmallSceneHierarchie(Smsc); }) DEFINE_SCRIPT(SCN_MatrixSet, CATEGORY(Small Scene) PARAM_AFFECT(Affect) PARAM_SCENE(SmSc) PARAM_MATRIX(matrix) PARAM_FLOAT_OPT(Focale, 0), "Affect a track matrix to a scene
[.TR] mean:
[.T] = Translation
[.R] = Rotation
[.S] = Mask scale
[.TR] or nothing = Rotation + translation", { Vector matrixScale; matrixScale.x = matrix.I.Norm(); matrix.I.Normalize(); matrixScale.z = matrix.J.Norm(); matrix.J.Normalize(); matrixScale.y = matrix.K.Norm(); matrix.K.Normalize(); AffectTrackMatrixToSmallScene(0, SmSc,Affect,&matrix); if (Affect & 256) { AffectTrackScaleToSmallScene(SmSc,&matrixScale); } if (Focale == 0) SmSc->fFocalToUseForNextRender = ID_MEDIA[MediaToTrack]->MediaFocale;//*/ else SmSc->fFocalToUseForNextRender = Focale; }) DEFINE_SCRIPT(SNC_SubMatrixSet, CATEGORY(Tracking) PARAM_AFFECT(Affect) PARAM_SCENE(SmSc) PARAM_STRING(ObjectName) PARAM_MATRIX(matrix) PARAM_INT_OPT(AxeModifier, 0), "Affect trackeur matrix to an object of a small scene
[.TR] mean:
[.T] = Translation
[.R] = Rotation
[.S] = Mask scale
[Index] object number - Warning begin at 1 !!
[.TR] or nothing = Rotation + translation", { AffectTrackSubMatrixToSmallScene(0, SmSc,ObjectName,Affect,&matrix, AxeModifier); }) DEFINE_SCRIPT_REN(SCN_MediaMatrixSet, MediaSetMatrix, CATEGORY(Small Scene) PARAM_SCENE(SmSc) PARAM_MEDIA(Mi) PARAM_INT(TrackNum) PARAM_INT_OPT(maxStatus, 0) PARAM_INT_OPT(useTimeLineCorrection, 0), "Medianame is used for finding current frame number
Max Status sets allowed track status", { RETURN_INT(MediaSetMatrix(SmSc,Mi,TrackNum, maxStatus, useTimeLineCorrection)); }) DEFINE_SCRIPT_REN(TRK_MatrixSet, SetTrackMatrix, CATEGORY(Tracking) PARAM_AFFECT(Affect) PARAM_INT(TrackeurID) PARAM_SCENE(SmSc) PARAM_INT_OPT(SmoothModeNumber, 0), "Affect trackeur matrix to a small scene
[.TR] mean:
[.T] = Translation
[.R] = Rotation
[.S] = Mask scale
[.TR] or nothing = Rotation + translation", { MATRIX smoothMatrix; if (TrackeurID >= MAX_ID) TrackeurID = MAX_ID-1; if (TrackeurID < 0) TrackeurID = 0; if (ID_TABLE[TrackeurID]) { smoothMatrix = ID_TABLE[TrackeurID]->CurrentMatrix_U; AffectTrackMatrixToSmallScene(SmoothModeNumber, SmSc,Affect,&smoothMatrix); if (Affect & 256) AffectTrackScaleToSmallScene(SmSc,&ID_TABLE[TrackeurID]->vModelScale); if (ID_TABLE[TrackeurID]->SF_U.IsAnimatedTrack && (ID_TABLE[TrackeurID]->AnimatedMedia != -1)) SmSc->fFocalToUseForNextRender = ID_MEDIA[ID_TABLE[TrackeurID]->AnimatedMedia]->MediaFocale; else SmSc->fFocalToUseForNextRender = ID_MEDIA[MediaToTrack]->MediaFocale;//*/ }; }) DEFINE_SCRIPT(TRK_SubMatrixSet, CATEGORY(Tracking) PARAM_AFFECT(Affect) PARAM_INT(TrackeurID) PARAM_SCENE(SmSc) PARAM_STRING(ObjectName) PARAM_INT_OPT(AxeModifier, 0) PARAM_INT_OPT(SmoothModeNumber, 0), "Affect trackeur matrix to an object of a small scene
[.TR] mean:
[.T] = Translation
[.R] = Rotation
[.S] = Mask scale
[Index] object number - Warning begin at 1 !!
[.TR] or nothing = Rotation + translation", { MATRIX smoothMatrix; if (TrackeurID >= MAX_ID) TrackeurID = MAX_ID-1; if (TrackeurID < 0) TrackeurID = 0; if (ID_TABLE[TrackeurID]) { smoothMatrix = ID_TABLE[TrackeurID]->CurrentMatrix_U; AffectTrackSubMatrixToSmallScene(SmoothModeNumber, SmSc,ObjectName,Affect,&smoothMatrix, AxeModifier); if (ID_TABLE[TrackeurID]->SF_U.IsAnimatedTrack && (ID_TABLE[TrackeurID]->AnimatedMedia != -1)) SmSc->fFocalToUseForNextRender = ID_MEDIA[ID_TABLE[TrackeurID]->AnimatedMedia]->MediaFocale; else SmSc->fFocalToUseForNextRender = ID_MEDIA[MediaToTrack]->MediaFocale;//*/ }; }) DEFINE_SCRIPT(TRK_MatrixChange, CATEGORY(Tracking) PARAM_INT(TrackeurID) PARAM_MATRIX(matrix), "Set the tracker matrix
[.TR] mean:
[.T] = Translation
[.R] = Rotation
[.S] = Mask scale
[.TR] or nothing = Rotation + translation", { if (TrackeurID >= MAX_ID) TrackeurID = MAX_ID-1; if (TrackeurID < 0) TrackeurID = 0; if (ID_TABLE[TrackeurID]) { Vector matrixScale; matrixScale.x = matrix.I.Norm(); matrix.I.Normalize(); matrixScale.z = matrix.J.Norm(); matrix.J.Normalize(); matrixScale.y = matrix.K.Norm(); matrix.K.Normalize(); ID_TABLE[TrackeurID]->CurrentMatrix_U = matrix; ID_SetScale(TrackeurID,&matrixScale); } }) DEFINE_SCRIPT_REN(TRK_MatrixGet, GetTrackMatrix, CATEGORY(Tracking) PARAM_AFFECT(Affect) PARAM_INT(TrackeurID) PARAM_INT_OPT(SmoothNumber, 0) PARAM_INT_OPT(AxeInversion, 0) , "return trackeur matrix
[.TR] mean:
[.T] = Translation
[.R] = Rotation
[.TR] or nothing = Rotation + translation", { MATRIX smoothMatrix; Vector scaleVector; if (TrackeurID >= MAX_ID) TrackeurID = MAX_ID-1; if (TrackeurID < 0) TrackeurID = 0; if (ID_TABLE[TrackeurID]) { smoothMatrix = ID_TABLE[TrackeurID]->CurrentMatrix_U; SetSmoothMatrix(SmoothNumber, &smoothMatrix, Affect, AxeInversion); if (Affect & 256) { smoothMatrix.I *= ID_TABLE[TrackeurID]->vModelScale.x; smoothMatrix.J *= ID_TABLE[TrackeurID]->vModelScale.z; smoothMatrix.K *= ID_TABLE[TrackeurID]->vModelScale.y; } switch (Affect) { case 1: RETURN_VECTOR(&smoothMatrix.T);break; case 4: RETURN_VECTOR(&smoothMatrix.I);break; case 8: RETURN_VECTOR(&smoothMatrix.J);break; case 16: RETURN_VECTOR(&smoothMatrix.K);break; case 256: RETURN_VECTOR(&ID_TABLE[TrackeurID]->vModelScale);break; case 258: case 2: memset(&smoothMatrix.T, 0, sizeof(smoothMatrix.T)); case 0: case 259: case 3: RETURN_MATRIX(&smoothMatrix);break; case 257: { MATRIX ts; ts.I *= ID_TABLE[TrackeurID]->vModelScale.x; ts.J *= ID_TABLE[TrackeurID]->vModelScale.y; ts.K *= ID_TABLE[TrackeurID]->vModelScale.z; ts.T = smoothMatrix.T; RETURN_MATRIX(&ts); break; } } } }) DEFINE_SCRIPT(TRK_BOOT, CATEGORY(Tracking) PARAM_INT(TrackeurID) PARAM_INT(ON_OFF), "Use for script Manual Boot, 1-> Begin, 0->End", { if (ON_OFF) { ID_Reset(TrackeurID); ID_TABLE[TrackeurID]->SF_U.CamPlaced = 0; ID_TABLE[TrackeurID]->CurrentMatrix_U.T.z = 90.0f; ID_TABLE[TrackeurID]->SF_U.FromScratch = 0; } else { ID_TABLE[TrackeurID]->SF_U.Booted = 1; ID_TABLE[TrackeurID]->SF_U.Ready2Learn = 1; } }) DEFINE_SCRIPT_REN(TRK_IDCreateFromMedia, CreateIDFromMedia, CATEGORY(Tracking) PARAM_INT(ID) PARAM_INT(TrackNum) PARAM_MEDIA(Mi), "Affect an animated matrix from a media to a new ID", { if (ID != 0) { ID_NewAnimated(ID,Mi,TrackNum); Vector Scale; Scale = Vector(1,1,1); if (ID_MEDIA[Mi]->Tracks) ID_MEDIA[Mi]->Tracks->GetScale(TrackNum,&Scale); ID_SetScale(ID,&Scale); } }) DEFINE_SCRIPT_REN(DRW_Quad, DRW_QuadBlend, CATEGORY(Drawing) PARAM_INT(X) PARAM_INT(Y) PARAM_INT(SizeX) PARAM_INT(SizeY) PARAM_MEDIA(Mi) PARAM_INT_OPT(BlendMode,0) , "!Medianame must be inside '<' and '>'
BLENDING MODES: 0=COPY;1=ALPHA;2=ADD;3=ALPHA PREMULT;4=PREVIOUS ALPHA;5=Multiply", { if (!(SkipFunctions & SKIP_DRAWING)) { RS LocalRS; GLOB_SetDefaultRS(&LocalRS); LocalRS.BlendingMode = BlendMode; LocalRS.BACKFACE = 0; DI->DrawQuad(ID_MEDIA[Mi]->ulAssociatedTextureIndex,X,X+SizeX,Y,Y+SizeY,&LocalRS); } }) DEFINE_SCRIPT(DRW_QuadDistord, CATEGORY(Drawing) PARAM_INT(X) PARAM_INT(Y) PARAM_INT(SizeX) PARAM_INT(SizeY) PARAM_MEDIA(Mi) PARAM_INT_OPT(Blend,0), "!Medianame must be inside '<' and '>' ; Same as DrawQuad, but no ratio correction. Optional parram specify blendingmode", { RS LocalRS; GLOB_SetDefaultRS(&LocalRS); LocalRS.BlendingMode = Blend; LocalRS.BACKFACE = 0; if (!(SkipFunctions & SKIP_DRAWING)) DI->DrawQuadDistord(ID_MEDIA[Mi]->ulAssociatedTextureIndex,X,X+SizeX,Y,Y+SizeY,&LocalRS); }) DEFINE_SCRIPT(DRW_Circle, CATEGORY(Drawing) PARAM_FLOAT(X) PARAM_FLOAT(Y) PARAM_FLOAT(InnerRadius) PARAM_FLOAT(OuterRadius) PARAM_FLOAT(ClockDegreeStart) PARAM_FLOAT(ClockDegreeEnd) PARAM_MEDIA(Mi) PARAM_INT_OPT(Blend,0), "Same as DrawQuadDistord, Read carefully the parrameters", { RS LocalRS; GLOB_SetDefaultRS(&LocalRS); LocalRS.BlendingMode = Blend; LocalRS.BACKFACE = 0; Vector Center = Vector(X,Y,0); if (!(SkipFunctions & SKIP_DRAWING)) DI->DrawCircle(ID_MEDIA[Mi]->ulAssociatedTextureIndex,&Center,InnerRadius,OuterRadius,ClockDegreeStart,ClockDegreeEnd,&LocalRS); }) DEFINE_SCRIPT(DRW_Patch32, CATEGORY(Drawing) PARAM_LIST_VECTOR(pCurves) PARAM_LIST_INT(pColors) PARAM_INT(NumberOfCurves) PARAM_MEDIA(Mi) PARAM_INT_OPT(drawHalf, 0) PARAM_INT_OPT(Blend,0) PARAM_INT_OPT(HDIV, 0) PARAM_INT_OPT(VDIV, 0), "Same as DrawCircle, See phiippe V for more info", { RS LocalRS; Color4 colors[8]; GLOB_SetDefaultRS(&LocalRS); LocalRS.BlendingMode = Blend; LocalRS.USEVERTEXCOLORS = NbpColors > 0; for (int i=0; i<8; i++) { colors[i] = Color4(pColors[i]); } if (!(SkipFunctions & SKIP_DRAWING)) DI->DrawPatch32(ID_MEDIA[Mi]->ulAssociatedTextureIndex,pCurves,colors,drawHalf,NumberOfCurves, HDIV, VDIV, &LocalRS); }) DEFINE_SCRIPT(DRW_Patch32Normals, CATEGORY(Drawing) PARAM_LIST_VECTOR(pCurves) PARAM_LIST_COLOR(pColors) PARAM_INT(NumberOfCurves) PARAM_MEDIA(Mi) PARAM_INT_OPT(drawHalf, 0) PARAM_INT_OPT(Blend,0) PARAM_INT_OPT(HDIV, 0) PARAM_INT_OPT(VDIV, 0) PARAM_INT_OPT(InvertInter, 0), "Same as DRW_Patch32, but points 4-7 and 12-15 are normals", { RS LocalRS; GLOB_SetDefaultRS(&LocalRS); Color4 color[8]; LocalRS.BlendingMode = Blend; LocalRS.USEVERTEXCOLORS = NbpColors > 0; PatchPointsToNormals(pCurves, color, pColors, InvertInter); if (!(SkipFunctions & SKIP_DRAWING)) DI->DrawPatch32(ID_MEDIA[Mi]->ulAssociatedTextureIndex,pCurves,color,drawHalf,NumberOfCurves,HDIV, VDIV,&LocalRS); }) DEFINE_SCRIPT(PATCH32_XYZFromUV, CATEGORY(PATCH32) PARAM_LIST_VECTOR(pCurves) PARAM_VECTOR(UV), "get coord from UV", { Vector V = PatchGetXYZFromUV(pCurves, UV); RETURN_VECTOR(&V); }) DEFINE_SCRIPT(PATCH32_XYZFromUVNormals, CATEGORY(PATCH32) PARAM_LIST_VECTOR(pCurves) PARAM_VECTOR(UV) PARAM_INT_OPT(InvertInter, 0), "get coord from UV", { PatchPointsToNormals(pCurves, NULL, NULL, InvertInter); Vector V = PatchGetXYZFromUV(pCurves, UV); RETURN_VECTOR(&V); }) DEFINE_SCRIPT(PATCH32_UVFromXYZ, CATEGORY(PATCH32) PARAM_LIST_VECTOR(pCurves) PARAM_VECTOR(Point) PARAM_VECTOR_OPT(vMin, Vector()) PARAM_VECTOR_OPT(vMax, Vector(1,1,1)), "get UV from coord", { Vector V = PatchGetUVFromXYZ(pCurves, Point, vMin, vMax); RETURN_VECTOR(&V); }) DEFINE_SCRIPT(PATCH32_UVFromXYZNormals, CATEGORY(PATCH32) PARAM_LIST_VECTOR(pCurves) PARAM_VECTOR(Point) PARAM_VECTOR_OPT(vMin, Vector()) PARAM_VECTOR_OPT(vMax, Vector(1,1,1)) PARAM_INT_OPT(InvertInter, 0), "get UV from coord", { PatchPointsToNormals(pCurves, NULL, NULL, InvertInter); Vector V = PatchGetUVFromXYZ(pCurves, Point, vMin, vMax); RETURN_VECTOR(&V); }) DEFINE_SCRIPT_REN(DRW_Clear, Clear, CATEGORY(Drawing) PARAM_COLOR_OPT(color, 0), "Clear the current viewport", { if (!(SkipFunctions & SKIP_DRAWING)) { color = ARGB2ABGR(color); DI->Clear(color); } }) DEFINE_SCRIPT_REN(DRW_ClearZ, ClearZ, CATEGORY(Drawing) , "Clear ZBuffer in the current viewport", { if (!(SkipFunctions & SKIP_DRAWING)) DI->ClearZ(); }) DEFINE_SCRIPT_REN(DRW_BackgroundSet, SetBackGround, CATEGORY(Drawing) PARAM_MEDIA(Mi) PARAM_INT_OPT(Blendmode,0), "Set the media as background in current viewport. You can specify blend mode", { if (!(SkipFunctions & SKIP_DRAWING)) DI->SetBackGround(ID_MEDIA[Mi]->ulAssociatedTextureIndex,(u32)Blendmode); }) DEFINE_SCRIPT_REN(DRW_RenderColorSet, SetRenderColor, CATEGORY(Drawing) PARAM_COLOR_OPT(color, 0), "BLACK -> All is black
WHITE -> All is normal
Default is 255 255 255 255 (white)", { color = ARGB2ABGR(color); DI->SetCurrentColor(color); }) DEFINE_SCRIPT_REN(TRK_MediaSet, SetMediaToTrack, CATEGORY(Tracking) PARAM_MEDIA(Mi), "define the media where tracker is running", { MediaToTrack = Mi; }) DEFINE_SCRIPT_REN(TRK_Reset, ResetT, CATEGORY(Tracking) PARAM_INT_OPT(TrackID, -1), "reset current tracker", { if (TrackID == -1) TrackID = CurrentID; if (ID_TABLE[TrackID]) { ID_Reset(TrackID); } }) DEFINE_SCRIPT(TRK_AutoBootStart, CATEGORY(Tracking) PARAM_INT_OPT(TrackID, -1), "reset current tracker", { if (TrackID == -1) TrackID = CurrentID; if (ID_TABLE[TrackID]) { ID_Reset(TrackID); ID_AutoStart(TrackID); } }) DEFINE_SCRIPT(TRK_AutoBootStop, CATEGORY(Tracking) PARAM_INT_OPT(ForceReset, 0) PARAM_INT_OPT(TrackID, -1), "reset current tracker", { if (TrackID == -1) TrackID = CurrentID; if (ID_TABLE[TrackID]) { if (ForceReset) ID_Reset(TrackID); ID_TABLE[TrackID]->SF_U.ViolaStart = 0; ID_TABLE[TrackID]->SF_U.Booted = 1; ID_TABLE[TrackID]->SF_U.Ready2Learn = 1; } }) DEFINE_SCRIPT_REN(TRK_Save, SaveTrack, CATEGORY(Tracking) PARAM_MEDIA_OPT(TrackedMedia, -1), "
Save track to file", { s32 TrackIndex; s32 force = 0; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia]) && ID_MEDIA[TrackedMedia]->Tracks != NULL) { char TrackName[2048]; strcpy(TrackName,(char*)ID_MEDIA[TrackedMedia]->MediaName); SetFileNameExtend(TrackName,'.TRK'); SaveTrackPlayer(ID_MEDIA[TrackedMedia]->Tracks,TrackName); } }) DEFINE_SCRIPT_REN(TRK_CurrentSet, SetCurrentTrack, CATEGORY(Tracking) PARAM_INT(TrackIndex), "Set current Track", { MediaCurrentTrack = TrackIndex; }) DEFINE_SCRIPT(TRK_PosGet, CATEGORY(Tracking) PARAM_AFFECT(Affect) PARAM_INT(TrackIndex) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(AxeInversion, 0) PARAM_INT_OPT(TimeLineCorrection, 0), "Get the position matrix of the current tracked media previously set", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia]) && ID_MEDIA[TrackedMedia]->Tracks && TrackIndex < ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks && ID_MEDIA[TrackedMedia]->ulCurrentFrame < ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackIndex].ulNumberOfMC) { MATRIX matrix; Vector matrixScale; int currFrame = ID_MEDIA[TrackedMedia]->ulCurrentFrame; if (TimeLineCorrection) { currFrame = ID_MEDIA[TrackedMedia]->Tracks->GetTimeLine(currFrame, &ID_MEDIA[TrackedMedia]->Image); } //ID_MEDIA[TrackedMedia]->Tracks->Get(TrackIndex, currFrame, &matrix); ID_MEDIA[TrackedMedia]->Tracks->Get(TrackIndex, ID_MEDIA[TrackedMedia]->dCurrentTime*ID_MEDIA[TrackedMedia]->dAvgFramePerSecond, &matrix); SetSmoothMatrix(0, &matrix, Affect, AxeInversion); if (Affect & 256) { ID_MEDIA[TrackedMedia]->Tracks->GetScale(TrackIndex,&matrixScale); matrix.I *= matrixScale.x; matrix.J *= matrixScale.z; matrix.K *= matrixScale.y; } switch (Affect) { case 1: RETURN_VECTOR(&matrix.T);break; case 4: RETURN_VECTOR(&matrix.I);break; case 8: RETURN_VECTOR(&matrix.J);break; case 16: RETURN_VECTOR(&matrix.K);break; case 256: RETURN_VECTOR(&matrixScale);break; case 258: case 2: memset(&matrix.T, 0, sizeof(matrix.T)); case 0: case 259: case 3: RETURN_MATRIX(&matrix);break; case 257: { MATRIX ts; ts.I *= matrixScale.x; ts.J *= matrixScale.z; ts.K *= matrixScale.y; ts.T = matrix.T; RETURN_MATRIX(&ts); break; } } } }) DEFINE_SCRIPT(TRK_PosForce, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_MATRIX(MatrixPos) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_MEDIA_OPT(MediaSynchro, -1), "Save a position matrix in current tracked media
If force=1, the track is always saved
If force=0, the track is only saved if it's empty", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if (MediaSynchro == -1) MediaSynchro = TrackedMedia; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); }; if (ID_TABLE[CurrentID]) { Vector matrixScale; matrixScale.x = MatrixPos.I.Norm(); MatrixPos.I.Normalize(); matrixScale.z = MatrixPos.J.Norm(); MatrixPos.J.Normalize(); matrixScale.y = MatrixPos.K.Norm(); MatrixPos.K.Normalize(); ID_MEDIA[TrackedMedia]->Tracks->Set(TrackIndex,ID_MEDIA[TrackedMedia]->ulCurrentFrame, &MatrixPos, ID_TABLE[CurrentID]->SF_U.FlyStart + (ID_TABLE[CurrentID]->SF_U.FromScratch << 1)); ID_MEDIA[TrackedMedia]->Tracks->SetScale(TrackIndex,&matrixScale); // Add to Test ID_MEDIA[TrackedMedia]->Tracks->GetDescriptor(ID_MEDIA[TrackedMedia]->ulCurrentFrame)->ImageMarker = GET_MARKER(&ID_MEDIA[MediaSynchro]->Image); } } }) DEFINE_SCRIPT_REN(TRK_PosSet, TRK_PosSave, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(ForceSave, 1) PARAM_MEDIA_OPT(MediaSynchro, -1), "Save current tracked position in current tracked media
If force=1, the track is always saved
If force=0, the track is only saved if it's empty", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if (MediaSynchro == -1) MediaSynchro = TrackedMedia; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); }; if (ID_TABLE[CurrentID]) { if (TrackIndex >= ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks || ID_MEDIA[TrackedMedia]->ulCurrentFrame >= ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackIndex].ulNumberOfMC || IsMatriceCompressedNull(&ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackIndex].pAnimation[ID_MEDIA[TrackedMedia]->ulCurrentFrame])) ForceSave = 1; if (ForceSave) { ID_MEDIA[TrackedMedia]->Tracks->Set(TrackIndex,ID_MEDIA[TrackedMedia]->ulCurrentFrame, &ID_TABLE[CurrentID]->CurrentMatrix_UNS, ID_TABLE[CurrentID]->SF_U.FlyStart + (ID_TABLE[CurrentID]->SF_U.FromScratch << 1)); ID_MEDIA[TrackedMedia]->Tracks->SetScale(TrackIndex,&ID_TABLE[CurrentID]->vModelScale); // Add to Test ID_MEDIA[TrackedMedia]->Tracks->GetDescriptor(ID_MEDIA[TrackedMedia]->ulCurrentFrame)->ImageMarker = GET_MARKER(&ID_MEDIA[MediaSynchro]->Image); RETURN_BOOL(true); } else { RETURN_BOOL(false);} } } }) DEFINE_SCRIPT_REN(TRK_PosDel, DelTrackPos, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(beginPos, -1) PARAM_INT_OPT(endPos, -1), "Delete tracked position in current tracked media
If [Pos] and [End] are set, delete track from Pos to End
If only [Pos] is set, delete the track at position [Pos]
If neother [Pos] nor [End] are set, remove the current track ", { int CP; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); } if (ID_TABLE[CurrentID]) { MATRIX nullMatrix; nullMatrix.Clean(); if (beginPos == -1) beginPos = ID_MEDIA[TrackedMedia]->ulCurrentFrame; if (endPos == -1) endPos = beginPos; for (int idx=beginPos; idx<=endPos; idx++) { ID_MEDIA[TrackedMedia]->Tracks->Set(TrackIndex,idx, &nullMatrix, 0); } } } }) DEFINE_SCRIPT(TRK_TrackDel, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_MEDIA_OPT(TrackedMedia, -1), "Delete tracked position in current tracked media
If [Pos] and [End] are set, delete track from Pos to End
If only [Pos] is set, delete the track at position [Pos]
If neother [Pos] nor [End] are set, remove the current track ", { int CP; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); } if (ID_TABLE[CurrentID]) { ID_MEDIA[TrackedMedia]->Tracks->DelStream(TrackIndex); } } }) DEFINE_SCRIPT_REN(TRK_CutsceneRefresh, RefreshCutScene, CATEGORY(Tracking) PARAM_MEDIA_OPT(TrackedMedia, -1), "Set if there is a cut scene or not", { TrackPlayer_Descriptors *descPtr; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if (TrackedMedia != -1) { descPtr = ID_MEDIA[TrackedMedia]->Tracks->GetDescriptor(ID_MEDIA[TrackedMedia]->ulCurrentFrame); if (descPtr) { if (WSPC && (WSPC->INTERP_MatchingPercent < 8.0f)) { descPtr->Flags = descPtr->Flags | 1; RETURN_INT(1); } else { descPtr->Flags = descPtr->Flags & ~1; RETURN_INT(0); } } } }) DEFINE_SCRIPT_REN(TRK_CutsceneSet, SetCutScene, CATEGORY(Tracking) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(posIndex, -1), "Force current media frame as a cut scene at specified position or current position", { TrackPlayer_Descriptors *descPtr; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); }; if (posIndex == -1) posIndex = ID_MEDIA[TrackedMedia]->ulCurrentFrame; descPtr = ID_MEDIA[TrackedMedia]->Tracks->GetDescriptor(posIndex); descPtr->Flags = descPtr->Flags | 1; } }) DEFINE_SCRIPT_REN(TRK_CutsceneDel, DelCutScene, CATEGORY(Tracking) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(posIndex, -1), "Force track as a cut scene at specified position or current position", { TrackPlayer_Descriptors *descPtr; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); }; if (posIndex == -1) posIndex = ID_MEDIA[TrackedMedia]->ulCurrentFrame; descPtr = ID_MEDIA[TrackedMedia]->Tracks->GetDescriptor(posIndex); descPtr->Flags = descPtr->Flags & ~1; } }) DEFINE_SCRIPT_REN(TRK_CutSceneTest, IsCutScene, CATEGORY(Tracking) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(idxBegin, -1) PARAM_INT_OPT(idxEnd, -1), "Return if the frame is a cutscene", { int nbReturn = 0; BOOL returnList[1024]; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (idxBegin == -1) idxBegin = ID_MEDIA[TrackedMedia]->ulCurrentFrame; if (idxEnd == -1) idxEnd = idxBegin; if (ID_MEDIA[TrackedMedia]->Tracks) { if (idxEnd >= ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfDescriptors) idxEnd = ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfDescriptors - 1; if (idxEnd - idxBegin < 1024) { for (int idx = idxBegin; idx <= idxEnd; idx++) returnList[nbReturn++] = ((ID_MEDIA[TrackedMedia]->Tracks->IsCutScene(idx)) ? 1 : 0); } } } if (nbReturn == 1) { RETURN_BOOL(returnList[0]); } else if (nbReturn > 1) { RETURN_TABLE_INT(returnList, nbReturn); } else { RETURN_BOOL(false); } }) DEFINE_SCRIPT_REN(TRK_Count, GetNumTracks, CATEGORY(Tracking) PARAM_MEDIA_OPT(TrackedMedia, -1), "Return the number of tracks of the current tracked media", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && ID_MEDIA[TrackedMedia]->Tracks) { RETURN_INT(ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks); } }) DEFINE_SCRIPT_REN(TRK_NameGet, GetTrackName, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_MEDIA_OPT(TrackedMedia, -1), "Return the track's name", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && ID_MEDIA[TrackedMedia]->Tracks && TrackIndex < ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks) { RETURN_STRING(ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackIndex].Name); } }) DEFINE_SCRIPT_REN(TRK_NameSet, SetTrackName, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_STRING(Name) PARAM_MEDIA_OPT(TrackedMedia, -1), "Set the track's name", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && ID_MEDIA[TrackedMedia]->Tracks && TrackIndex < ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks) { strcpy(ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackIndex].Name, Name); } }) DEFINE_SCRIPT_REN(TRK_Smooth, SmoothTracks, CATEGORY(Tracking) PARAM_MEDIA(Mi) PARAM_INT_OPT(MaxSmooth, -1), "Add lost images in tracker", { if (ID_MEDIA[Mi]->Tracks) { ID_MEDIA[Mi]->Tracks->Clean(MaxSmooth); } }) DEFINE_SCRIPT_REN(TRK_SmoothIO, SmoothTrackIO, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_INT(begin) PARAM_INT(end) PARAM_MEDIA_OPT(TrackedMedia, -1), "", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if ((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia]) && begin < end && end < ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackIndex].ulNumberOfMC) { ID_MEDIA[TrackedMedia]->Tracks->CleanZone(TrackIndex, begin, end); } }) DEFINE_SCRIPT_REN(TRK_StatusGet, GetTrackStatus, CATEGORY(Tracking) PARAM_INT(TrackeurID), "return tracker state, like Islost with more info
0: tracking ok
1: traking on fly
2: traking from scratch
3: combination of 1 and 2
8: no tracker", { if (!(SkipFunctions & SKIP_TRACKER)) { int status; if (TrackeurID >= MAX_ID) TrackeurID = MAX_ID-1; if (TrackeurID < 0) TrackeurID= 0; if (ID_TABLE[TrackeurID]) { status = ID_TABLE[TrackeurID]->SF_U.FlyStart + (ID_TABLE[TrackeurID]->SF_U.FromScratch << 1); } else status = 8; RETURN_INT(status); } //else // RETURN_INT(8); }) DEFINE_SCRIPT_REN(TRK_StatusSavedGet, GetSavedTrackStatus, CATEGORY(Tracking) PARAM_INT(TrackeurID) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(trckBegin, -1) PARAM_INT_OPT(trckEnd, -1), "return SAVED tracker state
If [Track] is Set, returns the tracker save status at specified position
Track States:
0: tracking ok
1: traking on fly
2: traking from scratch
3: combination of 1 and 2
4: null track
8: no track made", { int trckPos; int nbReturn = 0; int returnList[1024]; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if (trckBegin == -1) trckBegin = ID_MEDIA[TrackedMedia]->ulCurrentFrame; if (trckEnd == -1) trckEnd = trckBegin; if (TrackeurID >= MAX_ID) TrackeurID = MAX_ID-1; if (TrackeurID < 0) TrackeurID = 0; if (ID_MEDIA[TrackedMedia]->Tracks && TrackeurID < ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks) { if (trckEnd >= ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackeurID].ulNumberOfMC) trckEnd = ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackeurID].ulNumberOfMC - 1; if (trckEnd - trckBegin < 2047) { for (trckPos=trckBegin; trckPos <= trckEnd; trckPos++) { if (IsMatriceCompressedNull(&ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackeurID].pAnimation[trckPos])) returnList[nbReturn++] = 4; else returnList[nbReturn++] = (int)(ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackeurID].pAnimation[trckPos].IsValid & 3); } } } if (nbReturn == 1) { RETURN_INT(returnList[0]); } else if (nbReturn > 1) { RETURN_TABLE_INT(returnList, nbReturn); } else { RETURN_INT(8); } }) DEFINE_SCRIPT_REN(TRK_ColorSet, SetTrackColor, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_COLOR(color) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(posBegin, -1) PARAM_INT_OPT(posEnd, -1), "Set color in track using", { int posIndex; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); }; if (posBegin == -1) posBegin = ID_MEDIA[TrackedMedia]->ulCurrentFrame; if (posEnd == -1) posEnd = posBegin; for (posIndex = posBegin; posIndex <= posEnd; posIndex++) ID_MEDIA[TrackedMedia]->Tracks->SetSkinColor(TrackIndex, posIndex, color); } }) DEFINE_SCRIPT_REN(TRK_ColorGet, GetTrackColor, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(trckBegin, -1) PARAM_INT_OPT(trckEnd, -1), "return SAVED tracker color in RGB mode", { int trckPos; int strPos; u32 color; char resultStr[2048]; BOOL tableMode = false; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; memset(resultStr, 0, sizeof(resultStr)); if (trckBegin == -1) trckBegin = ID_MEDIA[TrackedMedia]->ulCurrentFrame; if (trckEnd == -1) trckEnd = trckBegin; else tableMode = true; if (TrackIndex >= MAX_ID) TrackIndex = MAX_ID-1; if (TrackIndex < 0) TrackIndex = 0; if (ID_MEDIA[TrackedMedia]->Tracks && TrackIndex < ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks && trckBegin < ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackIndex].ulNumberOfMC) { if (trckEnd >= ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackIndex].ulNumberOfMC) trckEnd = ID_MEDIA[TrackedMedia]->Tracks->TracksPtrs[TrackIndex].ulNumberOfMC - 1; if (trckEnd - trckBegin < 256) { for (trckPos=trckBegin, strPos=0; trckPos <= trckEnd; trckPos++, strPos+=6) { color = ID_MEDIA[TrackedMedia]->Tracks->GetSkinColor(TrackIndex, trckPos); sprintf(resultStr + strPos, "%06X", color); } resultStr[strPos] = 0; } if (tableMode) { RETURN_STRING(resultStr); } else { RETURN_COLOR(color); } } }) DEFINE_SCRIPT(TRK_DataIntSet, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_STRING(DataName) PARAM_INT(DataValue) PARAM_MEDIA_OPT(TrackedMedia, -1), "Set integer data into .TRK
if track index == -1, stocks in descriptor", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); }; RETURN_INT(ID_MEDIA[TrackedMedia]->Tracks->SetDataInt(TrackIndex,ID_MEDIA[TrackedMedia]->ulCurrentFrame, DataName, DataValue)); } }) DEFINE_SCRIPT(TRK_DataIntGet, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_STRING(DataName) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(FromFrame, -1) PARAM_INT_OPT(ToFrame, -1), "Get integer data into .TRK
if track index == -1, stocks in descriptor", { int returnInt; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if (ID_MEDIA[TrackedMedia]->Tracks && (int)TrackIndex < (int)ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks) { if (ToFrame == -1) ToFrame = ID_MEDIA[TrackedMedia]->ulCurrentFrame; if (FromFrame != -1) { for (int fndIdx = FromFrame; fndIdx <= ToFrame; fndIdx++) if (ID_MEDIA[TrackedMedia]->Tracks->GetDataInt(TrackIndex,fndIdx, DataName, &returnInt)) { RETURN_INT_EVENT(returnInt, (double)fndIdx/ID_MEDIA[TrackedMedia]->dAvgFramePerSecond); } } else if (ID_MEDIA[TrackedMedia]->Tracks->GetDataInt(TrackIndex,ToFrame, DataName, &returnInt)) { RETURN_INT_EVENT(returnInt, (double)ToFrame/ID_MEDIA[TrackedMedia]->dAvgFramePerSecond); } } }) DEFINE_SCRIPT(TRK_DataFloatSet, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_STRING(DataName) PARAM_FLOAT(DataValue) PARAM_MEDIA_OPT(TrackedMedia, -1), "Set float data into .TRK
if track index == -1, stocks in descriptor", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); }; RETURN_INT(ID_MEDIA[TrackedMedia]->Tracks->SetDataFloat(TrackIndex,ID_MEDIA[TrackedMedia]->ulCurrentFrame, DataName, DataValue)); } }) DEFINE_SCRIPT(TRK_DataFloatGet, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_STRING(DataName) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(FromFrame, -1) PARAM_INT_OPT(ToFrame, -1), "Get float data into .TRK
if track index == -1, stocks in descriptor", { float returnFloat; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if (ID_MEDIA[TrackedMedia]->Tracks && (int)TrackIndex < (int)ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks) { if (ToFrame == -1) ToFrame = ID_MEDIA[TrackedMedia]->ulCurrentFrame; if (FromFrame != -1) { for (int fndIdx = FromFrame; fndIdx <= ToFrame; fndIdx++) if (ID_MEDIA[TrackedMedia]->Tracks->GetDataFloat(TrackIndex,fndIdx, DataName, &returnFloat)) { RETURN_FLOAT_EVENT(returnFloat, (double)fndIdx/ID_MEDIA[TrackedMedia]->dAvgFramePerSecond); } } else if (ID_MEDIA[TrackedMedia]->Tracks->GetDataFloat(TrackIndex, ToFrame, DataName, &returnFloat)) { RETURN_FLOAT_EVENT(returnFloat, (double)ToFrame/ID_MEDIA[TrackedMedia]->dAvgFramePerSecond); } } }) DEFINE_SCRIPT(TRK_DataStringSet, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_STRING(DataName) PARAM_STRING(DataValue) PARAM_MEDIA_OPT(TrackedMedia, -1), "Set string (256 max) data into .TRK
if track index == -1, stocks in descriptor", { if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if((TrackedMedia != -1) && (ID_MEDIA[TrackedMedia])) { if (ID_MEDIA[TrackedMedia]->Tracks == NULL) { ID_MEDIA[TrackedMedia]->Tracks = (TrackPlayer*)CC_malloc(sizeof(TrackPlayer)); memset(ID_MEDIA[TrackedMedia]->Tracks,0,sizeof(TrackPlayer)); }; RETURN_INT(ID_MEDIA[TrackedMedia]->Tracks->SetDataStr(TrackIndex,ID_MEDIA[TrackedMedia]->ulCurrentFrame, DataName, DataValue)); } }) DEFINE_SCRIPT(TRK_DataStringGet, CATEGORY(Tracking) PARAM_INT(TrackIndex) PARAM_STRING(DataName) PARAM_MEDIA_OPT(TrackedMedia, -1) PARAM_INT_OPT(FromFrame, -1) PARAM_INT_OPT(ToFrame, -1), "Get string data into .TRK
if track index == -1, stocks in descriptor", { char returnStr[256]; if (TrackedMedia == -1) TrackedMedia = MediaToTrack; if (ID_MEDIA[TrackedMedia]->Tracks && (int)TrackIndex < (int)ID_MEDIA[TrackedMedia]->Tracks->ulNumberOfTracks) { if (ToFrame == -1) ToFrame = ID_MEDIA[TrackedMedia]->ulCurrentFrame; if (FromFrame != -1) { for (int fndIdx = FromFrame; fndIdx <= ToFrame; fndIdx++) if (ID_MEDIA[TrackedMedia]->Tracks->GetDataStr(TrackIndex,fndIdx, DataName, returnStr)) { RETURN_STRING_EVENT(returnStr, (double)fndIdx/ID_MEDIA[TrackedMedia]->dAvgFramePerSecond); } } else if (ID_MEDIA[TrackedMedia]->Tracks->GetDataStr(TrackIndex,ToFrame, DataName, returnStr)) { RETURN_STRING_EVENT(returnStr, (double)ToFrame/ID_MEDIA[TrackedMedia]->dAvgFramePerSecond); } } }) DEFINE_SCRIPT(APP_Log, CATEGORY(Application) PARAM_STRING(log), "Log text on DBG File", { void SaveDBGInfo(char *text); SaveDBGInfo(log); }) DEFINE_SCRIPT(APP_Error, CATEGORY(Application), "Force Error", { HandleError(L, luaParam); }) #ifdef USER_MODE DEFINE_SCRIPT(APP_UserModeTest, CATEGORY(Application), "Return if executable is compiled in user mode", { RETURN_BOOL(1); }) DEFINE_SCRIPT(APP_VersionGet, CATEGORY(Application), "Return application version", { extern const char *VersionStr; RETURN_STRING((char *)VersionStr); }) #else DEFINE_SCRIPT(APP_UserModeTest, CATEGORY(Application), "Return if executable is compiled in user mode", { RETURN_BOOL(0); }) DEFINE_SCRIPT(APP_VersionGet, CATEGORY(Application), "Return application version", { extern u32 VersionNumber; RETURN_INT(VersionNumber); }) #endif DEFINE_SCRIPT(APP_IsRestart, CATEGORY(Application), "Verify if application is on restart mode", { extern u32 IsRestart; RETURN_BOOL(IsRestart); }) DEFINE_SCRIPT(APP_CurrentUserGet, CATEGORY(Application), "Return application version", { extern DWORD CurrentSessionID; RETURN_INT(CurrentSessionID); }) DEFINE_SCRIPT(APP_LaunchUserGet, CATEGORY(Application), "Return application version", { extern DWORD LaunchSessionID; RETURN_INT(LaunchSessionID); }) DEFINE_SCRIPT(APP_GetDemoBranchFlag, CATEGORY(Application), "Return if the GameId of the application belongs to the Demo branch", { RETURN_BOOL(GetDemoBranchFlagFromRegistry()); }) DEFINE_SCRIPT(APP_GetFirstRunFlag, CATEGORY(Application), "Return false if the application has already been run with an account", { RETURN_BOOL(GetFirstRunFlag()); }) /*DEFINE_SCRIPT(APP_GetValueFromRegistry, CATEGORY(Application), PARAM_STRING(Item), PARAM_BOOL(FromHKCU, true) "Return the value of the item in HKCU/Software/Ubisoft/CamCam (or HKLM if From HKCU is false)", { char value[2048] = ""; GetCamCamValueFromRegistry(value, Item, FromHKCU)); RETURN_STRING(value); })*/ DEFINE_SCRIPT(APP_GetInstalledLanguage, CATEGORY(Application), "Return the 2-character language code", { char languageCode[3] = ""; GetInstalledLanguageCode(languageCode); RETURN_STRING(languageCode); }) DEFINE_SCRIPT(APP_SplashScreenShow, CATEGORY(Application) PARAM_INT_OPT(ON_OFF, 1), "Show/Hide the splashscreen", { void ShowSplashScreen(bool show); ShowSplashScreen((bool)ON_OFF); }) DEFINE_SCRIPT(APP_SetGraphicDriver, CATEGORY(Application) PARAM_INT(DriverNumber), "0 for Opengl, 1 for D3D", { ChangeDriver(DriverNumber); }) #ifdef ONLINE_MODE DEFINE_SCRIPT(APP_GetYouUpBranch, CATEGORY(Application), "Return the YouUp Branch for this Exe (Demo, Beta, Release)", { RETURN_STRING(YOUUP_BRANCH); }) DEFINE_SCRIPT(APP_GetYouUpOrigin, CATEGORY(Application), "Return the YouUp Origin (referrer) for this Exe", { RETURN_STRING(YOUUP_ORIGIN); }) DEFINE_SCRIPT(APP_GetYouUpBranding, CATEGORY(Application), "Return the YouUp Branding for this Exe (MSN, Ubisoft)", { RETURN_STRING(YOUUP_ORIGIN); }) DEFINE_SCRIPT(APP_Exit, CATEGORY(Application), "Kill application", { void API_EXIT(); API_EXIT(); }) DEFINE_SCRIPT(APP_AutorunSet, CATEGORY(Application) PARAM_INT_OPT(ON_OFF, 1), "Set autorun off application in windows startup", { int RegisterBoot(u32 add); RegisterBoot(ON_OFF); }) DEFINE_SCRIPT(APP_AutorunGet, CATEGORY(Application), "Get autorun off application in windows startup", { int RegisterBoot(u32 add); int res = RegisterBoot(-1); if (res >= 0) { RETURN_BOOL(res); } }) #endif DEFINE_SCRIPT(APP_AVI2FLV, CATEGORY(Application) PARAM_STRING(AviPath) PARAM_STRING(FlvDest), "Test Function - Convert AVI to FLV", { int AVI2FLV(char *avi, char *flv, bool *Aborted=NULL); RETURN_BOOL(AVI2FLV(AviPath, FlvDest)); }) DEFINE_SCRIPT(APP_IconShow, CATEGORY(Application) PARAM_INT_OPT(Show, 1), "Show or hide tray icon", { void AnimateIcon(HINSTANCE hInstance, HWND hWnd, DWORD dwMsgType,UINT nIndexOfIcon,char *pInfoTexte); if (Show) { AnimateIcon(NULL, OwnerHwnd, NIM_ADD,0,""); } else { AnimateIcon(NULL, OwnerHwnd, NIM_DELETE,0,""); } }) DEFINE_SCRIPT(APP_DragFile, CATEGORY(Application) PARAM_STRING(filename) PARAM_INT_OPT(moveFiles, 0), "do drag and drop ...", { int DragAndDrop(char *path, bool moveFiles); DragAndDrop(filename, (bool)moveFiles); }) DEFINE_SCRIPT(APP_ForceKey, CATEGORY(Application) PARAM_STRING(Key) PARAM_INT_OPT(IsUp,0) PARAM_INT_OPT(IsScanCode,0), "", { void SendKeyMessage(DWORD code, int isScanCode, int isUp); SendKeyMessage(*Key, IsScanCode, IsUp); }) DEFINE_SCRIPT_REN(APP_Restart, APP_ExitInDriver, CATEGORY(Application) PARAM_STRING_OPT(file, ""), "", { if (*file ) strcpy(LuaScriptRestart, file); else strcpy(LuaScriptRestart, "driver.lua"); }) DEFINE_SCRIPT(APP_ForceMouse, CATEGORY(Application) PARAM_INT(x) PARAM_INT(y) PARAM_INT_OPT(PressStatus,0), "", { void SendMouseMessage(int x, int y, DWORD status); SendMouseMessage(x,y,PressStatus); }) DEFINE_SCRIPT_REN(APP_KeyPressTest, IsKeyPressed, CATEGORY(Application) PARAM_INT_OPT(KeyNum, -1) PARAM_STRING_OPT(Key, ""), "return 1 if one of the key is pressed", { BOOL keyPressed = false; char *Parser; if (*Key) { Parser = Key; while (*Parser) { if (IsKeyPressed(*(Parser++))) keyPressed = true; }; } else if (KeyNum != -1) { keyPressed = GetKeyState(KeyNum) & 0x80; } RETURN_BOOL(keyPressed); }) DEFINE_SCRIPT_REN(APP_KeyUnpress, UnPressKey, CATEGORY(Application) PARAM_STRING(Keys), "unpress the specifyed key(s)", { char *Parser; Parser = Keys; while (*Parser) { UnPressKey(*(Parser++)); } }) DEFINE_SCRIPT(APP_KeyGet, CATEGORY(Application), "Get current pressed char key", { char MyCharString[2]; MyCharString[0] = LastKeyPressed; MyCharString[1] = 0; RETURN_STRING(MyCharString); }) DEFINE_SCRIPT_REN(APP_MousePressTest, IsMousePressed, CATEGORY(Application) PARAM_INT_OPT(TestEvenWithNoFocus, 0), "return true if left mouse button is pressed", { if (!TestEvenWithNoFocus && !CheckFocus()) { RETURN_BOOL(0); } else { RETURN_BOOL((GetAsyncKeyState(VK_LBUTTON) & 0x8000)); } }) DEFINE_SCRIPT(APP_Explore, CATEGORY(Application) PARAM_STRING(path), "open explorer at specified path", { char TEXT[2048]; sprintf(TEXT,"CMD /C START explorer %s", path); WinExec(TEXT,SW_HIDE); }) #ifdef RASTERS_ACTIVATED DEFINE_SCRIPT(APP_RasterStart, CATEGORY(Application) PARAM_INT(index) PARAM_STRING_OPT(Name, ""), "Set Raster, 0 <= index <= 4", { if (*Name) StartRaster((RASTER_ENUM)(RAS_SCRIPT_Raster1+index), Name); else StartRaster((RASTER_ENUM)(RAS_SCRIPT_Raster1+index)); }) DEFINE_SCRIPT(APP_RasterStop, CATEGORY(Application) PARAM_INT(index), "Set Raster, 0 <= index <= 4", { StopRaster((RASTER_ENUM)(RAS_SCRIPT_Raster1+index)); }) #else DEFINE_SCRIPT(APP_RasterStart, CATEGORY(Application) PARAM_INT(index) PARAM_STRING_OPT(Name, ""), "Set Raster, 0 <= index <= 4", { }) DEFINE_SCRIPT(APP_RasterStop, CATEGORY(Application) PARAM_INT(index), "Set Raster, 0 <= index <= 4", { }) #endif DEFINE_SCRIPT(APP_ScreenMouseThresholdSet, CATEGORY(Application) PARAM_FLOAT(Threshold), "Set screen mouse noise threshold, set a small value for a big smooth", { extern float NoisThreshold; NoisThreshold = Threshold; }) DEFINE_SCRIPT(APP_AVISaveConfig, CATEGORY(Application) PARAM_STRING(SaveFile) PARAM_INT_OPT(UseSound, 0) PARAM_STRING_OPT(FilterName, "") PARAM_INT_OPT(Width, 0) PARAM_INT_OPT(Height, 0), "Create and config avi file writer", { CreateMedia(SaveFile, 0, true); RETURN_BOOL(SaveInFile_Config(SaveFile, UseSound, FilterName, Width, Height)); }) DEFINE_SCRIPT(APP_AVISaveSourceSet, CATEGORY(Application) PARAM_INT(OnResultFrame) PARAM_MEDIA_OPT(media, -1), "Set Avi writer source if onResultFrame == 1, use total screen, else, use a specific media. DO IT BEFORE START !!!", { SaveInFile_SetSource(OnResultFrame, media); }) DEFINE_SCRIPT(APP_AVISaveAudioSourceAdd, CATEGORY(Application) PARAM_STRING(media), "Add an audio source to Record. DO IT BEFORE START !!!", { RETURN_INT(SaveInFile_AddInputData(media)); }) DEFINE_SCRIPT(APP_AVISaveAudioSourceSeek, CATEGORY(Application) PARAM_INT(inputIndex) PARAM_FLOAT(time), "Seek audio source. DO IT BEFORE START !!!", { RETURN_BOOL(SaveInFile_SeekInputData(inputIndex, time)); }) #ifdef VIDEO_OPENLIB DEFINE_SCRIPT(APP_AVISaveAudioSourceSkip, CATEGORY(Application) PARAM_INT(inputIndex) PARAM_INT_OPT(skip, 1), "Skip audio source. THIS FUNCTION DO NOT REMOVE THE INPUT", { RETURN_BOOL(SaveInFile_SkipInputData(inputIndex, skip)); }) #endif #ifndef USE_WMV DEFINE_SCRIPT(APP_AVISaveExtension, CATEGORY(Application), "Return video file extension", { RETURN_STRING(".avi"); }) #else DEFINE_SCRIPT(APP_AVISaveExtension, CATEGORY(Application), "Return video file extension", { RETURN_STRING(".wmv"); }) #endif DEFINE_SCRIPT(APP_AVISaveStart, CATEGORY(Application), "Start save", { if (!SaveInFile_Init()) { SaveInFile_Stop(); RETURN_BOOL(0); } else { RETURN_BOOL(1); } }) DEFINE_SCRIPT(APP_AVISaveRun, CATEGORY(Application), "Begin AVI Save (need AVISaveConfig)", { RETURN_BOOL(SaveInFile_Run()); }) DEFINE_SCRIPT(APP_AVISavePause, CATEGORY(Application), "Pause AVI Save (need AVISaveConfig)", { RETURN_BOOL(SaveInFile_Pause()); }) DEFINE_SCRIPT(APP_AVISaveStop, CATEGORY(Application), "Stop and remove AVI save mode (need AVISaveConfig), after a stop a Config is needed again", { RETURN_BOOL(SaveInFile_Stop()); }) DEFINE_SCRIPT(APP_Sleep, CATEGORY(Application) PARAM_INT(SleepTime), "Sleep application (time in milliseconds)", { Sleep(SleepTime); }) DEFINE_SCRIPT(APP_DirWatch, CATEGORY(Application) PARAM_STRING_OPT(Directory, ""), "Set Lua watch to specified directory (only on watch at the same time), if file is modified, the lua event onDirWatch is send", { int DWLua_WatchDirectory(char *DirectoryToWatch, void *pS); int DWLua_UnWatchDirectory(); if (*Directory) DWLua_WatchDirectory(Directory, (void *)this); else DWLua_UnWatchDirectory(); }) DEFINE_SCRIPT(APP_ApplicationDataPathGet, CATEGORY(Application), "Get user application data path", { extern char AppDataPath[]; RETURN_STRING(AppDataPath); }) DEFINE_SCRIPT(APP_MyDocsPathGet, CATEGORY(Application), "Get user My Documents path", { extern char MyDocsPath[]; RETURN_STRING(MyDocsPath); }) DEFINE_SCRIPT(APP_MyMusicPathGet, CATEGORY(Application), "Get user My Music path", { extern char MyMusicsPath[]; RETURN_STRING(MyMusicsPath); }) DEFINE_SCRIPT(APP_MyPicturesPathGet, CATEGORY(Application), "Get user My Pictures path", { extern char MyPicturesPath[]; RETURN_STRING(MyPicturesPath); }) DEFINE_SCRIPT(APP_SimConnect, CATEGORY(Application) PARAM_INT_OPT(newDelta, 0) PARAM_INT_OPT(close, 0) PARAM_FLOAT_OPT(xFactor, 1) PARAM_FLOAT_OPT(yFactor, 1) PARAM_FLOAT_OPT(zFactor, 1) PARAM_FLOAT_OPT(rFactor, 1) PARAM_FLOAT_OPT(tSmooth, 0) PARAM_FLOAT_OPT(rSmooth, 0), "Connection To Flight simulator", { void testCockpitCamera(bool close, bool newDelta, float xFactor, float yFactor, float zFactor, float rFactor, float tSmoothFactor, float rSmoothFactor); testCockpitCamera(close, newDelta, xFactor, yFactor, zFactor, rFactor, tSmooth, rSmooth); }) DEFINE_SCRIPT(APP_BlazingConnect, CATEGORY(Application) PARAM_INT_OPT(init, 0) PARAM_MATRIX(matrix) PARAM_FLOAT_OPT(ratio, 1.0f), "Connection To Flight simulator", { bool SendCommandToBlazingAngel(MATRIX *matrix, bool init, float ratio); RETURN_BOOL(SendCommandToBlazingAngel(&matrix, init, ratio)); }) DEFINE_SCRIPT(FILE_Exists, CATEGORY(File) PARAM_STRING(filename), "Verify if file exists and can be Opened !", { FILE *file; file = fopen(filename, "r"); if (file) { fclose(file); RETURN_BOOL(1); } else { RETURN_BOOL(0); } }) DEFINE_SCRIPT(FILE_Copy, CATEGORY(File) PARAM_STRING(src) PARAM_STRING(dst), "Copy specified file", { RETURN_BOOL(CopyFile(src, dst, 0)); }) DEFINE_SCRIPT(FILE_Move, CATEGORY(File) PARAM_STRING(src) PARAM_STRING(dst), "Move specified file", { RETURN_BOOL(MoveFile(src, dst)); }) DEFINE_SCRIPT(FILE_Delete, CATEGORY(File) PARAM_STRING(filename), "Delete specified file", { RETURN_BOOL(DeleteFile(filename)); }) DEFINE_SCRIPT(FILE_DirCreate, CATEGORY(File) PARAM_STRING(dirname), "Create specified directory", { RETURN_BOOL(CreateDirectory(dirname, NULL)); }) DEFINE_SCRIPT_REN(DRW_MediaPoint, DrawPoint, CATEGORY(Drawing) PARAM_INT(X) PARAM_INT(Y) PARAM_MEDIA(Mi) PARAM_COLOR(ColorRGB) PARAM_INT(Opacity) PARAM_INT(Diam) PARAM_INT(CursorMode), "Draw one pixel with the specified color into the media at position X,Y
Modes 0: Paint - 1:Cursor - 2:RemoveCursor", { if (!(SkipFunctions & SKIP_DRAWING)) { POINT XY; XY.x = X; XY.y = Y; if (ID_MEDIA[Mi]->Image.GetBase()) { if (CursorMode & 4) { if (prevMousePointSet && (CursorMode & 3)) { PaintCursor(&ID_MEDIA[Mi]->Image, prevMousePoint, prevDiam); } prevMousePointSet = 0; prevMousePoint.x = prevMousePoint.y = 0; } else if ( XY.x >= 0 && XY.x < ID_MEDIA[Mi]->Image.SX && XY.y >= 0 && XY.y < ID_MEDIA[Mi]->Image.SY ) { if (CursorMode == 0 || CursorMode & 1) Paint(&ID_MEDIA[Mi]->Image, XY, prevMousePoint, ColorRGB, Opacity, Diam); if (CursorMode & 2) { PaintCursor(&ID_MEDIA[Mi]->Image, XY, Diam); } prevMousePointSet = 1; prevMousePoint = XY; prevDiam = Diam; } if (ID_MEDIA[Mi]->ulAssociatedTextureIndex != -1) DI->UpdateTexture_BM_2_HW(ID_MEDIA[Mi]->ulAssociatedTextureIndex); } } }) DEFINE_SCRIPT_REN(SCN_MorphSet, SetMorph, CATEGORY(Small Scene) PARAM_SCENE(SmSc) PARAM_STRING_OPT(ObjectName, "") PARAM_LIST_FLOAT(WeightList), "", { char ObjectNameOBJ[2048]; UnicID ObjectREF = -1; if (*ObjectName != 0) { sprintf(ObjectNameOBJ, "%s.OBJ", ObjectName); ObjectREF = SmSc->ObjectNameDico.IsExist(ObjectNameOBJ); if (ObjectREF != -1) { ObjectREF = SmSc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; if (ObjectREF != -1) ObjectREF = SmSc->ObjectsPtrs[ObjectREF]->MeshIndex; } } for (u32 MeshIndex = 0; MeshIndex < SmSc->ulNumberOfMeshes ; MeshIndex++) { if ((ObjectREF == -1 || ObjectREF == MeshIndex) && SmSc->MeshesPtrs[MeshIndex]) { for (int MorphIndex=0; MorphIndexMeshesPtrs[MeshIndex]->ulNumberOfTarget) SmSc->MeshesPtrs[MeshIndex]->MorphTargets[MorphIndex].Weight = WeightList[MorphIndex]; } } } }) DEFINE_SCRIPT(SCN_MorphGet, CATEGORY(Small Scene) PARAM_SCENE(SmSc) PARAM_STRING(ObjectName), "", { char ObjectNameOBJ[2048]; UnicID ObjectREF = -1; sprintf(ObjectNameOBJ, "%s.OBJ", ObjectName); ObjectREF = SmSc->ObjectNameDico.IsExist(ObjectNameOBJ); if (ObjectREF != -1) { ObjectREF = SmSc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; if (ObjectREF != -1) ObjectREF = SmSc->ObjectsPtrs[ObjectREF]->MeshIndex; } if (ObjectREF != -1 && SmSc->MeshesPtrs[ObjectREF]) { for (int MorphIndex=0; MorphIndexMeshesPtrs[ObjectREF]->ulNumberOfTarget; MorphIndex++) { RETURN_FLOAT(SmSc->MeshesPtrs[ObjectREF]->MorphTargets[MorphIndex].Weight); } } }) DEFINE_SCRIPT_REN(APP_TimeGet, GetTime, CATEGORY(Application) , "Return actual time in milliseconds", { DWORD curTime = timeGetTime(); RETURN_INT(curTime); //// A VOIR }) DEFINE_SCRIPT(APP_DateGet, CATEGORY(Application) , "Return a string of actual date", { SYSTEMTIME st; GetSystemTime(&st); RETURN_DATE(st); }) DEFINE_SCRIPT(APP_CursorHide, CATEGORY(Application) PARAM_INT_OPT(ON_OFF, 0), "Show or hide WINDOWS cursor", { ShowCursor(!ON_OFF); }) DEFINE_SCRIPT_REN(APP_Cursor, APP_CursorHand, CATEGORY(Application) PARAM_INT_OPT(CursorType, 0) PARAM_STRING_OPT(CursorPath, ""), "Show a specified cursor
0 - Standard cursor
1 - Hand cursor
2 - Wait cursor
3 - Resize Cursor NWSE
4 - Resize Cursor NESW
5 - Move Cursor", { void ChangeCursor(char *cursor); void ChangeCursorFromFile(char *cursorPath); if (CursorType == 0) ChangeCursor(IDC_ARROW); if (CursorType == 1) ChangeCursor(IDC_HAND); if (CursorType == 2) ChangeCursor(IDC_WAIT); if (CursorType == 3) ChangeCursor(IDC_SIZENWSE); if (CursorType == 4) ChangeCursor(IDC_SIZENESW); if (CursorType == 5) ChangeCursor(IDC_SIZEALL); if (CursorPath && *CursorPath) ChangeCursorFromFile(CursorPath); }) DEFINE_SCRIPT_REN(TRK_MeshShow, ShowMesh, CATEGORY(Tracking) PARAM_INT_OPT(ON_OFF, -1), "Show the tracked mesh... And return the state ", { if (ID_TABLE[CurrentID]) { if (ON_OFF == -1) ID_TABLE[CurrentID]->SF_U.DrawMesh = !ID_TABLE[CurrentID]->SF_U.DrawMesh; else { if (ON_OFF) ID_TABLE[CurrentID]->SF_U.DrawMesh = 1; else ID_TABLE[CurrentID]->SF_U.DrawMesh = 0; } RETURN_BOOL(ID_TABLE[CurrentID]->SF_U.DrawMesh); }; }) DEFINE_SCRIPT_REN(SCN_ObjectLookAtSet, SetObjectLookAt, CATEGORY(Small Scene) PARAM_AFFECT(Affect) PARAM_SCENE(Smsc) PARAM_STRING(ObjectName) PARAM_STRING_OPT(ObjectLookAt, ""), "", { char ObjectNameOBJ[2048]; s32 Number; sprintf(ObjectNameOBJ,"%s.OBJ",ObjectName); UnicID ObjectREF; ObjectREF = Smsc->ObjectNameDico.IsExist(ObjectNameOBJ); if (ObjectREF != -1) { MATRIX LookWhat; UnicID ObjectREFLA; ObjectREF = Smsc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; ObjectREFLA = -1; if (*ObjectLookAt != 0) { sprintf(ObjectNameOBJ,"%s.OBJ",ObjectLookAt); ObjectREFLA = Smsc->ObjectNameDico.IsExist(ObjectNameOBJ); if (ObjectREFLA != -1) ObjectREFLA = Smsc->ObjectNameDico.mpst_Dico[ObjectREFLA].AssociatedValue; }; ComputeSmallSceneObjectLookAt(Smsc,Affect,ObjectREF,ObjectREFLA); } }) #ifndef SKIMMED_NET DEFINE_SCRIPT_REN(NET_IDGetSet, Net_GetSetID, CATEGORY(Network), "Get Network ID and set it as currentID", { int myIdex = 0; for (u32 netIdx=0; netIdx<32; netIdx++) { if ((NetObj->ValidMask & 1<LinkedIP[netIdx].ulIP < NetObj->MyulIP)) myIdex++; } CurrentID = myIdex; if (ID_TABLE[CurrentID] == NULL) ID_New(CurrentID); RETURN_INT( CurrentID); }) DEFINE_SCRIPT_REN(NET_IDCount, Net_GetNbID, CATEGORY(Network), "Get Number of connected machine", { int nbID = 1; // myID for (u32 netIdx=0; netIdx<32; netIdx++) { if (NetObj->ValidMask & (1<MyIP); } else { u32 netIdx; u32 netIdxIn; if (theID > CurrentID) theID--; for (netIdx=0; netIdx<32; netIdx++) { if (NetObj->ValidMask & 1<ValidMask & 1<LinkedIP[netIdxIn].ulIP < NetObj->LinkedIP[netIdx].ulIP)) curIPPos++; } if (curIPPos == theID) break; } } char IPBuffer[256]; sprintf(IPBuffer, "%d.%d.%d.%d", (NetObj->LinkedIP[netIdx].ulIP >> 24) & 0xFF, (NetObj->LinkedIP[netIdx].ulIP >> 16) & 0xFF, (NetObj->LinkedIP[netIdx].ulIP >> 8) & 0xFF, (NetObj->LinkedIP[netIdx].ulIP >> 0) & 0xFF); RETURN_STRING(IPBuffer); } }) #endif DEFINE_SCRIPT_REN(APP_CollisionSet, Collision_Set, CATEGORY(Application) PARAM_INT(ON_OFF), "Set or remove collision process", { CollisionOn = ON_OFF; }) #ifndef SKIMMED_NET DEFINE_SCRIPT(NET_GetMyIP, CATEGORY(Network), "return this PC IP as 10.10.10.10", { RETURN_STRING(NetObj->MyIP); }) #endif DEFINE_SCRIPT_REN(SCN_ObjectHideSet, SetHideObject, CATEGORY(Small Scene) PARAM_INT(Hide) PARAM_SCENE(Smsc) PARAM_STRING_OPT(ObjectName, "") PARAM_INT_OPT(AffectChildren, 1), "Hide or unhide an object and all his son's.
His nothing do it for all", { char ObjectNameOBJ[2048]; UnicID ObjectREF; ObjectREF = 0; if(*ObjectName != 0) { ObjectREF = Smsc->ObjectNameDico.IsExist(ObjectName); if (ObjectREF == -1) { sprintf(ObjectNameOBJ,"%s.OBJ",ObjectName); ObjectREF = Smsc->ObjectNameDico.IsExist(ObjectNameOBJ); } if (ObjectREF != -1) ObjectREF = Smsc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; } else ObjectREF = 0; if (ObjectREF != -1) SmallScene_HideObject(Smsc,ObjectREF,Hide,AffectChildren); }) DEFINE_SCRIPT(SCN_ObjectHideGet, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_STRING_OPT(ObjectName, ""), "Tell if object is Hidden", { char ObjectNameOBJ[2048]; UnicID ObjectREF; ObjectREF = 0; if(*ObjectName != 0) { ObjectREF = Smsc->ObjectNameDico.IsExist(ObjectName); if (ObjectREF == -1) { sprintf(ObjectNameOBJ,"%s.OBJ",ObjectName); ObjectREF = Smsc->ObjectNameDico.IsExist(ObjectNameOBJ); } if (ObjectREF != -1) ObjectREF = Smsc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; } else ObjectREF = 0; if (ObjectREF != -1) { RETURN_BOOL(Smsc->ObjectsPtrs[ObjectREF]->Flags.HIDEN); } }) DEFINE_SCRIPT_REN(SCN_ObjectOriginalPosSet, SetPosObjectOriginal, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_STRING_OPT(ObjectName, ""), "Restore an object initial position all his son's.
his nothing do it for all", { char ObjectNameOBJ[2048]; UnicID ObjectREF; ObjectREF = 0; if(*ObjectName != 0) { ObjectREF = Smsc->ObjectNameDico.IsExist(ObjectName); if (ObjectREF == -1) { sprintf(ObjectNameOBJ,"%s.OBJ",ObjectName); ObjectREF = Smsc->ObjectNameDico.IsExist(ObjectNameOBJ); } if (ObjectREF != -1) { ObjectREF = Smsc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; } } else ObjectREF = 0; if (ObjectREF != -1) SmallScene_RestoreInitialPosition(Smsc,ObjectREF); }) DEFINE_SCRIPT(SCN_ObjectStateSave, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_STRING_OPT(ObjectName, "") PARAM_INT_OPT(index, 0) PARAM_INT_OPT(mask, 7), "Save object states
mask : 1- Flags; 2- LocalMatrix; 4- Draworder", { char ObjectNameOBJ[2048]; sprintf(ObjectNameOBJ,"%s.OBJ",ObjectName); UnicID ObjectREF; ObjectREF = Smsc->ObjectNameDico.IsExist(ObjectNameOBJ); if (ObjectREF != -1) ObjectREF = Smsc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; SmallScene_ObjectStateSave(Smsc, ObjectREF , index, mask); }) DEFINE_SCRIPT(SCN_ObjectStateRestore, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_STRING_OPT(ObjectName, "") PARAM_INT_OPT(index, 0) PARAM_INT_OPT(mask, 7), "Restore object states
mask : 1- Flags; 2- LocalMatrix; 4- Draworder", { char ObjectNameOBJ[2048]; sprintf(ObjectNameOBJ,"%s.OBJ",ObjectName); UnicID ObjectREF; ObjectREF = Smsc->ObjectNameDico.IsExist(ObjectNameOBJ); if (ObjectREF != -1) ObjectREF = Smsc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; RETURN_INT(SmallScene_ObjectStateRestore(Smsc, ObjectREF, index, mask)); }) DEFINE_SCRIPT_REN(TRK_CameraMove, MoveCam, CATEGORY(Tracking) PARAM_AFFECT(Affect) PARAM_INT(TrackeurID) PARAM_SCENE(Smsc) PARAM_INT_OPT(SmoothModeNumber,0), "Warning ! this must be called BEFORE SetTrackMatrix !!", { int TRID = TrackeurID; if (TRID >= MAX_ID) TRID = MAX_ID-1; if (TRID < 0) TRID = 0; if (ID_TABLE[TRID]) { if (!ID_TABLE[TRID]->SF_U.Booted || bManualBoot) Affect = 0; MoveSceneCamera(SmoothModeNumber, Smsc, Affect, ID_TABLE[TRID]); } }) DEFINE_SCRIPT(TRK_PadHandle, CATEGORY(Tracking) PARAM_AFFECT(Affect) PARAM_INT(index) PARAM_MATRIX(Matrix) PARAM_INT(SmoothNumber) PARAM_FLOAT(maxAngle), "Handle PPJoy", { char error[2048]; void HandlePad(int SmoothNumber, int Affect, MATRIX *pTrckMatrix, float maxAngle, char *error); HandlePad(SmoothNumber, Affect, &Matrix, maxAngle, error); RETURN_STRING(error); }) DEFINE_SCRIPT(TRK_ResolutionSet, CATEGORY(Tracking) PARAM_INT(Resolution), "Change track resolution", { trackSize = Resolution; }) DEFINE_SCRIPT(TRK_FactorTranslationSet, CATEGORY(Tracking) PARAM_FLOAT(TFactor), "Set translation factor multiplier", { FrmFactorTranslation = TFactor; }) DEFINE_SCRIPT(TRK_FactorRotationSet, CATEGORY(Tracking) PARAM_FLOAT(RFactor), "Set rotation factor multiplier", { FrmFactorRotation = RFactor; }) DEFINE_SCRIPT(TRK_FactorRotationLimitSet, CATEGORY(Tracking) PARAM_FLOAT(RLimit), "Set rotation factor multiplier", { FrmFactorRotationLimit = RLimit; }) DEFINE_SCRIPT(TRK_SmoothTranslationSet, CATEGORY(Tracking) PARAM_FLOAT(TSmooth) PARAM_FLOAT_OPT(THold, 0.0), "Set translation smooth factor, number between 0 and 1, 1-> no smooth, 0-> no move", { FrmSmooth.Translation = TSmooth; FrmSmooth.TranslationHold = THold; }) DEFINE_SCRIPT(TRK_SmoothRotationSet, CATEGORY(Tracking) PARAM_FLOAT(RSmooth), "Set rotation smooth factor, default 2, the bigger is the number, the smaller is the smooth", { FrmSmooth.Rotation = RSmooth; }) DEFINE_SCRIPT(TRK_SmoothQuatSet, CATEGORY(Tracking) PARAM_FLOAT(QSmooth) PARAM_FLOAT_OPT(QHold, 0.0), "Set quat smooth factor, number between 0 and 1, 1-> no smooth, 0-> no rotation
QHold affect non move for small movements, QHold = 1, like 0, no holding, the smaller is QHold the less the rotation is affected", { FrmSmooth.Quat = QSmooth; FrmSmooth.QuatHold = QHold; }) DEFINE_SCRIPT(TRK_SmoothQuatModeSet, CATEGORY(Tracking) PARAM_FLOAT(qMode), "Set translation smooth factor, number between 0 and 1, 1-> no smooth, 0-> no move", { FrmQuatMode = qMode; }) DEFINE_SCRIPT_REN(SCN_AnimLoad, AnimLoad, CATEGORY(Small Scene) PARAM_STRING(AnimName) PARAM_STRING_OPT(Scene, "") PARAM_INT_OPT(ForceReload, 0), "If anim does not exist, do nothing.", { RETURN_BOOL(LoadAnim(AnimName, Scene, ForceReload)); }) DEFINE_SCRIPT(SCN_AnimTime, CATEGORY(Small Scene) PARAM_STRING(AnimName) PARAM_STRING_OPT(Scene, ""), "Return anim time in milliseconds", { SmallScene *pSmallScene; UnicID AnimID; char DicoName[1024]; SmallScene_ANIM *pSmallSceneAnim; pSmallSceneAnim = NULL; pSmallScene = SmallNameToScene(Scene); sprintf(DicoName, "%s_%s", Scene, AnimName); AnimID = AnimDico.IsExist(DicoName); if (AnimID == -1) AnimID = AnimDico.IsExist(AnimName); if (pSmallScene && (AnimID != -1)) { pSmallSceneAnim = &pAllAnims[AnimDico.mpst_Dico[AnimID].AssociatedValue]; if (pSmallSceneAnim) { RETURN_INT(pSmallSceneAnim->TimeLineInMS*33); } } }) DEFINE_SCRIPT_REN(SCN_AnimPlay, AnimPlay, CATEGORY(Small Scene) PARAM_STRING(SmscName) PARAM_STRING(AnimName) PARAM_INT_OPT(BaseTime,0) PARAM_FLOAT_OPT(PlayFactor,1), "AnimPlay WILL return 1 if anim is finished.
Basetime is the time (in MS) when anim has started.
PlayFactor is the speed", { s32 DT = timeGetTime() - BaseTime; DT *= PlayFactor; RETURN_BOOL((BaseTime == 0 ) || PlayAnim(AnimName,SmscName,DT,1.0f)); }) DEFINE_SCRIPT(SCN_AnimPlayBlend, CATEGORY(Small Scene) PARAM_STRING(SmscName) PARAM_STRING(AnimName) PARAM_FLOAT(BlendFactor) PARAM_INT_OPT(BaseTime,0) PARAM_FLOAT_OPT(PlayFactor,1), "AnimPlay WILL return 1 if anim is finished.
Basetime is the time (in MS) when anim has started.
Blend is used for blending with existing position (1 is like playanim).", { s32 DT = timeGetTime() - BaseTime; DT *= PlayFactor; RETURN_BOOL((BaseTime == 0 ) || PlayAnim(AnimName,SmscName,DT,BlendFactor)); }) DEFINE_SCRIPT(SCN_AnimDestroy, CATEGORY(Small Scene) PARAM_STRING(AnimName) PARAM_STRING_OPT(Scene, ""), "Delete Anim", { DestroyAnim(AnimName, Scene); }) DEFINE_SCRIPT_REN(PGEN_Load, PGenerator_Load, CATEGORY(Particules generator) PARAM_STRING(Name) PARAM_STRING(GeneratorFileName) PARAM_STRING(SmallSceneName) PARAM_STRING_OPT(SceneObject,"") PARAM_STRING_OPT(MassTexture,""), "Load particule generator", { SIZE grid; int ID_Res; grid.cx = 1; grid.cy = 1; ID_Res = LoadPGenerator(Name, GeneratorFileName, SmallSceneName, SceneObject,MassTexture); if (ID_Res < 0) sprintf(LuaErrors, "Error Creating Particule Generator"); }) DEFINE_SCRIPT(PGEN_Delete, CATEGORY(Particules generator) PARAM_STRING(Name), "Delete particule generator", { DeletePGenerator(Name); }) DEFINE_SCRIPT(PGEN_Save, CATEGORY(Particules generator) PARAM_STRING(Name) PARAM_STRING_OPT(newFilename, ""), "save particule generator file", { SavePGenerator(Name, newFilename); }) DEFINE_SCRIPT_REN(PGEN_Process, PGenerator_Process, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_FLOAT_OPT(I_factor,0.0f) PARAM_FLOAT_OPT(J_factor,0.0f) PARAM_FLOAT_OPT(K_factor,0.0f) PARAM_INT_OPT(ProcessOnly, 0), "if [Generator Name] = 'All', process all generators", { u32 PGeneratorIndex; char GeneratorNameIn[2048]; strcpy(GeneratorNameIn, GeneratorName); strlwr(GeneratorNameIn); if (!(SkipFunctions & SKIP_PARTICLES)) { if (strcmp(GeneratorNameIn, "all")) { if (GetPGeneratorFromString(GeneratorNameIn, &PGeneratorIndex)) ProcessParticules(ID_PGENERATOR[PGeneratorIndex], ProcessOnly, I_factor, J_factor, K_factor); } else { for (int pGenIdx=0; pGenIdxparticulesTab, 0, ID_PGENERATOR[PGeneratorIndex]->maxParticules*sizeof(Particules)); ID_PGENERATOR[PGeneratorIndex]->nbParticules = 0; ID_PGENERATOR[PGeneratorIndex]->curParticule = -1; } else { ID_PGENERATOR[PGeneratorIndex]->Init(); ComputeParticleOptions(ID_PGENERATOR[PGeneratorIndex]); } } } else { for (int pGenIdx=0; pGenIdxparticulesTab, 0, ID_PGENERATOR[pGenIdx]->maxParticules*sizeof(Particules)); ID_PGENERATOR[pGenIdx]->nbParticules = 0; ID_PGENERATOR[pGenIdx]->curParticule = -1; } else { ID_PGENERATOR[pGenIdx]->Init(); ComputeParticleOptions(ID_PGENERATOR[pGenIdx]); } } } } }) DEFINE_SCRIPT(PGEN_ParticlePosGet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_INT(Index), "Get Particle position", { u32 PGeneratorIndex; if (!(SkipFunctions & SKIP_PARTICLES)) { if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { if (Index < ID_PGENERATOR[PGeneratorIndex]->nbParticules && ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].alive) { RETURN_VECTOR(&ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].coordsDest); } } } }) DEFINE_SCRIPT(PGEN_ParticlePosSet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_INT(Index) PARAM_VECTOR(coords) PARAM_INT_OPT(inSource, 0), "Get Particle position", { u32 PGeneratorIndex; if (!(SkipFunctions & SKIP_PARTICLES)) { if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { if (Index < ID_PGENERATOR[PGeneratorIndex]->nbParticules && ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].alive) { if (inSource) ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].coords = coords; else ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].coordsDest = coords; } } } }) DEFINE_SCRIPT(PGEN_ParticleSpeedGet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_INT(Index), "Get Particle position", { u32 PGeneratorIndex; if (!(SkipFunctions & SKIP_PARTICLES)) { if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { if (Index < ID_PGENERATOR[PGeneratorIndex]->nbParticules && ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].alive) { RETURN_VECTOR(&ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].speedDest); } } } }) DEFINE_SCRIPT(PGEN_ParticleSpeedSet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_INT(Index) PARAM_VECTOR(speed) PARAM_INT_OPT(inSource, 0), "Get Particle position", { u32 PGeneratorIndex; if (!(SkipFunctions & SKIP_PARTICLES)) { if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { if (Index < ID_PGENERATOR[PGeneratorIndex]->nbParticules && ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].alive) { if (inSource) ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].speed = speed; else ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].speedDest = speed; } } } }) DEFINE_SCRIPT(PGEN_ParticleCollideCallbackAdd, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_INT(Index) PARAM_STRING(CallbackName), "Add callback to specific particle when collide, Callback type:
MyCallback(SceneName, ObjectName, AbsolutePos, AbsoluteNormal, UV)", { u32 PGeneratorIndex; if (!(SkipFunctions & SKIP_PARTICLES)) { if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { if (Index < ID_PGENERATOR[PGeneratorIndex]->maxParticules) { if (ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].luaCollideCallBack) { CC_free(ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].luaCollideCallBack); ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].luaCollideCallBack = NULL; } ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].luaCollideCallBack = (char *)CC_malloc(strlen(CallbackName)+1); strcpy(ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].luaCollideCallBack, CallbackName); } } } }) DEFINE_SCRIPT(PGEN_ParticleAliveTest, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_INT(Index), "Verify if particle is alive", { u32 PGeneratorIndex; if (!(SkipFunctions & SKIP_PARTICLES)) { if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { if (Index < ID_PGENERATOR[PGeneratorIndex]->nbParticules) { RETURN_BOOL(ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].alive) } } } }) DEFINE_SCRIPT(PGEN_ParticleKill, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_INT(Index), "Kill selected Particle, if -1 kills all living particles, if -2 kill all livings particles and stop generation (if no repeat)", { u32 PGeneratorIndex; char GeneratorNameIn[2048]; strcpy(GeneratorNameIn, GeneratorName); strlwr(GeneratorNameIn); if (!(SkipFunctions & SKIP_PARTICLES)) { if (strcmp(GeneratorNameIn, "all")) { if (GetPGeneratorFromString(GeneratorNameIn, &PGeneratorIndex)) { if (Index >= 0) { ID_PGENERATOR[PGeneratorIndex]->particulesTab[Index].alive = 0; } else { for (int i=0; imaxParticules; i++) { ID_PGENERATOR[PGeneratorIndex]->particulesTab[i].alive = 0; } if (Index < -1) { ID_PGENERATOR[PGeneratorIndex]->nbParticules = ID_PGENERATOR[PGeneratorIndex]->maxParticules; } } } } else { for (int pGenIdx=0; pGenIdx= 0) { ID_PGENERATOR[pGenIdx]->particulesTab[Index].alive = 0; } else { for (int i=0; imaxParticules; i++) { ID_PGENERATOR[pGenIdx]->particulesTab[i].alive = 0; } if (Index < -1) { ID_PGENERATOR[pGenIdx]->nbParticules = ID_PGENERATOR[pGenIdx]->maxParticules; } } } } } }) DEFINE_SCRIPT(PGEN_RepeatSet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_INT(ON_OFF), "Set or Remove particle repeat mode", { u32 PGeneratorIndex; char GeneratorNameIn[2048]; strcpy(GeneratorNameIn, GeneratorName); strlwr(GeneratorNameIn); if (!(SkipFunctions & SKIP_PARTICLES)) { if (strcmp(GeneratorName, "all")) { if (GetPGeneratorFromString(GeneratorNameIn, &PGeneratorIndex)) { ID_PGENERATOR[PGeneratorIndex]->particuleRepeat = ON_OFF; } } else { for (int pGenIdx=0; pGenIdxparticuleRepeat = ON_OFF; } } } }) DEFINE_SCRIPT(PGEN_CONF_OptionsSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config Options", { Pgen->options = Value; }) DEFINE_SCRIPT(PGEN_CONF_OptionsGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Options", { RETURN_INT(Pgen->options); }) DEFINE_SCRIPT(PGEN_CONF_TextureGridSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value1) PARAM_INT(Value2), "Set Particules generator config Texture Grid", { Pgen->TextureGrid.cx = Value1; Pgen->TextureGrid.cy = Value2; }) DEFINE_SCRIPT(PGEN_CONF_TextureGridGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Texture Grid", { RETURN_INT(Pgen->TextureGrid.cx); RETURN_INT(Pgen->TextureGrid.cy); }) DEFINE_SCRIPT(PGEN_CONF_BlendModeSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config Blend Mode", { Pgen->BlendMode = Value; }) DEFINE_SCRIPT(PGEN_CONF_BlendModeGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Blend Mode", { RETURN_INT(Pgen->BlendMode); }) DEFINE_SCRIPT(PGEN_CONF_AlphaThresholdSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config Alpha Threshold", { Pgen->AlphaThreshold = Value; }) DEFINE_SCRIPT(PGEN_CONF_AlphaThresholdGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Alpha Threshold", { RETURN_INT(Pgen->AlphaThreshold); }) DEFINE_SCRIPT(PGEN_CONF_ParticuleNumberSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules total number", { Pgen->maxParticules = Value; if (Pgen->particulesTab) Pgen->particulesTab = (Particules *)CC_realloc(Pgen->particulesTab, Value*sizeof(Particules)); else Pgen->particulesTab = (Particules *)CC_malloc(Value*sizeof(Particules)); }) DEFINE_SCRIPT(PGEN_CONF_ParticuleNumberGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules total number", { RETURN_INT(Pgen->maxParticules); }) DEFINE_SCRIPT(PGEN_CONF_ParticuleLifeSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules life in ms", { Pgen->particuleLife = Value; }) DEFINE_SCRIPT(PGEN_CONF_ParticuleLifeGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules life in ms", { RETURN_INT(Pgen->particuleLife); }) DEFINE_SCRIPT(PGEN_CONF_ParticuleRepeatSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules life in ms", { Pgen->particuleRepeat = Value; }) DEFINE_SCRIPT(PGEN_CONF_ParticuleRepeatGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules life in ms", { RETURN_INT(Pgen->particuleRepeat); }) DEFINE_SCRIPT(PGEN_CONF_ParticuleLifeRandSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules life random", { Pgen->particuleLifeRand = Value; }) DEFINE_SCRIPT(PGEN_CONF_ParticuleLifeRandGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules life random", { RETURN_FLOAT(Pgen->particuleLifeRand); }) DEFINE_SCRIPT(PGEN_CONF_GenSpeedSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config generation speed", { Pgen->genSpeed = Value; }) DEFINE_SCRIPT(PGEN_CONF_GenSpeedGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config generation speed", { RETURN_FLOAT(Pgen->genSpeed); }) DEFINE_SCRIPT(PGEN_CONF_GenSpeedRandSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config generation speed random", { Pgen->genSpeedRand = Value; }) DEFINE_SCRIPT(PGEN_CONF_GenSpeedRandGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config generation speed random", { RETURN_FLOAT(Pgen->genSpeedRand); }) DEFINE_SCRIPT(PGEN_CONF_GenAngleAllowedSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config generation angle", { Pgen->genAngleAllowed = Value; }) DEFINE_SCRIPT(PGEN_CONF_GenAngleAllowedGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config generation angle", { RETURN_FLOAT(Pgen->genAngleAllowed); }) DEFINE_SCRIPT(PGEN_CONF_GenPowerSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config generation power", { Pgen->genPower = Value; }) DEFINE_SCRIPT(PGEN_CONF_GenPowerGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config generation power", { RETURN_FLOAT(Pgen->genPower); }) DEFINE_SCRIPT(PGEN_CONF_GenPowerRandSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config generation power random", { Pgen->genPowerRand = Value; }) DEFINE_SCRIPT(PGEN_CONF_GenPowerRandGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config generation power random", { RETURN_FLOAT(Pgen->genPowerRand); }) DEFINE_SCRIPT(PGEN_CONF_GenWidthSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config generation width", { Pgen->genWidth = Value; }) DEFINE_SCRIPT(PGEN_CONF_GenWidthGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config generation width", { RETURN_FLOAT(Pgen->genWidth); }) DEFINE_SCRIPT(PGEN_CONF_GenHeightSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config generation height", { Pgen->genHeight = Value; }) DEFINE_SCRIPT(PGEN_CONF_GenHeightGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config generation height", { RETURN_FLOAT(Pgen->genHeight); }) DEFINE_SCRIPT(PGEN_CONF_GenSizeRandSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config random size", { Pgen->genSizeRand = Value; }) DEFINE_SCRIPT(PGEN_CONF_GenSizeRandGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config random size", { RETURN_FLOAT(Pgen->genSizeRand); }) DEFINE_SCRIPT(PGEN_CONF_GenNumberSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config generation number", { Pgen->genNumber = Value; }) DEFINE_SCRIPT(PGEN_CONF_GenNumberGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config generation number", { RETURN_INT(Pgen->genNumber); }) DEFINE_SCRIPT(PGEN_CONF_GravitySet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_VECTOR(Value), "Set Particules generator config Gravity", { Pgen->forces.Gravity = Value; }) DEFINE_SCRIPT(PGEN_CONF_GravityGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Gravity", { RETURN_VECTOR(&Pgen->forces.Gravity); }) DEFINE_SCRIPT(PGEN_CONF_FrictionsSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Frictions", { Pgen->forces.Frictions = Value; }) DEFINE_SCRIPT(PGEN_CONF_FrictionsGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Frictions", { RETURN_FLOAT(Pgen->forces.Frictions); }) DEFINE_SCRIPT(PGEN_CONF_WindDirectionSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_VECTOR(Value), "Set Particules generator config Wind Direction", { Pgen->forces.WindDirection = Value; }) DEFINE_SCRIPT(PGEN_CONF_WindDirectionGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Wind Direction", { RETURN_VECTOR(&Pgen->forces.WindDirection); }) DEFINE_SCRIPT(PGEN_CONF_WindForceSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Wind Force", { Pgen->forces.WindForce = Value; }) DEFINE_SCRIPT(PGEN_CONF_WindForceGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Wind Force", { RETURN_FLOAT(Pgen->forces.WindForce); }) DEFINE_SCRIPT(PGEN_CONF_RotationSpeedSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Rotation Speed", { Pgen->forces.RotationSpeed = Value; }) DEFINE_SCRIPT(PGEN_CONF_RotationSpeedGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Rotation Speed", { RETURN_FLOAT(Pgen->forces.RotationSpeed); }) DEFINE_SCRIPT(PGEN_CONF_RotationRandSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Rotation Random", { Pgen->forces.RotationRand = Value; }) DEFINE_SCRIPT(PGEN_CONF_RotationRandGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Rotation Random", { RETURN_FLOAT(Pgen->forces.RotationRand); }) DEFINE_SCRIPT(PGEN_CONF_RotationInitSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value1) PARAM_FLOAT(Value2), "Set Particules generator config ", { Pgen->forces.RotationInit = Value1; Pgen->forces.RotationInit2 = Value2; }) DEFINE_SCRIPT(PGEN_CONF_RotationInitGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config ", { RETURN_FLOAT(Pgen->forces.RotationInit); RETURN_FLOAT(Pgen->forces.RotationInit2); }) DEFINE_SCRIPT(PGEN_CONF_GrowForTimeSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config Grow For Time", { Pgen->forces.GrowFor = Value; }) DEFINE_SCRIPT(PGEN_CONF_GrowForTimeGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Grow For Time", { RETURN_INT(Pgen->forces.GrowFor); }) DEFINE_SCRIPT(PGEN_CONF_GrowForInitSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Grow For Init", { Pgen->forces.GrowForInit = Value; }) DEFINE_SCRIPT(PGEN_CONF_GrowForInitGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Grow For Init", { RETURN_FLOAT(Pgen->forces.GrowForInit); }) DEFINE_SCRIPT(PGEN_CONF_GrowForEndSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Grow For End", { Pgen->forces.GrowForEnd = Value; }) DEFINE_SCRIPT(PGEN_CONF_GrowForEndGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Grow For End", { RETURN_FLOAT(Pgen->forces.GrowForEnd); }) DEFINE_SCRIPT(PGEN_CONF_GrowForTimeRandSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Grow For Time Random", { Pgen->forces.GrowForRand = Value; }) DEFINE_SCRIPT(PGEN_CONF_GrowForTimeRandGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Grow For Time Random", { RETURN_FLOAT(Pgen->forces.GrowForRand); }) DEFINE_SCRIPT(PGEN_CONF_FadeForTimeSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config Fade For Time", { Pgen->forces.FadeFor = Value; }) DEFINE_SCRIPT(PGEN_CONF_FadeForTimeGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Fade For Time", { RETURN_INT(Pgen->forces.FadeFor); }) DEFINE_SCRIPT(PGEN_CONF_FadeForInitSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Fade For Init", { Pgen->forces.FadeForInit = Value; }) DEFINE_SCRIPT(PGEN_CONF_FadeForInitGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Fade For Init", { RETURN_FLOAT(Pgen->forces.FadeForInit); }) DEFINE_SCRIPT(PGEN_CONF_FadeForEndSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Fade For End", { Pgen->forces.FadeForEnd = Value; }) DEFINE_SCRIPT(PGEN_CONF_FadeForEndGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Fade For End", { RETURN_FLOAT(Pgen->forces.FadeForEnd); }) DEFINE_SCRIPT(PGEN_CONF_FadeForTimeRandSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config Fade For Time Random", { Pgen->forces.FadeForRand = Value; }) DEFINE_SCRIPT(PGEN_CONF_FadeForTimeRandGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Fade For Time Random", { RETURN_FLOAT(Pgen->forces.FadeForRand); }) DEFINE_SCRIPT(PGEN_CONF_GrowForColorTimeSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config Grow For Color Time", { Pgen->forces.GrowForColor = Value; }) DEFINE_SCRIPT(PGEN_CONF_GrowForColorTimeGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Grow For Color Time", { RETURN_INT(Pgen->forces.GrowForColor); }) DEFINE_SCRIPT(PGEN_CONF_GrowForColorInitSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_COLOR(Value), "Set Particules generator config Grow For Color Init", { Value = ARGB2ABGR(Value); Pgen->forces.GrowForColorInit = Value; }) DEFINE_SCRIPT(PGEN_CONF_GrowForColorInitGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Grow For Color Init", { RETURN_COLOR(Pgen->forces.GrowForColorInit); }) DEFINE_SCRIPT(PGEN_CONF_GrowForColorEndSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_COLOR(Value), "Set Particules generator config Grow For Color End", { Value = ARGB2ABGR(Value); Pgen->forces.GrowForColorEnd = Value; }) DEFINE_SCRIPT(PGEN_CONF_GrowForColorEndGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Grow For Color End", { RETURN_COLOR(Pgen->forces.GrowForColorEnd); }) DEFINE_SCRIPT(PGEN_CONF_FadeForColorTimeSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config Fade For Color Time", { Pgen->forces.FadeForColor = Value; }) DEFINE_SCRIPT(PGEN_CONF_FadeForColorTimeGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Fade For Color Time", { RETURN_INT(Pgen->forces.FadeForColor); }) DEFINE_SCRIPT(PGEN_CONF_FadeForColorInitSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_COLOR(Value), "Set Particules generator config Fade For Color Init", { Value = ARGB2ABGR(Value); Pgen->forces.FadeForColorInit = Value; }) DEFINE_SCRIPT(PGEN_CONF_FadeForColorInitGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Fade For Color Init", { RETURN_COLOR(Pgen->forces.FadeForColorInit); }) DEFINE_SCRIPT(PGEN_CONF_FadeForColorEndSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_COLOR(Value), "Set Particules generator config Fade For Color End", { Value = ARGB2ABGR(Value); Pgen->forces.FadeForColorEnd = Value; }) DEFINE_SCRIPT(PGEN_CONF_FadeForColorEndGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Fade For Color End", { RETURN_COLOR(Pgen->forces.FadeForColorEnd); }) DEFINE_SCRIPT(PGEN_CONF_AnimSpeedSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config Anim Speed", { Pgen->forces.AnimSpeed = Value; }) DEFINE_SCRIPT(PGEN_CONF_AnimSpeedGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Anim Speed", { RETURN_INT(Pgen->forces.AnimSpeed); }) DEFINE_SCRIPT(PGEN_CONF_AnimRepeatSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config Anim Repeat", { Pgen->forces.AnimRepeat = Value; }) DEFINE_SCRIPT(PGEN_CONF_AnimRepeatGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config Anim Repeat", { RETURN_INT(Pgen->forces.AnimRepeat); }) DEFINE_SCRIPT(PGEN_CONF_AnimInitSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_INT(Value), "Set Particules generator config AnimInit", { Pgen->forces.AnimInit = Value; }) DEFINE_SCRIPT(PGEN_CONF_AnimInitGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config AnimInit", { RETURN_INT(Pgen->forces.AnimInit); }) DEFINE_SCRIPT(PGEN_CONF_CollisionFrictionSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config collision Friction", { Pgen->forces.collisionFriction = Value; }) DEFINE_SCRIPT(PGEN_CONF_CollisionFrictionGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config collision Friction", { RETURN_FLOAT(Pgen->forces.collisionFriction); }) DEFINE_SCRIPT(PGEN_CONF_CollisionRandAngleSet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen) PARAM_FLOAT(Value), "Set Particules generator config collision Random Angle", { Pgen->forces.collisionRandAngle = Value; }) DEFINE_SCRIPT(PGEN_CONF_CollisionRandAngleGet, CATEGORY(Particules generator config) PARAM_PGENERATOR(Pgen), "Get Particules generator config collision Random Angle", { RETURN_FLOAT(Pgen->forces.collisionRandAngle); }) DEFINE_SCRIPT(APP_ApplicationPathGet, CATEGORY(Application), "Get the application path", { int nArgs; LPWSTR *szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); size_t size = wcslen(szArglist[0])+1; char* exepathname = (char*)ZeroAlloc(size); wcstombs(exepathname, szArglist[0], size); RETURN_STRING(exepathname); }) DEFINE_SCRIPT(PGEN_MediaGet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName), "Set or Remove particle media", { u32 PGeneratorIndex; if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { RETURN_STRING(ID_PGENERATOR[PGeneratorIndex]->MediaName); } }) DEFINE_SCRIPT(PGEN_MediaSet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_STRING(media), "Set or Remove particle media", { u32 PGeneratorIndex; u32 PMediaIndex; if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { if (GetMediaFromString(ID_PGENERATOR[PGeneratorIndex]->MediaName, &PMediaIndex)) DestroyMedia(PMediaIndex); CreateMedia(media, 0); strcpy(ID_PGENERATOR[PGeneratorIndex]->MediaName, media); } }) DEFINE_SCRIPT(PGEN_MassTextureGet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName), "Set or Remove particle mass media", { u32 PGeneratorIndex; if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { RETURN_STRING(ID_PGENERATOR[PGeneratorIndex]->MassTextureName); } }) DEFINE_SCRIPT(PGEN_MassTextureSet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_STRING(media), "Set or Remove particle mass media", { u32 PGeneratorIndex; u32 PMediaIndex; if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { if (*ID_PGENERATOR[PGeneratorIndex]->MassTextureName && GetMediaFromString(ID_PGENERATOR[PGeneratorIndex]->MassTextureName, &PMediaIndex)) DestroyMedia(PMediaIndex); if (*media) CreateMedia(media, 0); strcpy(ID_PGENERATOR[PGeneratorIndex]->MassTextureName, media); } }) DEFINE_SCRIPT(PGEN_SceneGet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName), "Get particle scene", { u32 PGeneratorIndex; if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { RETURN_STRING(ID_PGENERATOR[PGeneratorIndex]->SceneName); } }) DEFINE_SCRIPT(PGEN_SceneSet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_STRING(scene), "Set particle scene", { u32 PGeneratorIndex; if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { strcpy(ID_PGENERATOR[PGeneratorIndex]->SceneName, scene); } }) DEFINE_SCRIPT(PGEN_SceneObjectGet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName), "Get particle scene object", { u32 PGeneratorIndex; if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { RETURN_STRING(ID_PGENERATOR[PGeneratorIndex]->ObjectName); } }) DEFINE_SCRIPT(PGEN_SceneObjectSet, CATEGORY(Particules generator) PARAM_STRING(GeneratorName) PARAM_STRING(object), "Set particle scene object", { u32 PGeneratorIndex; if (GetPGeneratorFromString(GeneratorName, &PGeneratorIndex)) { strcpy(ID_PGENERATOR[PGeneratorIndex]->ObjectName, object); } }) DEFINE_SCRIPT(PGEN_PGRExplore, CATEGORY(Small Scene) PARAM_STRING(PGRFile), "Open PGR file", { char PGR[2048]; char TEXT[2048]; char TEXT2[2048]; FILE *F; strcpy(PGR, PGRFile); if (GetFileNameExtend(PGR) != '.PGR') strcat(PGR, ".PGR"); sprintf(TEXT,".\\Particles\\%s", PGR); F = fopen(TEXT,"rb"); if (F) { fclose(F); sprintf(TEXT2,"CMD /C START %s", TEXT); WinExec(TEXT2,SW_HIDE); } }) DEFINE_SCRIPT(FUR_Load, CATEGORY(Fur generator) PARAM_STRING(Name) PARAM_STRING(GeneratorFileName) PARAM_STRING(SmallSceneName) PARAM_STRING_OPT(SceneObject,""), "Load fur generator", { if (LoadFur(Name, GeneratorFileName, SmallSceneName, SceneObject) < 0) sprintf(LuaErrors, "Error Creating Particule Generator"); }) DEFINE_SCRIPT(FUR_Delete, CATEGORY(Fur generator) PARAM_STRING(Name), "Delete fur generator", { DeleteFur(Name); }) DEFINE_SCRIPT(FUR_Save, CATEGORY(Fur generator) PARAM_STRING(Name) PARAM_STRING_OPT(newFilename, "") PARAM_INT_OPT(fullPath, 0), "save particule generator file", { SaveFur(Name, newFilename, fullPath); }) DEFINE_SCRIPT(FUR_Render, CATEGORY(Fur generator) PARAM_STRING(GeneratorName) PARAM_STRING_OPT(SmallSceneName,""), "if [Generator Name] = 'All', process all furs", { u32 FurIndex; char GeneratorNameIn[2048]; strcpy(GeneratorNameIn, GeneratorName); strlwr(GeneratorNameIn); //if (!(SkipFunctions & SKIP_PARTICLES)) { if (strcmp(GeneratorNameIn, "all")) { if (GetFurFromString(GeneratorNameIn, &FurIndex)) RenderFur(ID_FUR[FurIndex], SmallSceneName); } else { for (int furIdx=0; furIdxInit(); RETURN_BOOL(1); } else { RETURN_BOOL(0); } } else { for (int furIdx=0; furIdxInit(); } } } }) DEFINE_SCRIPT(FUR_Debug, CATEGORY(Fur generator) PARAM_INT_OPT(debug,1), "Draw debug info", { FurDebug = debug; }) DEFINE_SCRIPT(FUR_GeneratorSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_STRING(GeneratorName), "Set Fur generator Generator", { strcpy(Fur->GeneratorName, GeneratorName); ComputeFurOptions(Fur); }) DEFINE_SCRIPT(FUR_GeneratorGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator Generator", { RETURN_STRING(Fur->GeneratorName); }) DEFINE_SCRIPT(FUR_SceneSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_STRING(SceneName), "Set Fur generator Scene", { strcpy(Fur->SceneName, SceneName); ComputeFurOptions(Fur); }) DEFINE_SCRIPT(FUR_SceneGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator Scene", { RETURN_STRING(Fur->SceneName); }) DEFINE_SCRIPT(FUR_ObjectSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_STRING(ObjectName), "Set Fur generator Object", { strcpy(Fur->ObjectName, ObjectName); ComputeFurOptions(Fur); }) DEFINE_SCRIPT(FUR_ObjectGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator Object", { RETURN_STRING(Fur->ObjectName); }) DEFINE_SCRIPT(FUR_CONF_ModeSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_INT(Value), "Set Fur generator config Mode", { Fur->Mode = Value; }) DEFINE_SCRIPT(FUR_CONF_ModeGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config Mode", { RETURN_INT(Fur->Mode); }) DEFINE_SCRIPT(FUR_CONF_NbElmtSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_INT(Value), "Set Fur generator config nbFurElmt", { Fur->nbFurElmt = Value; }) DEFINE_SCRIPT(FUR_CONF_NbElmtGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config nbFurElmt", { RETURN_INT(Fur->nbFurElmt); }) DEFINE_SCRIPT(FUR_CONF_SpriteTextureMatNameSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_STRING(Value), "Set Fur generator config SpriteTextureMatName", { SetFurMaterial(Fur, Value); }) DEFINE_SCRIPT(FUR_CONF_SpriteTextureMatNameGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config SpriteTextureMatName", { RETURN_STRING(Fur->SpriteTextureMatName); }) DEFINE_SCRIPT(FUR_CONF_MassTextureNameSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_STRING(Value), "Set Fur generator config MassTextureName", { strcpy(Fur->MassTextureName, Value); }) DEFINE_SCRIPT(FUR_CONF_MassTextureNameGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config MassTextureName", { RETURN_STRING(Fur->MassTextureName); }) DEFINE_SCRIPT(FUR_CONF_SpriteWidthSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_FLOAT(Value), "Set Fur generator config SpriteWidth", { Fur->SpriteWidth = Value; }) DEFINE_SCRIPT(FUR_CONF_SpriteWidthGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config SpriteWidth", { RETURN_FLOAT(Fur->SpriteWidth); }) DEFINE_SCRIPT(FUR_CONF_SpriteWidthRandSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_FLOAT(Value), "Set Fur generator config SpriteWidthRand", { Fur->SpriteWidthRand = Value; }) DEFINE_SCRIPT(FUR_CONF_SpriteWidthRandGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config SpriteWidthRand", { RETURN_FLOAT(Fur->SpriteWidthRand); }) DEFINE_SCRIPT(FUR_CONF_SpriteHeightSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_FLOAT(Value), "Set Fur generator config SpriteHeight", { Fur->SpriteHeight = Value; }) DEFINE_SCRIPT(FUR_CONF_SpriteHeightGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config SpriteHeight", { RETURN_FLOAT(Fur->SpriteHeight); }) DEFINE_SCRIPT(FUR_CONF_SpriteHeightRandSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_FLOAT(Value), "Set Fur generator config SpriteHeightRand", { Fur->SpriteHeightRand = Value; }) DEFINE_SCRIPT(FUR_CONF_SpriteHeightRandGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config SpriteHeightRand", { RETURN_FLOAT(Fur->SpriteHeightRand); }) DEFINE_SCRIPT(FUR_CONF_SpritePositionSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_FLOAT(Value), "Set Fur generator config SpritePosition", { Fur->SpritePosition = Value; }) DEFINE_SCRIPT(FUR_CONF_SpritePositionGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config SpritePosition", { RETURN_FLOAT(Fur->SpritePosition); }) DEFINE_SCRIPT(FUR_CONF_SpriteLevelsSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_INT(Value), "Set Fur generator config SpriteLevels", { Fur->SpriteLevels = Value; }) DEFINE_SCRIPT(FUR_CONF_SpriteLevelsGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config SpriteLevels", { RETURN_INT(Fur->SpriteLevels); }) DEFINE_SCRIPT(FUR_CONF_OrientationStrenghSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_FLOAT(Value), "Set Fur generator config OrientationStrengh", { Fur->OrientationStrengh = Value; }) DEFINE_SCRIPT(FUR_CONF_OrientationStrenghGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config OrientationStrengh", { RETURN_FLOAT(Fur->OrientationStrengh); }) DEFINE_SCRIPT(FUR_CONF_ElasticitySet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_FLOAT(Value), "Set Fur generator config Elasticity", { Fur->OrientationMeca.elasticity = Value; }) DEFINE_SCRIPT(FUR_CONF_ElasticityGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config Elasticity", { RETURN_FLOAT(Fur->OrientationMeca.elasticity); }) DEFINE_SCRIPT(FUR_CONF_FrictionSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_FLOAT(Value), "Set Fur generator config Friction", { Fur->OrientationMeca.friction = Value; }) DEFINE_SCRIPT(FUR_CONF_FrictionGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config Friction", { RETURN_FLOAT(Fur->OrientationMeca.friction); }) DEFINE_SCRIPT(FUR_CONF_NbOrientationSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_INT(Value), "Set Fur generator config nbOrientation", { if (Value > 0) { if (Fur->OrientationList) Fur->OrientationList = (Vector *)CC_realloc(Fur->OrientationList, Value*sizeof(Vector)); else Fur->OrientationList = (Vector *)CC_malloc(Value*sizeof(Vector)); } else if (Fur->OrientationList) { CC_free(Fur->OrientationList); Fur->OrientationList = NULL; } if (Fur->nbOrientation < Value) memset(Fur->OrientationList + Fur->nbOrientation, 0, (Value-Fur->nbOrientation)*sizeof(Vector)); Fur->nbOrientation = Value; }) DEFINE_SCRIPT(FUR_CONF_NbOrientationGet, CATEGORY(Fur generator config) PARAM_FUR(Fur), "Get Fur generator config nbOrientation", { RETURN_FLOAT(Fur->nbOrientation); }) DEFINE_SCRIPT(FUR_CONF_OrientationSet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_INT(index) PARAM_VECTOR(Value), "Set Fur generator config Orientation", { if (index < Fur->nbOrientation) Fur->OrientationList[index] = Value; }) DEFINE_SCRIPT(FUR_CONF_OrientationGet, CATEGORY(Fur generator config) PARAM_FUR(Fur) PARAM_INT(index), "Get Fur generator config Orientation", { if (index < Fur->nbOrientation) { RETURN_VECTOR(&Fur->OrientationList[index]);} }) DEFINE_SCRIPT(PICK_EpsilonSet, CATEGORY(Picking) PARAM_FLOAT(Epsilon), "Change picking Z tolerance", { extern float PIKING_EPSILLON; PIKING_EPSILLON = Epsilon; }) DEFINE_SCRIPT(PICK_EpsilonGet, CATEGORY(Picking), "Get current picking Z tolerance", { extern float PIKING_EPSILLON; RETURN_FLOAT(PIKING_EPSILLON); }) DEFINE_SCRIPT_REN(PICK_FlagSet, PICK_SetFlag,CATEGORY(Picking) PARAM_STRING(FlagName),"If the name is not empty and different than '0', enable picking (!! Time consuming !! )
This Flag allow you to know when picking happen", { if (*FlagName == 0 || !strcmp(FlagName, "0") || (SkipFunctions & SKIP_PICKING)) { *PickReportCurrent.PickingClass = 0; DI->PickingEnable = 0; } else { strcpy(PickReportCurrent.PickingClass, FlagName); DI->PickingEnable = hasFocus; } }) DEFINE_SCRIPT_REN(PICK_FlagGet, PICK_GetFlag,CATEGORY(Picking),"Return the pick flag active when picking occurs", { RETURN_STRING(PickReportToWatch.PickingClass); }) DEFINE_SCRIPT(PICK_FlagCurrentGet,CATEGORY(Picking),"Return the pick flag active when picking occurs", { RETURN_STRING(PickReportResult.PickingClass); }) DEFINE_SCRIPT(PICK_CaptureSet,CATEGORY(Picking) PARAM_INT(OnOff),"Force to keep focus if 1, even if mouse is outside the main window. 0 will release this option", { extern void WINMAIN_SETCAPTURE(u32 OnOff); CaptureMode = OnOff && *PickReportFinal.PickingClass; WINMAIN_SETCAPTURE(CaptureMode); }) DEFINE_SCRIPT(PICK_CoordLocalGet,CATEGORY(Picking),"If a small scene has been picked, return LOCAL XYZ else '0'", { if (*PickReportToWatch.PickingClass && PickReportToWatch.CollidedSmallSceneGameObjectName[0]) { RETURN_VECTOR(&PickReportToWatch.PickingCoordXYZ_Local); } }) DEFINE_SCRIPT(PICK_CoordGlobalGet,CATEGORY(Picking),"If a small scene has been picked, return GLOBAL XYZ else '0'", { if (*PickReportToWatch.PickingClass && PickReportToWatch.CollidedSmallSceneGameObjectName[0]) { RETURN_VECTOR(&PickReportToWatch.PickingCoordXYZ_Global); } }) DEFINE_SCRIPT_REN(PICK_SmallSceneNameGet, PICK_GetSmallSceneName,CATEGORY(Picking),"If a small scene has been picked, return SmallScene Name, else '0'", { if (*PickReportToWatch.PickingClass && PickReportToWatch.CollidedSmallSceneName[0]) { RETURN_STRING(PickReportToWatch.CollidedSmallSceneName); } }) DEFINE_SCRIPT_REN(PICK_SmallSceneObjectNameGet, PICK_GetSmallSceneObjectName,CATEGORY(Picking),"If a small scene has been picked, return SmallScene Object Name, else '0'", { if (*PickReportToWatch.PickingClass && PickReportToWatch.CollidedSmallSceneGameObjectName[0]) { RETURN_STRING(PickReportToWatch.CollidedSmallSceneGameObjectName); } }) DEFINE_SCRIPT(PICK_SmallMaterialNameGet,CATEGORY(Picking),"If a small scene has been picked, return SmallScene Material Name, else '0'", { if (*PickReportToWatch.PickingClass && PickReportToWatch.CollidedSmallMaterialName[0]) { RETURN_STRING(PickReportToWatch.CollidedSmallMaterialName); } }) DEFINE_SCRIPT(SCN_PointScreenToScene, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_VECTOR(ScreenPoint) , "Transform screen point into the smallescene coordinate", { ScreenPoint = ScreenPointToScene(Smsc, ScreenPoint); RETURN_VECTOR(&ScreenPoint); }) DEFINE_SCRIPT(SCN_PointSceneToScreen, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_VECTOR(ScenePoint) , "Transform screen point into the smallescene coordinate", { ScenePoint = ScenePointToScreen(Smsc, ScenePoint); RETURN_VECTOR(&ScenePoint); }) DEFINE_SCRIPT_REN(PICK_MediaNameGet, PICK_GetPickedMediaName,CATEGORY(Picking),"If a media was associated to the picking return his name, else '0'", { if (*PickReportToWatch.PickingClass && PickReportToWatch.CollidedMap) { if (PickReportToWatch.CollidedMediaName[0] == 0) { for (u32 Counter = 0 ; Counter < MAX_INPMED ; Counter++) { if (ID_MEDIA[Counter] && (&ID_MEDIA[Counter]->Image == PickReportToWatch.CollidedMap)) { strcpy((char*)PickReportToWatch.CollidedMediaName,(char*)ID_MEDIA[Counter]->MediaName); Counter = MAX_INPMED; } } } if (PickReportToWatch.CollidedMediaName[0] == 0) PickReportToWatch.CollidedMap = NULL; else { RETURN_STRING(PickReportToWatch.CollidedMediaName); } } }) DEFINE_SCRIPT(PICK_MediaNicknameGet,CATEGORY(Picking),"If a media was associated to the picking return his nickname, else '0'", { if (*PickReportToWatch.PickingClass && PickReportToWatch.CollidedMap) { if (PickReportToWatch.CollidedMediaNickname[0] == 0) { for (u32 Counter = 0 ; Counter < MAX_INPMED ; Counter++) { if (ID_MEDIA[Counter] && (&ID_MEDIA[Counter]->Image == PickReportToWatch.CollidedMap)) { strcpy((char*)PickReportToWatch.CollidedMediaNickname,(char*)ID_MEDIA[Counter]->Nickname); Counter = MAX_INPMED; } } } if (PickReportToWatch.CollidedMediaNickname[0] != 0) { RETURN_STRING(PickReportToWatch.CollidedMediaNickname); } } }) DEFINE_SCRIPT_REN(PICK_ColorGet, PICK_GetColor,CATEGORY(Picking),"If a media was associated to the picking, return the color of the pick, else '0'", { if (*PickReportToWatch.PickingClass && PickReportToWatch.CollidedMap) { if (PickReportToWatch.CollidedMediaName[0] == 0) { for (u32 Counter = 0 ; Counter < MAX_INPMED ; Counter++) { if (ID_MEDIA[Counter] && (&ID_MEDIA[Counter]->Image == PickReportToWatch.CollidedMap)) { strcpy((char*)PickReportToWatch.CollidedMediaName,(char*)ID_MEDIA[Counter]->MediaName); Counter = MAX_INPMED; } } } if (PickReportToWatch.CollidedMediaName[0] == 0) PickReportToWatch.CollidedMap = NULL; else { RETURN_COLOR(0xFFFFFF & PickReportToWatch.CollidedMap->GetValue((int)PickReportToWatch.PickingCoordUV.x + (int)PickReportToWatch.PickingCoordUV.y*PickReportToWatch.CollidedMap->PITCH)); } } }) DEFINE_SCRIPT_REN(PICK_MediaXYGet, PICK_GetMediaXY, CATEGORY(Picking),"If a media was associated to the picking return the texture coords of the picking point, else '0'", { if (*PickReportToWatch.PickingClass && PickReportToWatch.CollidedMap) { if (PickReportToWatch.CollidedMediaName[0] == 0) { for (u32 Counter = 0 ; Counter < MAX_INPMED ; Counter++) { if (ID_MEDIA[Counter] && (&ID_MEDIA[Counter]->Image == PickReportToWatch.CollidedMap)) { strcpy((char*)PickReportToWatch.CollidedMediaName,(char*)ID_MEDIA[Counter]->MediaName); Counter = MAX_INPMED; } } } if (PickReportToWatch.CollidedMediaName[0] == 0) PickReportToWatch.CollidedMap = NULL; else { RETURN_POINTF(PickReportToWatch.PickingCoordUV.x, PickReportToWatch.CollidedMap->SY - PickReportToWatch.PickingCoordUV.y); } } }) DEFINE_SCRIPT(PICK_CaptureGrowSet, CATEGORY(Picking) PARAM_INT(Size), "Make grow tolerancy of picking by [SIZE] pixels", { PickReportCurrent.GrowCaptureSize = Size; }) DEFINE_SCRIPT(PICK_AlphaThresholdSet, CATEGORY(Picking) PARAM_INT(ALPHA), "Set the alpha picking sensitivity.0 mean pick everything.Range is 0-256", { PickReportCurrent.AlphaThreshold = ALPHA; }) DEFINE_SCRIPT_REN(SCN_FocaleSet, SetSmScFocale, CATEGORY(Small Scene) PARAM_SCENE(Smsc) PARAM_FLOAT(NewFocale), "Negative numbers mean ORTHO (ISOMETRIC) Focale", { if(Smsc) Smsc->fFocalToUseForNextRender = NewFocale; }) DEFINE_SCRIPT(SCN_FocaleGet, CATEGORY(Small Scene) PARAM_SCENE(Smsc), "Get the focal of a small scene. Negative numbers mean ORTHO (ISOMETRIC) Focale.", { float focale = Smsc->fFocalToUseForNextRender; if (focale ==0) focale = 2.5; if(Smsc) RETURN_FLOAT(focale); }) DEFINE_SCRIPT(VECTOR_New, CATEGORY(VECTOR) PARAM_FLOAT_OPT(x,0) PARAM_FLOAT_OPT(y,0) PARAM_FLOAT_OPT(z,0) , "Create Null Vector", { Vector newVector(x,y,z); RETURN_VECTOR(&newVector); }) DEFINE_SCRIPT(QUAT_New, CATEGORY(QUAT) PARAM_FLOAT_OPT(x,0) PARAM_FLOAT_OPT(y,0) PARAM_FLOAT_OPT(z,0) PARAM_FLOAT_OPT(w,0) , "Create Indetity quaternion", { Quat newQuat(x,y,z,w); RETURN_QUAT(&newQuat); }) DEFINE_SCRIPT(MATRIX_New, CATEGORY(MATRIX), "Create Indetity matrix", { MATRIX Identity; RETURN_MATRIX(&Identity); }) DEFINE_SCRIPT(MATRIX_RotateI,CATEGORY(MATRIX) PARAM_MATRIX(Pos) PARAM_FLOAT(Angle),"Angle is in degree", { Pos.RotateAround_I(Angle * 3.1415927f / 180.0f); RETURN_MATRIX(&Pos); }) DEFINE_SCRIPT(MATRIX_RotateJ,CATEGORY(MATRIX) PARAM_MATRIX(Pos) PARAM_FLOAT(Angle),"Angle is in degree", { Pos.RotateAround_J(Angle * 3.1415927f / 180.0f); RETURN_MATRIX(&Pos); }) DEFINE_SCRIPT(MATRIX_RotateK,CATEGORY(MATRIX) PARAM_MATRIX(Pos) PARAM_FLOAT(Angle),"Angle is in degree", { Pos.RotateAround_K(Angle * 3.1415927f / 180.0f); RETURN_MATRIX(&Pos); }) DEFINE_SCRIPT(MATRIX_RotateX,CATEGORY(MATRIX) PARAM_MATRIX(Pos) PARAM_FLOAT(Angle),"Angle is in degree", { Pos.RotateAround_X(Angle * 3.1415927f / 180.0f); RETURN_MATRIX(&Pos); }) DEFINE_SCRIPT(MATRIX_RotateY,CATEGORY(MATRIX) PARAM_MATRIX(Pos) PARAM_FLOAT(Angle),"Angle is in degree", { Pos.RotateAround_Y(Angle * 3.1415927f / 180.0f); RETURN_MATRIX(&Pos); }) DEFINE_SCRIPT(MATRIX_RotateZ,CATEGORY(MATRIX) PARAM_MATRIX(Pos) PARAM_FLOAT(Angle),"Angle is in degree", { Pos.RotateAround_Z(Angle * 3.1415927f / 180.0f); RETURN_MATRIX(&Pos); }) DEFINE_SCRIPT(MATRIX_RotationAmplify, CATEGORY(MATRIX) PARAM_MATRIX(RotationMatrix) PARAM_FLOAT(factor) PARAM_FLOAT_OPT(angleLimit, -1), "Amplify or reduct a rotation matrix", { Vector Tranlation = RotationMatrix.T; void MatrixStretchAngle(MATRIX *MatrixPtr, float factor, float limit); MatrixStretchAngle(&RotationMatrix, factor, angleLimit); RotationMatrix.T = Tranlation; RETURN_MATRIX(&RotationMatrix); }) DEFINE_SCRIPT(MATRIX_ToEuler, CATEGORY(MATRIX) PARAM_MATRIX(matrix), "Amplify or reduct a rotation matrix", { Vector EulerVect; matrix.ToEuler(EulerVect); EulerVect *= 45 / atan(1.0); RETURN_VECTOR(&EulerVect); }) DEFINE_SCRIPT(MATRIX_FromEuler, CATEGORY(MATRIX) PARAM_VECTOR(EulerVect), "Amplify or reduct a rotation matrix", { MATRIX matrix; EulerVect *= atan(1.0) / 45; matrix.FromEuler(EulerVect); RETURN_MATRIX(&matrix); }) DEFINE_SCRIPT(MATRIX_ToQuat, CATEGORY(MATRIX) PARAM_MATRIX(matrix), "Amplify or reduct a rotation matrix", { Quat quat; quat.ComputeFromMatrix(&matrix); RETURN_QUAT(&quat); }) DEFINE_SCRIPT(MATRIX_FromQuat, CATEGORY(MATRIX) PARAM_QUAT(quat), "Amplify or reduct a rotation matrix", { MATRIX matrix; quat.TransforToMatrix(&matrix); RETURN_MATRIX(&matrix); }) DEFINE_SCRIPT(MATRIX_Inverse, CATEGORY(MATRIX) PARAM_MATRIX(matrix), "Inverse the matrix", { MATRIX matrixDst; matrix.Inverse(matrixDst); RETURN_MATRIX(&matrixDst); }) DEFINE_SCRIPT(MATRIX_ZoomSet,CATEGORY(MATRIX) PARAM_MATRIX(Pos) PARAM_VECTOR(Zoom),"Zoom is a Factor", { Pos.I.Normalize(); Pos.J.Normalize(); Pos.K.Normalize(); Pos.I *= Zoom.x; Pos.J *= Zoom.y; Pos.K *= Zoom.z; RETURN_MATRIX(&Pos); }) DEFINE_SCRIPT(MATRIX_ZoomGet,CATEGORY(MATRIX) PARAM_MATRIX(Pos),"", { Vector Zoom; Zoom.x = Pos.I.Norm(); Zoom.y = Pos.J.Norm(); Zoom.z = Pos.K.Norm(); RETURN_VECTOR(&Zoom); }) DEFINE_SCRIPT(MATRIX_Blend,CATEGORY(MATRIX) PARAM_MATRIX(Pos1) PARAM_MATRIX(Pos2) PARAM_FLOAT(Factor),"", { Pos1.Blend(Pos2,Factor); RETURN_MATRIX(&Pos1); }) DEFINE_SCRIPT(TRK_ComputeBackground, CATEGORY(Tracking) PARAM_INT(Activate) PARAM_INT(Relearn), "Compute back. Store result in alpha channel", { u32 TRK_AE_ComputeBackground(u32 Activate, u32 Relearn); RETURN_INT(TRK_AE_ComputeBackground(Activate,Relearn)); }) DEFINE_SCRIPT(TRK_ComputeBackgroundParrams, CATEGORY(Tracking) PARAM_INT(Blur) PARAM_INT(Blur_Summ), "Compute back denoise parrams. ", { void TRK_AE_ComputeBackgroundParrams(s32 FactorBlur, s32 FactorBlurSumm); TRK_AE_ComputeBackgroundParrams(Blur, Blur_Summ); }) DEFINE_SCRIPT(TRK_FrameHasBeenSkipped, CATEGORY(Tracking), "Return 0 if tracker has been called", { RETURN_INT(ulSkippedFrameCounter); }) DEFINE_SCRIPT(MAT_SaveIn, CATEGORY(Material) PARAM_SCENE_MATERIAL(Smsc, Material) PARAM_STRING(SmscToAdd) PARAM_STRING(MaterialToAdd), "save material", { SaveMaterial(Material, SmscToAdd, MaterialToAdd); }) DEFINE_SCRIPT(IK_Check, CATEGORY(IK) PARAM_SCENE(SmSc), "Check IK", { if (!SmSc->IK) { SmSc->IK = (SmallScene_IK *)CC_malloc(sizeof(SmallScene_IK)); memset(SmSc->IK, 0, sizeof(SmallScene_IK)); SmSc->IODico.Init(); } }) DEFINE_SCRIPT(IK_Reset, CATEGORY(IK) PARAM_STRING(SceneName), "Set an empty IK (reset existing or create)", { SmallSceneIKReset(SceneName); }) DEFINE_SCRIPT(IK_Save, CATEGORY(IK) PARAM_STRING(SceneName), "Save IK File", { char NameIK[2048]; u32 res; SmallScene *Smsc = SmallNameToScene(SceneName); sprintf(NameIK,".\\media\\%s\\Modified\\SmSc.IKM",SceneName); IKPatchInitToObj(Smsc); res = SaveSmallScene_IK(Smsc->IK,NameIK, &Smsc->IODico); IKPatchProcess(Smsc); RETURN_BOOL(res == NULL); }) DEFINE_SCRIPT(IK_PatchNumberSet, CATEGORY(IK) PARAM_SCENE_IK(SceneName) PARAM_INT(Number), "Set Patch number", { if (IKPtr->ulInitNumberOfPatchs < Number) { if (!IKPtr->pInitObjPatchs) IKPtr->pInitObjPatchs = (IK_ObjectPatch *)CC_malloc(SceneName->ulNumberOfObjects*sizeof(IK_ObjectPatch)); memset(IKPtr->pInitObjPatchs + IKPtr->ulInitNumberOfPatchs, 0, (Number - IKPtr->ulInitNumberOfPatchs)*sizeof(IK_ObjectPatch)); } IKPtr->ulInitNumberOfPatchs = Number; IKPatchProcess(SceneName); SmallSceneIKInstancesReset(SceneName); }) DEFINE_SCRIPT(IK_PatchNumberGet, CATEGORY(IK) PARAM_SCENE_IK(SceneName), "Get Patch number", { RETURN_INT(IKPtr->ulInitNumberOfPatchs); }) DEFINE_SCRIPT(IK_PatchObjectSet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(Smsc, patch) PARAM_STRING(ObjectName), "Set patch Object", { UnicID ObjectID = -1; UnicID ObjectREF= -1; char *lastSlash = ObjectName; while (strchr(lastSlash, '\\')) lastSlash = strchr(lastSlash, '\\') + 1; while (strchr(lastSlash, '/')) lastSlash = strchr(lastSlash, '/') + 1; ObjectREF = Smsc->ObjectNameDico.IsExist(lastSlash); if (ObjectREF != -1) ObjectREF = Smsc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; //ObjectID = Smsc->IODico.IsExist(Object); if (ObjectREF != -1) { Smsc->IODico.GetUnic(&ObjectID, ObjectName); Smsc->IODico.mpst_Dico[ObjectID].AssociatedValue = ObjectREF; patch->ObjectID = ObjectID; patch->ObjectRefIndex = ObjectREF; IKPatchProcess(Smsc); SmallSceneIKInstancesReset(Smsc); } RETURN_BOOL(patch->ObjectID != -1); }) DEFINE_SCRIPT(IK_PatchObjectGet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch), "Get patch Object Name", { char ObjectName[2048]; SceneName->IODico.GetName(&patch->ObjectID, ObjectName); RETURN_STRING(ObjectName); }) DEFINE_SCRIPT(IK_PatchFlagSet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch) PARAM_INT(Flag), "Set Patch Flag", { patch->ulFlags = Flag; IKPatchProcess(SceneName); SmallSceneIKInstancesReset(SceneName); }) DEFINE_SCRIPT(IK_PatchFlagGet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch), "Get Patch Flag", { RETURN_INT(patch->ulFlags); }) DEFINE_SCRIPT(IK_PatchHeritageStartSet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch) PARAM_INT(HeritageStart), "Set Patch HeritageStart", { patch->HeritageStart = HeritageStart; IKPatchProcess(SceneName); SmallSceneIKInstancesReset(SceneName); }) DEFINE_SCRIPT(IK_PatchHeritageStartGet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch), "Get Patch HeritageStart", { RETURN_INT(patch->HeritageStart); }) DEFINE_SCRIPT(IK_PatchSpringStrengthSet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch) PARAM_FLOAT(SpringStrength), "Set Patch SpringStrength", { patch->fSpringStrength = SpringStrength; IKPatchProcess(SceneName); SmallSceneIKInstancesReset(SceneName); }) DEFINE_SCRIPT(IK_PatchSpringStrengthGet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch), "Get Patch SpringStrength", { RETURN_FLOAT(patch->fSpringStrength); }) DEFINE_SCRIPT(IK_PatchVelocityAbsorbtionSet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch) PARAM_FLOAT(VelocityAbsorbtion), "Set Patch VelocityAbsorbtion", { patch->VelocityAbsorbtion = VelocityAbsorbtion; IKPatchProcess(SceneName); SmallSceneIKInstancesReset(SceneName); }) DEFINE_SCRIPT(IK_PatchVelocityAbsorbtionGet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch), "Get Patch VelocityAbsorbtion", { RETURN_FLOAT(patch->VelocityAbsorbtion); }) DEFINE_SCRIPT(IK_PatchMaxAngleSet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch) PARAM_FLOAT(MaxAngle), "Set Patch MaxAngle in degrees", { patch->MaxAngle = MaxAngle/90.0f; IKPatchProcess(SceneName); SmallSceneIKInstancesReset(SceneName); }) DEFINE_SCRIPT(IK_PatchMaxAngleGet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch), "Get Patch MaxAngle in degrees", { RETURN_FLOAT(patch->MaxAngle*90.0f); }) DEFINE_SCRIPT(IK_PatchWeightSet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch) PARAM_VECTOR(Weight), "Set Patch Weight", { patch->vWeight = Weight; IKPatchProcess(SceneName); SmallSceneIKInstancesReset(SceneName); }) DEFINE_SCRIPT(IK_PatchWeightGet, CATEGORY(IK) PARAM_SCENE_IK_PATCH(SceneName, patch), "Get Patch Weight", { RETURN_VECTOR(&patch->vWeight); }) DEFINE_SCRIPT(IK_ColliderNumberSet, CATEGORY(IK) PARAM_SCENE_IK(SceneName) PARAM_INT(Number), "Set Collider number", { if (Number != IKPtr->ulNumberOfCollider) { if (Number == 0) { if (IKPtr->pColliders) CC_free(IKPtr->pColliders); IKPtr->pColliders = NULL; } else { if (!IKPtr->pColliders) IKPtr->pColliders = (IK_Collider *)CC_malloc(Number*sizeof(IK_Collider)); else IKPtr->pColliders = (IK_Collider *)CC_realloc(IKPtr->pColliders, Number*sizeof(IK_Collider)); } if (IKPtr->ulNumberOfCollider < Number) memset(IKPtr->pColliders + IKPtr->ulNumberOfCollider, 0, (Number - IKPtr->ulNumberOfCollider)*sizeof(IK_Collider)); IKPtr->ulNumberOfCollider = Number; SmallSceneIKInstancesReset(SceneName); } }) DEFINE_SCRIPT(IK_ColliderNumberGet, CATEGORY(IK) PARAM_SCENE_IK(SceneName), "Get Collider number", { RETURN_INT(IKPtr->ulNumberOfCollider); }) DEFINE_SCRIPT(IK_ColliderObjectSet, CATEGORY(IK) PARAM_SCENE_IK_COLLIDER(Smsc, collider) PARAM_STRING(ObjectName), "Set Collider Object", { UnicID ObjectID = -1; UnicID ObjectREF= -1; char *lastSlash = ObjectName; while (strchr(lastSlash, '\\')) lastSlash = strchr(lastSlash, '\\') + 1; while (strchr(lastSlash, '/')) lastSlash = strchr(lastSlash, '/') + 1; ObjectREF = Smsc->ObjectNameDico.IsExist(lastSlash); if (ObjectREF != -1) ObjectREF = Smsc->ObjectNameDico.mpst_Dico[ObjectREF].AssociatedValue; //ObjectID = Smsc->IODico.IsExist(Object); if (ObjectREF != -1) { Smsc->IODico.GetUnic(&ObjectID, ObjectName); Smsc->IODico.mpst_Dico[ObjectID].AssociatedValue = ObjectREF; collider->ObjectID = ObjectID; collider->ObjectRefIndex = Smsc->IODico.mpst_Dico[collider->ObjectID].AssociatedValue; SmallSceneIKInstancesReset(Smsc); } RETURN_BOOL(collider->ObjectID != -1); }) DEFINE_SCRIPT(IK_ColliderObjectGet, CATEGORY(IK) PARAM_SCENE_IK_COLLIDER(SceneName, collider), "Get Collider Object Name", { char ObjectName[2048]; SceneName->IODico.GetName(&collider->ObjectID, ObjectName); RETURN_STRING(ObjectName); }) DEFINE_SCRIPT(IK_ColliderRadiusSet, CATEGORY(IK) PARAM_SCENE_IK_COLLIDER(SceneName, collider) PARAM_VECTOR(V), "Set Collider Radius", { collider->Radius = V; SmallSceneIKInstancesReset(SceneName); }) DEFINE_SCRIPT(IK_ColliderRadiusGet, CATEGORY(IK) PARAM_SCENE_IK_COLLIDER(SceneName, collider), "Get Collider Radius", { RETURN_VECTOR(&collider->Radius); }) DEFINE_SCRIPT(IK_ColliderCenterSet, CATEGORY(IK) PARAM_SCENE_IK_COLLIDER(SceneName, collider) PARAM_VECTOR(V), "Set Collider Center", { collider->Center = V; SmallSceneIKInstancesReset(SceneName); }) DEFINE_SCRIPT(IK_ColliderCenterGet, CATEGORY(IK) PARAM_SCENE_IK_COLLIDER(SceneName, collider), "Get Collider Center", { RETURN_VECTOR(&collider->Center); })