MidaDev проекты

GameMaker Studio 2
Проекты на второй версии студии.
GameMaker 8
Проекты на старой версии студии.
Unity3D
Проекты на юнити.
Элементы GUI
Разработка элементов GUI под GameMakerStudio
Saboteur2
Разработка ремейка игры под GameMakerStudio 2
Ремейк игры Chronos
Разработка ремейка игры Chrono TapestryOfTime под Unity3D
Remaker RiverRaid
Разработка ремейка игры RiverRaid под Unity3D
GameMaker 8.0
Доработка(переработка) функциональных частей движка ремейка игры NinjaGaiden

Цветами выделены состояния, критический, предупреждение и т.д. Также прикручена аналитика температурного тренда(повышается понижается)

Данные берутся через Zabbix.

	#include <StaticConstants.au3>
	#include <WindowsConstants.au3>
	#include <InetConstants.au3>
	#include <MsgBoxConstants.au3>
	#include <WinAPIFiles.au3>
	#include <ScreenCapture.au3>
	#include <GUIConstantsEx.au3>
	#include <FontConstants.au3>
	#include <ColorConstants.au3>
	#include <Word.au3>
	#include <Array.au3>
	#include <Date.au3>
	#include "Encoding.au3"
	#include "..\log_print.au3"
	#include "..\_DockToScreenSide.au3"
	#AutoIt3Wrapper_Icon=temp2.ico
	;*********************************************************************************************************************************
	;*
	;*********************************************************************************************************************************
	;-----------------------------------------------------
	Global $table[38][4]			;массив хранит температурную карту
	Global   $labl[38][4]			;хэндлы температурных кнопок
	Global  $bold[38][4]			;хранит карту выделения жирным цветом изменённые данные
	Global $prognoz[38][4]	;таблица прогноза движения температуры
	Global $last_data[38][4][4];

	Global $gradus="°";
	Global $sy=27;					высота кнопок
	Global $sy_offset=16;			отступ таблицы от верха
	Global $sx_offset=10; 		отсутп таблицы от края  бока
	Global $step_y=0;
	Global $width_city = 200;		ширина кнопки населенногго пункта
	Global $width_temp = 70;		ширина кнопок температуры
	Global $form_height = 1043;	высота формы
	Global $form_width = $width_temp*3 + $width_city + $sx_offset*2
	Global $font_size_city = 14;
	Global $font_size_temp = 14;
	;$step_x =10;
	;-----------------------------------------------------
	;create FORM
	 Local $hGUI = GUICreate("Температурная карта объектов", $form_width,  $form_height)
	;GUISetIcon(@ScriptDir & "\Ping-Pong.ico")
	GUICtrlCreateLabel("M1",20 + $sx_offset + $width_city , 0, $width_temp, $sy-2)
	GUICtrlSetFont(-1, 10, $FW_BOLD )
	GUICtrlSetColor(-1, 0x111111);

	GUICtrlCreateLabel("M2",20 + $sx_offset + $width_city + $width_temp , 0, $width_temp, $sy-2)
	GUICtrlSetFont(-1, 10, $FW_BOLD )
	GUICtrlSetColor(-1, 0x111111);

	GUICtrlCreateLabel("SDK",15 + $sx_offset + $width_city + $width_temp*2, 0, $width_temp, $sy-2)
	GUICtrlSetFont(-1, 10, $FW_BOLD )
	GUICtrlSetColor(-1, 0x111111);

	;GUICtrlCreateLabel(" Zabbix technology for KnA",$sx_offset , $form_height-25, $form_width-$sx_offset*2, 30)
	;GUICtrlSetFont(-1, 15, $FW_BOLD )
	;GUICtrlSetBkColor(-1,  0xFF);
	;GUICtrlSetColor(-1, 0xEEEEEE);

	CreateForm();заполняем форму кнопками
    GUISetState(@SW_SHOW, $hGUI)
	;-----------------------------------------------------
	;login
	Local $hDownload = InetGet("http://10.10.10.10/?request=&name=Komsomolsk&password=password&autologin=1&enter=Sign+in", @TempDir + "\temp.html", 1, 0)
	InetClose($hDownload);
	;-----------------------------------------------------
	;заполняем фому
	BuildForm();
	;_ArrayDisplay($table);
	$exit=false;флаг выхода из программы
	;-----------------------------------------------------
	AdlibRegister("BuildForm", 1000 * 60 * 5);каждые 5 минут происходит обновление температурных данных
	;-----------------------------------------------------
	;бесконечный цикл , ожидание команды выхода из приложения и обработка гуий
    While $exit=false;
        $idMsg = GUIGetMsg()
		if $idMsg =  $GUI_EVENT_CLOSE 			Then $exit=true;
		if $idMsg =  $GUI_EVENT_CLOSE 			Then ExitLoop;
		;if $idMsg =  $GUI_EVENT_MOUSEMOVE	Then	_DockToScreenSide($hGUI);
    WEnd
	Exit

;*********************************************************************************************************************************
;*Создаём на форме батоны, заполняется таблица $labl[40][4]
;*********************************************************************************************************************************
Func CreateForm()
	For $i = 0 To UBound($table)-1
		;y =
		$labl[$i][0] =  GUICtrlCreateButton("ожидание даных...", $sx_offset ,                                              $sy_offset + $sy*$i,  $width_city-3, $sy+1)
		$labl[$i][1] =  GUICtrlCreateButton("?" & $gradus          , $sx_offset + $width_city,                           $sy_offset + $sy*$i,  $width_temp, $sy+1)
		$labl[$i][2] =  GUICtrlCreateButton("?" & $gradus,           $sx_offset + $width_city + $width_temp,    $sy_offset + $sy*$i,  $width_temp, $sy+1)
		$labl[$i][3] =  GUICtrlCreateButton("?" & $gradus,           $sx_offset + $width_city + $width_temp*2, $sy_offset + $sy*$i,  $width_temp, $sy+1)
	Next
EndFunc

;*********************************************************************************************************************************
;*заполняет данными батону из таблицы $table[][]
;*********************************************************************************************************************************
Func set_data($sdi, $sdoffset)
	Local $gc;

	$hnd = $labl[$sdi][$sdoffset]; получаем дескриптор батоны

	GUICtrlSetData($hnd, $table[$sdi][$sdoffset] & $gradus & " " & $prognoz[$sdi][$sdoffset]);

	$k=($bold[$sdi][$sdoffset] == $FW_BOLD) ? 1 : 0; высчитываем коэффициент увеличения шрифта при изменении данных

	GUICtrlSetFont($hnd, $font_size_temp + $k, $bold[$sdi][$sdoffset] );

	if $sdoffset == 3 Then;для блока СДК другие цветовые пороги от температуры
		$gc = get_color_SDK($table[$sdi][$sdoffset]);
	EndIf

	if $sdoffset == 0 Then
		$gc = get_color($table[$sdi][1], $table[$sdi][2], $table[$sdi][3]);
	EndIf

	if $sdoffset == 1 Or  $sdoffset == 2 Then
		$gc = get_color($table[$sdi][$sdoffset], $table[$sdi][$sdoffset], $table[$sdi][$sdoffset]);
	EndIf

	GUICtrlSetBkColor($hnd,  $gc);
	GUICtrlSetColor($hnd, ($gc == $COLOR_RED) ? 0xFFFFFF : 0x0); если фон батоны будет красный то текст надо рисовать белым
EndFunc

;*********************************************************************************************************************************
;*Считывание и заполение температурной карты
;*********************************************************************************************************************************
Func BuildForm()

	log_print("BuildForm start");
	GetParse();качаем, парсим данные и заполняе table[40][3] температурами, tab[40][3] данные изменений жирным цветом
	;---------------------------------------------------------
	For $i = 0 To UBound($table)-1
		;CITY--------------
		$hnd = $labl[$i][0];
		$gc = get_color($table[$i][1],$table[$i][2],$table[$i][3])
		GUICtrlSetData($hnd, $table[$i][0]);
		GUICtrlSetFont($hnd, $font_size_city, $FW_BOLD );
		GUICtrlSetBkColor($hnd,  $gc);
		GUICtrlSetColor($hnd, ($gc == $COLOR_RED) ? 0xFFFFFF : 0x0); если фон батоны будет красный то текст надо рисовать белым

		;set_data($i,0);
		;GUICtrlSetFont($labl[$i][0], 12, $FW_BOLD );

		;MUX1-------------
		set_data($i,1);
		;MUX2-------------
		set_data($i,2);
		;SDK---------------
		set_data($i,3);
		;--------------------
	Next
	log_print("BuildForm end");
EndFunc

;*********************************************************************************************************************************
;*	Температурные цвето пороги передатчиков
;*********************************************************************************************************************************
Func get_color($c1,$c2,$c3)

	if $c1 >= 55 then return $COLOR_RED;
	if $c2 >= 55 then return $COLOR_RED;

	if $c1 >= 50 then return $COLOR_YELLOW;
	if $c2 >= 50 then return $COLOR_YELLOW;

	if $c1 >= 25 then return $COLOR_SKYBLUE;
	if $c2 >= 25 then return $COLOR_SKYBLUE;

	if $c1 > 20 then return 0xEEEEEE;
	if $c2 > 20 then return 0xEEEEEE;

	return 0xFFFFFF;
EndFunc
;*********************************************************************************************************************************
;*Температурные цвето пороги помещения
;*********************************************************************************************************************************
Func get_color_SDK($c3)
	if $c3 >= 45 then return $COLOR_RED;
	if $c3 >= 40 then return $COLOR_YELLOW;
	if $c3 >= 20 then return $COLOR_SKYBLUE;
	if $c3 >= 10 then return 0xEEEEEE;
	return 0xFFFFFF;
EndFunc
;*********************************************************************************************************************************
;*
;*********************************************************************************************************************************

;*********************************************************************************************************************************
;*Качаем страницу и парсим ее
;*********************************************************************************************************************************
Func GetParse_old()

EndFunc

Func GetParse()
	log_print("GetParse start");

	;считываем страницу комплексного экрана
	Local $dData = BinaryToString(InetRead("http://10.100.0.9/screens.php?ddreset=1&elementid=67",  $INET_FORCERELOAD ))
	;ConsoleWrite($dData);
	;--------------------------------------------------------------------------------------------
	Local $str_in = 1; StringInStr($dData, '<td class="pre">', 0, 1, 1);
	Local $str_continue = 1;
	;ConsoleWrite("$str_start = " & $str_start & @CRLF);
	;$tag_find         = '<td class="pre">'
	Local $tag_find_in     = '<tr class=""><td class="cntr_mdl screenitem" colspan="1" rowspan="1">'
	Local $tag_find_out   = '</table></div></td></tr>'

	Local $tag_find_len = StringLen($tag_find_in);
	;--------------------------------------------------------------------------------------------
	Local $i = 0;
	While $str_in >= 1

		;в $str получим блок из трёх параметров
		$str_in = StringInStr($dData, $tag_find_in, 0, 1, $str_continue);
		if $str_in = 0 then ExitLoop;
		$str_in+=$tag_find_len;
		;ConsoleWrite("$str_in = " & $str_in & @CRLF);
		$str_out = StringInStr($dData, $tag_find_out, 0, 1, $str_in);
		;ConsoleWrite("$str_out = " & $str_out & @CRLF);
		$str = StringMid($dData, $str_in, $str_out-$str_in);
;ConsoleWrite("$str = " & $str & @CRLF);
		;-------------------------------
		;в $str получили цельный блок из трёх параметров

		;делим блок на четыре части в каждом свои данные будут
		$str_temp = StringSplit($str, '<tr class="header">', 1);

;ConsoleWrite("$str_temp[0]  = " & $str_temp[0] & @CRLF);

;		for $t = 2 to 4;$str_temp[0]
;			ConsoleWrite(" = " & $str_temp[$t] & @CRLF);
;		next

		$str1 = $str_temp[2]
		$str2 = $str_temp[3]
		$str3 = $str_temp[4]
		;-------------------------------
		;_Get_tag($str);
		;$s1=0;
		;$s2=0;
		;$s3=0;
		;Local $s1_in=0; адрес начала вхождения строки вподстроку
		;Local $s2_in=0;
		;Local $s3_in=0;
		;Local $s1_out=1000;
		;Local $s2_out=1000;
		;Local $s3_out=1000;

		#cs
		;MUX1--------------------------------------------------------------------------------
		$s1_in    = StringInStr($str1, '<td class="pre">', 0, 1, 1);
		;ConsoleWrite("$s1_in = " & $s1_in & @CRLF);
		if $s1_in>=1 then
			$s1_in += 16;
			$s1_out  = StringInStr($str1, '</td>', 0, 1, $s1_in);
			$s1 = Number(StringMid($str1, $s1_in , $s1_out - $s1_in));
		Else
			$s1_in  = StringInStr($str1, '<td class="message">', 0, 1, $s1_out);
			$s1_out  = StringInStr($str1, '</td>', 0, 1, $s1_in);
		EndIf

		;MUX2--------------------------------------------------------------------------------
		$s2_in  = StringInStr($str2, '<td class="pre">', 0, 1, 1);
		if $s2_in>=1 then
			$s2_in += 16;
			$s2_out  = StringInStr($str2, '</td>', 0, 1, $s2_in);
			$s2 = Number(StringMid($str2, $s2_in, $s2_out - $s2_in));
		Else
			$s2_in  = StringInStr($str2, '<td class="message">', 0, 1, $s1_out);
			$s2_out  = StringInStr($str2, '</td>', 0, 1, $s2_in);
		EndIf

		;SDK-------------------------------------------------------------------------------
		$s3_in  = StringInStr($str3, '<td class="pre">', 0, 1, 1) ;
		if $s3_in>=1 then
			$s3_in += 16;
			$s3_out  = StringInStr($str3, '</td>', 0, 1, $s3_in);
			$s3 = Number(StringMid($str3, $s3_in, $s3_out - $s3_in));
		EndIf
		;-------------------------------
		#ce
		$s1 = _get_rasparse($str1);
		$s2 = _get_rasparse($str2);
		$s3 = _get_rasparse($str3);

		_get_prognoz($i,1, $s1);
		_get_prognoz($i,2, $s2);
		_get_prognoz($i,3, $s3);
		;Заполняем таблицу полученными данными
		$table[$i][0] = _Get_city($str);
		$table[$i][1] = $s1;
		$table[$i][2] = $s2;
		$table[$i][3] = $s3;

		logprint($table[$i][0] & " = " & $table[$i][1] & " , " & $table[$i][2] & " , " & $table[$i][3]);
		;-------------------------------
		$i += 1;
		;-------------------------------
		$str_continue = $str_out ;+ 20;
	WEnd
	;--------------------------------------------------------------------------------------------
	log_print("GetParse end");
	return
EndFunc
;*********************************************************************************************************************************
;*Выпарсивает из кусочка текста нужный параметр выходной мощности
;*********************************************************************************************************************************
Func _get_rasparse($stroka)
	Local $s1_in=0;
	Local $s1_out=0;
	Local $s1 = "0";
	;MUX1--------------------------------------------------------------------------------
	$s1_in    = StringInStr($stroka, '<td class="pre">', 0, 1, 1);
	;ConsoleWrite("$s1_in = " & $s1_in & @CRLF);
	if $s1_in>=1 then
		$s1_in += 16;
		$s1_out  = StringInStr($stroka, '</td>', 0, 1, $s1_in);
		$s1 = Number(StringMid($stroka, $s1_in , $s1_out - $s1_in));
	;Else
	;	$s1_in  = StringInStr($stroka, '<td class="message">', 0, 1, $s1_out);
	;	$s1_out  = StringInStr($stroka, '</td>', 0, 1, $s1_in);
	EndIf

	return $s1;
EndFunc
;*********************************************************************************************************************************
;Делает прогноз температурного движения и ляпает стрелку в куды
;*********************************************************************************************************************************
Func _get_prognoz($it, $t, $s)

	$prognoz[$it][$t] = ""
	$bold[$it][$t] = $FW_NORMAL;

	;если предыдущее значение меньше нового то идёт рост
	if $table[$it][$t] < $s then
			$bold[$it][$t] = $FW_BOLD;
			$prognoz[$it][$t] = "↑"
	endif

	;если предыдущее значение больше нового то идёт падение
	if $table[$it][$t] > $s then
			$bold[$it][$t] = $FW_BOLD;
			$prognoz[$it][$t] = "↓"
	endif
EndFunc
;*********************************************************************************************************************************
;* Извлекаем название населённого пункта, костыльно, но так проще и быстрее
;*********************************************************************************************************************************
Func _Get_city($s)
		;$s = _Encoding_StringToUTF8($s);
		;$s = Unicode2Asc($s);
		;ConsoleWrite("$s = " & $s & @CRLF);

		if StringInStr($s,_Encoding_StringToUTF8("Амгунь"))>=2  then return "Амгунь"
		if StringInStr($s,_Encoding_StringToUTF8("Амурск"))>=2  then return "Амурск"
		if StringInStr($s,_Encoding_StringToUTF8("Берёзовый"))>=2  then return "Берёзовый"
		if StringInStr($s,_Encoding_StringToUTF8("Березовый"))>=2  then return "Берёзовый"
		if StringInStr($s,_Encoding_StringToUTF8("Боктор"))>=2  then return "Боктор"
		if StringInStr($s,_Encoding_StringToUTF8("Болен"))>=2  then return "Болен"
		if StringInStr($s,_Encoding_StringToUTF8("Бриакан"))>=2  then return "Бриакан"
		if StringInStr($s,_Encoding_StringToUTF8("Ванино"))>=2  then return "Ванино"
		if StringInStr($s,_Encoding_StringToUTF8("Верхнетамбовское"))>=2  then return "Верхнетамбовское"
		if StringInStr($s,_Encoding_StringToUTF8("Высокогорный"))>=2  then return "Высокогорный"
		if StringInStr($s,_Encoding_StringToUTF8("Галичный"))>=2  then return "Галичный"
		if StringInStr($s,_Encoding_StringToUTF8("Главный"))>=2  then return "Главный Стан"
		if StringInStr($s,_Encoding_StringToUTF8("Горин"))>=2  then return "Горин"
		if StringInStr($s,_Encoding_StringToUTF8("Горный"))>=2  then return "Горный"
		if StringInStr($s,_Encoding_StringToUTF8("Гурское"))>=2  then return "Гурское"
		if StringInStr($s,_Encoding_StringToUTF8("Даппы"))>=2  then return "Даппы"
		if StringInStr($s,_Encoding_StringToUTF8("Джамку"))>=2  then return "Джамку"
		if StringInStr($s,_Encoding_StringToUTF8("Известковый"))>=2  then return "Известковый"
		if StringInStr($s,_Encoding_StringToUTF8("Осипенко"))>=2  then return "П.Осипенко"
		if StringInStr($s,_Encoding_StringToUTF8("Кенай"))>=2  then return "Кенай"
		if StringInStr($s,_Encoding_StringToUTF8("Комсомольск"))>=2  then return "Комсомольск"
		if StringInStr($s,_Encoding_StringToUTF8("Кондон"))>=2  then return "Кондон"
		if StringInStr($s,_Encoding_StringToUTF8("Малмыж"))>=2  then return "Малмыж"
		if StringInStr($s,_Encoding_StringToUTF8("Нижнетамб"))>=2  then return "Нижнетамбовское"
		if StringInStr($s,_Encoding_StringToUTF8("Халбы"))>=2  then return "Нижние Халбы"
		if StringInStr($s,_Encoding_StringToUTF8("Селихино"))>=2  then return "Селихино"
		if StringInStr($s,_Encoding_StringToUTF8("Снежный"))>=2  then return "Снежный"
		if StringInStr($s,_Encoding_StringToUTF8("Советская"))>=2  then return "Советская Гавань"
		if StringInStr($s,_Encoding_StringToUTF8("Солнечный"))>=2  then return "Солнечный"
		if StringInStr($s,_Encoding_StringToUTF8("Тумнин"))>=2  then return "Тумнин"
		if StringInStr($s,_Encoding_StringToUTF8("Удское"))>=2  then return "Удское"
		if StringInStr($s,_Encoding_StringToUTF8("Уктур"))>=2  then return "Уктур"
		if StringInStr($s,_Encoding_StringToUTF8("Чегдомын"))>=2  then return "Чегдомын"
		if StringInStr($s,_Encoding_StringToUTF8("Черный"))>=2  then return "Черный Мыс"
		if StringInStr($s,_Encoding_StringToUTF8("Чумикан"))>=2  then return "Чумикан"
		if StringInStr($s,_Encoding_StringToUTF8("Эворон"))>=2  then return "Эворон"
		if StringInStr($s,_Encoding_StringToUTF8("Эльбан"))>=2  then return "Эльбан"
		if StringInStr($s,_Encoding_StringToUTF8("Этыркэн"))>=2  then return "Этыркэн"
		if StringInStr($s,_Encoding_StringToUTF8("Ягодный"))>=2  then return "Ягодный"

		return "неизвестно"
EndFunc

 

© 2021 MidaDev.