mirror of
https://github.com/defold/extension-camera
synced 2025-06-27 18:37:43 +02:00
86 lines
2.4 KiB
Plaintext
86 lines
2.4 KiB
Plaintext
|
|
local function stop_capture(self)
|
|
if self.cameraframe == nil then
|
|
return
|
|
end
|
|
|
|
self.cameraframe = nil
|
|
camera.stop_capture()
|
|
|
|
label.set_text("logo#status", "Capture Status: OFF")
|
|
end
|
|
|
|
|
|
local function start_capture(self)
|
|
if not camera then
|
|
label.set_text("logo#status", "Capture Status: UNAVAILABLE")
|
|
return
|
|
end
|
|
|
|
local quality = camera.CAPTURE_QUALITY_HIGH
|
|
|
|
local type = camera.CAMERA_TYPE_FRONT
|
|
if sys.get_sys_info().system_name == 'iPhone OS' then
|
|
type = camera.CAMERA_TYPE_BACK
|
|
quality = camera.CAPTURE_QUALITY_MEDIUM
|
|
end
|
|
|
|
camera.start_capture(type, quality, function(self, status)
|
|
if status == camera.CAMERA_STARTED then
|
|
self.cameraframe = camera.get_frame()
|
|
self.camerainfo = camera.get_info()
|
|
self.cameratextureheader = {
|
|
width=self.camerainfo.width,
|
|
height=self.camerainfo.height,
|
|
type=resource.TEXTURE_TYPE_2D,
|
|
format=resource.TEXTURE_FORMAT_RGB,
|
|
num_mip_maps=1
|
|
}
|
|
label.set_text("logo#status", "Capture Status: ON")
|
|
elseif status == camera.CAMERA_STOPPED then
|
|
label.set_text("logo#status", "Capture Status: OFF")
|
|
elseif status == camera.CAMERA_ERROR then
|
|
label.set_text("logo#status", "Capture Status: ERROR")
|
|
end
|
|
end)
|
|
end
|
|
|
|
function init(self)
|
|
msg.post(".", "acquire_input_focus")
|
|
|
|
local logosize = 128
|
|
local screen_width = sys.get_config("display.width", 600)
|
|
local screen_height = sys.get_config("display.height", 800)
|
|
local scale_width = screen_width / logosize
|
|
local scale_height = screen_height / logosize
|
|
|
|
go.set("#sprite", "scale", vmath.vector3(scale_width, scale_height, 1) )
|
|
|
|
start_capture(self)
|
|
end
|
|
|
|
function final(self)
|
|
if self.cameraframe then
|
|
camera.stop_capture()
|
|
end
|
|
end
|
|
|
|
|
|
function update(self, dt)
|
|
if self.cameraframe then
|
|
local pathmodelcamera = go.get("#sprite", "texture0")
|
|
resource.set_texture(pathmodelcamera, self.cameratextureheader, self.cameraframe)
|
|
end
|
|
end
|
|
|
|
|
|
function on_input(self, action_id, action)
|
|
if (action_id == hash("space") or action_id == hash("touch")) and action.pressed then
|
|
if self.cameraframe then
|
|
stop_capture(self)
|
|
else
|
|
start_capture(self)
|
|
end
|
|
end
|
|
end
|