codesuxxx

9 февраля, 2015

Freetype 2.5.5 и демки

Filed under: Uncategorized — Метки: , , , , — codesuxxx @ 10:21 дп

Сделал проекты MSVS 2010 для демок FreeType 2.5.5.

Лежат они в builds\windows\vc2010 и прицеплены к солюшену. Я сделал настройки только для Debug.

Брать тут

https://yadi.sk/d/ubgPMepheZ9Ed

25 ноября, 2014

Консоль в 200+ строк

Filed under: Uncategorized — Метки: , , — codesuxxx @ 11:12 дп

Сделал такую вот консоль:

1

Это поле ввода с выпадающим списком плюс история команд, которая сохраняется в файл. Весь код занимает 248 строк,
из которых часть — это объявление функций модуля, а другая часть — функции, состоящие из одной строки.
Так что содержательных строк там сотни полторы:

(more…)

15 октября, 2014

Ложная тревога

Filed under: Uncategorized — Метки: , — codesuxxx @ 12:43 пп

В середине функции вы видите такой код:

...
char s[129];
ED_snprintf(s,128,"X%+09d Z%+09d",ix,iz);           
return s;
...

Внутри вас все моментально вскипает, ну как же, это же дырища из дырищ, возвращать указатель на кусок освобожденной памяти! Тут вы для верности заглядываете в заголовок функции, а там:

std::string vCamera::getCoordinatesString(float x,float z)

И ваш жар сразу пропадает, все норм, никто не умер раньше времени.
Но пейсателю подобного все равно хочется дать в лоб.

29 сентября, 2014

Инверсия головного моска

Filed under: Uncategorized — Метки: , — codesuxxx @ 9:13 дп
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);

22 сентября, 2014

Истончение моска

Filed under: Uncategorized — Метки: , — codesuxxx @ 12:03 пп

Дано:

//Рамка
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; 

10 сентября, 2014

Тригонометрия

Filed under: Uncategorized — Метки: , — codesuxxx @ 9:51 дп

Хреново, когда тригонометрию не знаешь. Наковырял в старом коде. Есть массив из 8 иконок, каждая обозначает поворот юнита на 45 градусов.

icons

Нужно по вектору направления юнита найти индекс иконки. Я бы сделал что-то типа такого:

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 — чувак не догадывался, что это длина вектора.

9 сентября, 2014

Сериализуй это!

Filed under: Uncategorized — Метки: , — codesuxxx @ 6:36 дп

В файле 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! Йаду! Йаду мне!!!

25 августа, 2014

Кручу-верчу, творю что хочу!

Filed under: Uncategorized — Метки: , — codesuxxx @ 8:53 дп

Сегодня на сцене зажигает переменная 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();
}

21 июля, 2014

Filed under: Uncategorized — Метки: , , — codesuxxx @ 10:07 дп

Есть база данных по маякам вида:

{
...
[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…)

9 июня, 2014

Поставщик Её величества…

Filed under: Uncategorized — Метки: , , — codesuxxx @ 3:02 пп

Ковыряя чужой код натолкнулся на такое(модуль 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…)

Older Posts »

Блог на WordPress.com.