Commit: d1ee195260c3676eb822a0025167ea8a785ccfa5
Author: Thomas Szepe
Date:   Sun Oct 11 13:41:38 2015 +0200
Branches: master
https://developer.blender.org/rBd1ee195260c3676eb822a0025167ea8a785ccfa5

BGE: Adding a screenshot function to game actuator

Extending the existing game actuator with a screenshot function, to give also 
non programmers the ability to take screenshots in the BGE.

Reviewers: lordloki, campbellbarton, moguri

Reviewed By: lordloki, moguri

Subscribers: lordloki, Genome36

Projects: #game_engine

Differential Revision: https://developer.blender.org/D651

===================================================================

M       source/blender/editors/space_logic/logic_window.c
M       source/blender/makesdna/DNA_actuator_types.h
M       source/blender/makesrna/intern/rna_actuator.c
M       source/gameengine/Converter/KX_ConvertActuators.cpp
M       source/gameengine/Ketsji/KX_GameActuator.cpp
M       source/gameengine/Ketsji/KX_GameActuator.h
M       source/gameengine/Ketsji/KX_PythonInit.cpp

===================================================================

diff --git a/source/blender/editors/space_logic/logic_window.c 
b/source/blender/editors/space_logic/logic_window.c
index ccf8460..a853649 100644
--- a/source/blender/editors/space_logic/logic_window.c
+++ b/source/blender/editors/space_logic/logic_window.c
@@ -1696,7 +1696,7 @@ static void draw_actuator_filter_2d(uiLayout *layout, 
PointerRNA *ptr)
 static void draw_actuator_game(uiLayout *layout, PointerRNA *ptr)
 {
        uiItemR(layout, ptr, "mode", 0, NULL, ICON_NONE);
-       if (RNA_enum_get(ptr, "mode") == ACT_GAME_LOAD)
+       if (ELEM(RNA_enum_get(ptr, "mode"), ACT_GAME_LOAD, ACT_GAME_SCREENSHOT))
                uiItemR(layout, ptr, "filename", 0, NULL, ICON_NONE);
 }
 
diff --git a/source/blender/makesdna/DNA_actuator_types.h 
b/source/blender/makesdna/DNA_actuator_types.h
index 9af0c1d..59a0589 100644
--- a/source/blender/makesdna/DNA_actuator_types.h
+++ b/source/blender/makesdna/DNA_actuator_types.h
@@ -512,6 +512,7 @@ typedef struct bActuator {
 #define ACT_GAME_QUIT          3
 #define ACT_GAME_SAVECFG       4
 #define ACT_GAME_LOADCFG       5
+#define ACT_GAME_SCREENSHOT    6
 
 /* visibilityact->flag */
 /* Set means the object will become invisible */
diff --git a/source/blender/makesrna/intern/rna_actuator.c 
b/source/blender/makesrna/intern/rna_actuator.c
index 5dba21d..a207596 100644
--- a/source/blender/makesrna/intern/rna_actuator.c
+++ b/source/blender/makesrna/intern/rna_actuator.c
@@ -1706,6 +1706,7 @@ static void rna_def_game_actuator(BlenderRNA *brna)
                {ACT_GAME_QUIT, "QUIT", 0, "Quit Game", ""},
                {ACT_GAME_SAVECFG, "SAVECFG", 0, "Save bge.logic.globalDict", 
""},
                {ACT_GAME_LOADCFG, "LOADCFG", 0, "Load bge.logic.globalDict", 
""},
+               {ACT_GAME_SCREENSHOT, "SCREENSHOT", 0, "Screenshot", ""},
                {0, NULL, 0, NULL, NULL}
        };
        
@@ -1722,8 +1723,8 @@ static void rna_def_game_actuator(BlenderRNA *brna)
        /* ACT_GAME_LOAD */
        prop = RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
        RNA_def_property_ui_text(prop, "File",
-                                "Load this blend file, use the \"//\" prefix 
for a path relative to the current "
-                                "blend file");
+                                "The file to use depending on the mode (e.g., 
the blend file to load or a destination "
+                                "for saving a screenshot). Use the \"//\" 
prefix for a relative path.");
        RNA_def_property_update(prop, NC_LOGIC, NULL);
        /*XXX to do: an operator that calls file_browse with relative_path on 
and blender filtering active */
 }
diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp 
b/source/gameengine/Converter/KX_ConvertActuators.cpp
index 3b36e09..c6c36c2 100644
--- a/source/gameengine/Converter/KX_ConvertActuators.cpp
+++ b/source/gameengine/Converter/KX_ConvertActuators.cpp
@@ -806,6 +806,12 @@ void BL_ConvertActuators(const char* maggiename,
                                                mode = 
KX_GameActuator::KX_GAME_LOADCFG;
                                                break;
                                        }
+                                       case ACT_GAME_SCREENSHOT:
+                                       {
+                                               mode = 
KX_GameActuator::KX_GAME_SCREENSHOT;
+                                               filename = gameact->filename;
+                                               break;
+                                       }
                                default:
                                        ; /* flag error */
                                }
diff --git a/source/gameengine/Ketsji/KX_GameActuator.cpp 
b/source/gameengine/Ketsji/KX_GameActuator.cpp
index a23af68..f1bd253 100644
--- a/source/gameengine/Ketsji/KX_GameActuator.cpp
+++ b/source/gameengine/Ketsji/KX_GameActuator.cpp
@@ -41,6 +41,7 @@
 #include "KX_Scene.h"
 #include "KX_KetsjiEngine.h"
 #include "KX_PythonInit.h" /* for config load/saving */
+#include "RAS_ICanvas.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -204,6 +205,17 @@ bool KX_GameActuator::Update()
                        break;
 #endif // WITH_PYTHON
                }
+               case KX_GAME_SCREENSHOT:
+               {
+                       RAS_ICanvas *canvas = m_ketsjiengine->GetCanvas();
+                       if (canvas) {
+                               canvas->MakeScreenShot(m_filename);
+                       }
+                       else {
+                               printf("KX_GAME_SCREENSHOT error: Rasterizer 
not available");
+                       }
+                       break;
+               }
        default:
                ; /* do nothing? this is an internal error !!! */
        }
diff --git a/source/gameengine/Ketsji/KX_GameActuator.h 
b/source/gameengine/Ketsji/KX_GameActuator.h
index 0c1c4f0..5747283 100644
--- a/source/gameengine/Ketsji/KX_GameActuator.h
+++ b/source/gameengine/Ketsji/KX_GameActuator.h
@@ -59,6 +59,7 @@ protected:
                KX_GAME_QUIT,
                KX_GAME_SAVECFG,
                KX_GAME_LOADCFG,
+               KX_GAME_SCREENSHOT,
                KX_GAME_MAX
 
        };
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp 
b/source/gameengine/Ketsji/KX_PythonInit.cpp
index 2fef74c..48d8be5 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -1804,6 +1804,7 @@ PyMODINIT_FUNC initGameLogicPythonBinding()
        KX_MACRO_addTypesToDict(d, KX_GAME_QUIT, KX_GameActuator::KX_GAME_QUIT);
        KX_MACRO_addTypesToDict(d, KX_GAME_SAVECFG, 
KX_GameActuator::KX_GAME_SAVECFG);
        KX_MACRO_addTypesToDict(d, KX_GAME_LOADCFG, 
KX_GameActuator::KX_GAME_LOADCFG);
+       KX_MACRO_addTypesToDict(d, KX_GAME_SCREENSHOT, 
KX_GameActuator::KX_GAME_SCREENSHOT);
 
        /* Scene Actuator Modes */
        KX_MACRO_addTypesToDict(d, KX_SCENE_RESTART, 
KX_SceneActuator::KX_SCENE_RESTART);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to