Сделал проекты MSVS 2010 для демок FreeType 2.5.5.
Лежат они в builds\windows\vc2010 и прицеплены к солюшену. Я сделал настройки только для Debug.
Брать тут
Сделал проекты MSVS 2010 для демок FreeType 2.5.5.
Лежат они в builds\windows\vc2010 и прицеплены к солюшену. Я сделал настройки только для Debug.
Брать тут
Сделал такую вот консоль:
Это поле ввода с выпадающим списком плюс история команд, которая сохраняется в файл. Весь код занимает 248 строк,
из которых часть — это объявление функций модуля, а другая часть — функции, состоящие из одной строки.
Так что содержательных строк там сотни полторы:
В середине функции вы видите такой код:
... char s[129]; ED_snprintf(s,128,"X%+09d Z%+09d",ix,iz); return s; ...
Внутри вас все моментально вскипает, ну как же, это же дырища из дырищ, возвращать указатель на кусок освобожденной памяти! Тут вы для верности заглядываете в заголовок функции, а там:
std::string vCamera::getCoordinatesString(float x,float z)
И ваш жар сразу пропадает, все норм, никто не умер раньше времени.
Но пейсателю подобного все равно хочется дать в лоб.
changeStyle(bs_elevated, !prms.elevated); changeStyle(bs_switch, !prms.isSwitch); changeStyle(bs_upclick, !prms.upclick); changeStyle(bs_3dtext, !prms.is3dText); changeStyle(bs_3dtextdown, !prms.is3dTextDown); changeStyle(bs_repeataction, !prms.repeatAction); changeStyle(bs_pressing, !prms.pressing); changeStyle(bs_activating, !prms.activating); changeStyle(bs_dottail, !prms.dottail);
Дано:
//Рамка bool getBorderThickness() const {return isThinBorder;}
Вы, наверное, думаете, что этот метод будет использоваться по лоховски, типа:
if(getBorderThickness()) { ... } else { ... }
Ха! Я вам смеюсь в лицо! Использовать его можно миллионом различных способов, исключая очевидный:
visibleAreaBegin.x = getLTPoint().x + xLeftShift + !getBorderThickness(); visibleAreaWidth = getRBPoint().x - getLTPoint().x - xRightShift - xLeftShift - 2*!getBorderThickness();
Или так:
size += !getBorderThickness();// + 2;
Хреново, когда тригонометрию не знаешь. Наковырял в старом коде. Есть массив из 8 иконок, каждая обозначает поворот юнита на 45 градусов.
Нужно по вектору направления юнита найти индекс иконки. Я бы сделал что-то типа такого:
double length = sqrt(z*z + x*x); if (length < 0.0001) { return 0; } double angle = acos(z / length) return (int)(angle / (PI / 4));
Но чувак про функцию acos()
явно не знал…
#define COS_22 0.923 #define COS_67 0.382 #define COS_112 -0.382 #define COS_157 -0.923 #define MIN_DENOMINATOR 0.0001 int findOrientation(const cVector& xVector) { int sector; float denominator = sqrt(xVector.z*xVector.z + xVector.x*xVector.x); if (denominator < MIN_DENOMINATOR) { return 0; } float cos = xVector.z / denominator; if (cos > COS_22) { sector = 2; } else if (cos > COS_67) { if (xVector.x > 0) { sector = 1; } else { sector = 3; } } else if (cos > COS_112) { if (xVector.x > 0) { sector = 0; } else { sector = 4; } } else if (cos > COS_157) { if (xVector.x > 0) { sector = 7; } else { sector = 5; } } else { sector = 6; } return sector; }
Очень трогательно название переменной denominator
— чувак не догадывался, что это длина вектора.
В файле SerializationFlag.h хранится класс… тадам!
#ifndef __NOSERIALIZATIONFLAG_H_ #define __NOSERIALIZATIONFLAG_H_ #include "ExpImpSpec.h" namespace ResourceKeeperFlags { class USERINTERFACE_EXPORT_IMPORT_SPECIFICATOR NoSerializationFlag { protected: bool no_Serialization; public: NoSerializationFlag(); virtual ~NoSerializationFlag(){}; const bool noSerialization() const{return no_Serialization;} }; USERINTERFACE_EXPORT_IMPORT_SPECIFICATOR const bool noSerialization(); }; #endif // __NOSERIALIZATIONFLAG_H__
И даже любопытно, на что способен класс содержащий одну(!) булеву переменную:
#include "StdAfx.h" #include "SerializationFlag.h" #include <stdio.h> ResourceKeeperFlags::NoSerializationFlag::NoSerializationFlag() { FILE *file; file = fopen("noserialization.txt", "r"); if (file == 0) { no_Serialization = false; } else { no_Serialization = true; fclose(file); } } const bool ResourceKeeperFlags::noSerialization() { static ResourceKeeperFlags::NoSerializationFlag _noSerialization; return _noSerialization.noSerialization(); }
Вот это моща! Эта переменная устанавливается по наличию файла noserialization.txt! Йаду! Йаду мне!!!
Сегодня на сцене зажигает переменная zDelta
— наслаждайтесь!
void DlgMap::onMouseWheel(short keys, short zDelta, int x, int y) { zDelta = 0-zDelta; Cursor::setCursor((zDelta > 0) ? cursor_zoom_out : cursor_zoom_in); theMixDrawMap->zoomIn(10 * -zDelta / 120, x, y); windowSizeChangedMessage(); }
Есть база данных по маякам вида:
{ ... [Krasnodar_P] = { -- URKK Krasnodar - Pashkovsky (Russia) runway = { ["05-23"] = { side = { ["05"] = { { type = BEACON_TYPE_ILS_FAR_HOMER, callsign = "КР", frequency = 493000.0, }, { type = BEACON_TYPE_ILS_NEAR_HOMER, callsign = "К", frequency = 240000.0, }, }, ["23"] = { { type = BEACON_TYPE_ILS_FAR_HOMER, callsign = "ЛД", frequency = 493000.0, }, { type = BEACON_TYPE_ILS_NEAR_HOMER, callsign = "Л", frequency = 240000.0, } } } } }, airdrome = { { type = BEACON_TYPE_VOR, callsign = 'KRD', frequency = 115800000, position = coordinates("45'01'15N 039'09'50E"), } } }, ... }
Нужно из нее, собственно, извлечь информацию о маяках. Как это было сделано: (more…)
Ковыряя чужой код натолкнулся на такое(модуль me_warehouse.lua):
------------------------------------------------------------------------------- -- function selectSupplier(a_obj) local suppliers = Mission.mission.AirportsEquipment.airports[vdata.curAirdromId].suppliers local function verifySupplier(a_Id, a_type) local result = false for supplierName, supplier in pairs(suppliers) do if (supplier.Id == a_Id) and (supplier.type == a_type) then result = true end end return result end if (a_obj.airdromeId) then if (verifySupplier(a_obj.airdromeId, 'airports') == false) and (vdata.curAirdromId ~= a_obj.airdromeId) then local tmpSupplier = {} tmpSupplier.Id = a_obj.airdromeId tmpSupplier.type = 'airports' table.insert(suppliers, tmpSupplier) Mission.addArrowSupplier({type='airports', Id= vdata.curAirdromId}, {type='airports', Id= a_obj.airdromeId}) end else if (verifySupplier(a_obj.unitId, 'warehouses') == false) then local tmpSupplier = {} tmpSupplier.Id = a_obj.unitId tmpSupplier.type = 'warehouses' table.insert(suppliers, tmpSupplier) Mission.addArrowSupplier({type='airports', Id= vdata.curAirdromId}, {type='warehouses', Id= a_obj.unitId}) end end updateSuppliers() end
Тут прекрасно все: (more…)