Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > BlitzMax > Модули для BlitzMax

Ответ
 
Опции темы
Старый 25.04.2009, 09:36   #1
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,901
Написано 3,386 полезных сообщений
(для 9,262 пользователей)
Модуль Magic Particles

Описание: http://www.astralax.ru/projects/particles
Magic Particles — это специализированный редактор спецэффектов. Пылающий текст, летящая комета, танец осенних листьев под порывами ветра, снежная вьюга и разноцветный туман, извивающиеся щупальца диковинных тварей, причудливые силуэты растений — все эти (и многие другие!) образы могут быть не только созданы в этой программе, но и вставлены в ваши фотографии и видеозаписи.
Скачать: http://www.astralax.ru/forum/viewtopic.php?f=5&t=58
__________________
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
moka (26.04.2009), Reks888 (21.05.2011)
Старый 25.04.2009, 11:47   #2
Черный крыс
 
Сообщений: n/a
Ответ: Модуль Magic Particles

Ага. Сейчас занимаемся документацией этого модуля, хотя она будет дублироваться хелпом с самой либой.

Скоро выложу обновленный модуль, с поддержкой траекторий.

ЗЫ. Огромное спасибо Dimanche13. За большой вклад в создании модуля.

PSS О найденых багах и пожеланиях отписывайтесь сюда или же diablo190[@]rambler.ru

Последний раз редактировалось Черный крыс, 25.04.2009 в 12:18.
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
moka (26.04.2009), Randomize (15.09.2009)
Старый 26.04.2009, 07:05   #3
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,404
Написано 3,425 полезных сообщений
(для 6,759 пользователей)
Ответ: Модуль Magic Particles

Только вот самого файла модуля там нету, это так и предусмотренно?
Просто думал скомпилю под Mac, и обломался. Если нужен ходячий компилятор под MacOS X (PPC/Intel), то обращайтесь!
(Offline)
 
Ответить с цитированием
Старый 19.05.2011, 10:32   #4
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Модуль Magic Particles

А на Blitz3D можно написать заголовочный файл для Magic Particles 3D??? Или если есть то киньте ссылку Если же нет, то печально
__________________
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 17:50   #5
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Модуль Magic Particles

Сток программистов знающих и ни чего ответить не могут
__________________
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 18:27   #6
Черный крыс
 
Сообщений: n/a
Ответ: Модуль Magic Particles

Можно. Тока этого делать, скорее всего делать никто не будет. Да еще и гемора много чтобы его заврапить по Б3Д.
 
Ответить с цитированием
Старый 20.05.2011, 18:49   #7
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Модуль Magic Particles

Сообщение от Diablo1909 Посмотреть сообщение
Можно. Тока этого делать, скорее всего делать никто не будет. Да еще и гемора много чтобы его заврапить по Б3Д.
И в чем заключается геморой написания заголовочного файла под B3D ?? ))
__________________
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 19:02   #8
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,901
Написано 3,386 полезных сообщений
(для 9,262 пользователей)
Ответ: Модуль Magic Particles

А ты попробуй напиши, потом расскажешь.
__________________
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 19:22   #9
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Модуль Magic Particles

Сообщение от SBJoker Посмотреть сообщение
А ты попробуй напиши, потом расскажешь.
Ну так я и спрашиваю в чем заключается и стоит ли вообще писать?
__________________
(Offline)
 
Ответить с цитированием
Старый 20.05.2011, 20:26   #10
Черный крыс
 
Сообщений: n/a
Ответ: Модуль Magic Particles

Так ответ тебе написали в 6-м посте. Номальные партиклы для Б3Д уже давно есть.

Ну а если тебе так интересно то Магик-партикл это всего лишь считалка, а все остальное будь добр пиши сам, в том числе и оббертку, на Б3Д это будет выглядеть ОЧЕНЬ невыразительно, для примера привожу код из модуля под БМакс :

 
rem
 Copyright (c) 2011 Al'bert Gaskarov
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in
 all copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
endrem
SuperStrict
Module api.effectmagic
ModuleInfo "Проект : Magic particles (c) враппер для BlitzMAX."
ModuleInfo "Версия : 1.05"
ModuleInfo "Сервер : API"
ModuleInfo "Автор : Альберт Гаскаров -> aka [G-man] aka [Diablo] -> diablo190@rambler.ru"
ModuleInfo "Спасибо : Дмитрий Волокитин aka [dimanche13] и команде Astralax."
ModuleInfo "Права : Dynamic bytes limited (c) 2010."
ModuleInfo "Права : Astralax team (c) 2010."
ModuleInfo "Права : Blitz Reseach limited (c) 2010."
ModuleInfo "История : 1.05"
ModuleInfo "История : Бага была у автора. Обновлена библиотека .dll"
ModuleInfo "История : 1.05 beta"
ModuleInfo "История : Полностью переписан алгоритм отрисовки эмиттера, для 100% совместимости теперь используются возможности только интерфейсного модуля 'Max2D'."
ModuleInfo "История : Но появилась одна бага. Почему то некорректно считывается информация о положении центра вращения текстуры."
ModuleInfo "История : Официальная справка гласит на этот счет однозначно. Попытаюсь связатся с автором для прояснения ситуации. А пока эта версия носит префикс 'beta'"
ModuleInfo "История : Удалено -> Vector2 класс за ненадобностью."
ModuleInfo "История : 1.02"
ModuleInfo "История : Теперь отрисовка эмиттера происходит с учетом мировой матрицы трансформации."
ModuleInfo "История : Переделано -> Установка цвета\прозрачности"
ModuleInfo "История : Добавлено -> Vector2 класс для трансформации."
ModuleInfo "История : 1.01"
ModuleInfo "История : Добавлено -> Энумератор TMagic, возращающий данные о всех файлах в текущей папке (TMagicData)."
ModuleInfo "История : Добавлено -> Префиксы совместного компилирования."
ModuleInfo "История : Добавлено -> Внутренняя справка."
ModuleInfo "История : 1.0"
ModuleInfo "История : Первый официальный выпуск."
Import api.effect
Import brl.ramstream
Import "magic.lib"
Include "magicdriver.bmx"
Private
Const MAGIC_SUCCESS:Int = -1
Const MAGIC_ERROR:Int = -2
Const MAGIC_UNKNOWN:Int = -3
Const MAGIC_FOLDER:Int = 1
Const MAGIC_EMITTER:Int = 2
Const MAGIC_NOLOOP:Int = 0
Const MAGIC_LOOP:Int = 1
Const MAGIC_FOREVER:Int = 2
Const MAGIC_COLOR_STANDARD:Int = 0
Const MAGIC_COLOR_TINT:Int = 1
Const MAGIC_COLOR_USER:Int = 2
Const MAGIC_EMITTER_POINT:Int = 0
Const MAGIC_EMITTER_LINE:Int = 1
Const MAGIC_EMITTER_CIRCLE:Int = 2
Const MAGIC_EMITTER_ELLIPSE:Int = 3
Const MAGIC_EMITTER_SQUARE:Int = 4
Const MAGIC_EMITTER_RECTANGLE:Int = 5
Const MAGIC_EMITTER_IMAGE:Int = 6
Const MAGIC_EMITTER_TEXT:Int = 7
Const MAGIC_DIAGRAM_LIFE:Int = 0
Const MAGIC_DIAGRAM_NUMBER:Int = 1
Const MAGIC_DIAGRAM_SIZE:Int = 2
Const MAGIC_DIAGRAM_VELOCITY:Int = 3
Const MAGIC_DIAGRAM_WEIGHT:Int = 4
Const MAGIC_DIAGRAM_SPIN:Int = 5
Const MAGIC_DIAGRAM_ANGULAR_VELOCITY:Int = 6
Const MAGIC_DIAGRAM_MOTION_RAND:Int = 7
Const MAGIC_DIAGRAM_VISIBILITY:Int = 8
Const MAGIC_DIAGRAM_DIRECTION:Int = 9
' Структура, хранящая информацию о текстуре
Type MAGIC_TEXTURE
 Field length:Int ' количество байт в файле
 Field data:Byte Ptr  ' образ файла
 Field crc:Int  ' контрольная сумма образа файла
 Field file:Byte Ptr  ' имя файла
 Field path:Byte Ptr   ' путь к файлу (возможен относительный путь)
 Field Left:Float,top:Float,Right:Float,bottom:Float; ' положение кадра текстуры на суммарной текстуре
 Field frame_width:Int;  ' длина текущего кадра на текстуре
 Field frame_height:Int;  ' высота текущего кадра на текстуре
 Field texture_width:Int;  ' длина суммарной текстуры
 Field texture_height:Int;  ' высота суммарной текстуры
 Field pivot_x:Float;   ' координаты центральной точки отностительно центра текстуры
 Field pivot_y:Float;   ' по умолчанию равен 0,0
 Field scale:Float;   ' масштаб частиц
End Type
Extern
 'Function Magic_OpenFile:Int(file_name$z, hmFile:Int Var) ' deprecated. Ненужная функция, все данные враппер грузит из ОЗУ см.след.ф-ю...
 Function Magic_OpenFileInMemory:Int(buffer:Byte Ptr, hmFile:Int Var)
 Function Magic_CloseFile:Int(hmFile:Int)
 Function Magic_CloseAllFiles()
 Function Magic_GetCurrentFolder$z(hmFile:Int) ' внутренняя файловая система файлов .ptc {
 Function Magic_SetCurrentFolder:Int(hmFile:Int, path$z)
 Function Magic_FindFirst$z(hmFile:Int, data:Byte Ptr, mode:Int)
 Function Magic_FindNext$z(hmFile:Int, data:Byte Ptr) ' }
 'Function Magic_GetFileName$z(hmFile:Int) ' deprecated. Малополезно
 
 Function Magic_LoadEmitter:Int(hmFile:Int, name$z, hmEmitter:Int Var) ' Все, что связано с эмиттером {
 Function Magic_DuplicateEmitter:Int(hmEmitterFrom:Int, hmEmitterTo:Int Var)
 Function Magic_UnloadEmitter:Int(hmEitter:Int)
 Function Magic_Update:Byte(hmEmitter:Int, time:Double)
 Function Magic_Stop:Int(hmEmitter:Int)
 Function Magic_Restart:Int(hmEmitter:Int)
 Function Magic_SetInterrupt:Int(hmEmitter:Int, interrupt:Byte)
 Function Magic_IsInterrupt:Byte(hmEmitter:Int)
 Function Magic_GetPosition:Double(hmEmitter:Int)
 Function Magic_SetPosition:Int(hmEmitter:Int, position:Double)
 Function Magic_GetDuration:Double(hmEmitter:Int)
 Function Magic_GetUpdateTime:Double(hmEmitter:Int)
 Function Magic_GetLoopMode:Int(hmEmitter:Int)
 Function Magic_SetLoopMode:Int(hmEmitter:Int, mode:Int)
 Function Magic_GetColorMode:Int(hmEmitter:Int)
 Function Magic_SetColorMode:Int(hmEmitter:Int, mode:Int)
 Function Magic_GetTint:Int(hmEmitter:Int)
 Function Magic_SetTint:Int(hmEmitter:Int, tint:Int)
 Function Magic_GetTintStrength:Float(hmEmitter:Int)
 Function Magic_SetTintStrength:Int(hmEmitter:Int, tint_strength:Float)
 Function Magic_GetEmitterPosition:Int(hmEmitter:Int, x:Float Var, y:Float Var)
 Function Magic_SetEmitterPosition:Int(hmEmitter:Int, x:Float, y:Float)
 Function Magic_GetEmitterPositionMode:Byte(hmEmitter:Int)
 Function Magic_SetEmitterPositionMode:Int(hmEmitter:Int, mode:Byte)
 Function Magic_GetEmitterDirection:Int(hmEmitter:Int, angle:Float Var)
 Function Magic_SetEmitterDirection:Int(hmEmitter:Int, angle:Float)
 Function Magic_GetEmitterDirectionMode:Byte(hmEmitter:Int)
 Function Magic_SetEmitterDirectionMode:Int(hmEmitter:Int, mode:Byte)
 Function Magic_MoveEmitterParticles:Int(hmEmitter:Int, offset_x:Float, offset_y:Float)
 Function Magic_RotateEmitterParticles:Int(hmEmitter:Int, offset:Float)
 Function Magic_GetEmitterType:Int(hmEmitter:Int, index:Int)
 Function Magic_IsIntensive:Byte()
 Function Magic_GetInterval1:Double(hmEmitter:Int)
 Function Magic_SetInterval1:Int(hmEmitter:Int, position:Double)
 Function Magic_GetInterval2:Double(hmEmitter:Int)
 Function Magic_SetInterval2:Int(hmEmitter:Int, position:Double)
 Function Magic_InInterval:Byte(hmEmitter:Int)
 Function Magic_GetParticlesTypeCount:Int(hmEmitter:Int)
 Function Magic_IsRect:Byte(hmEmitter:Int)
 Function Magic_GetRect:Int(hmEmitter:Int, left_:Int Var, top_:Int Var, right_:Int Var, bottom_:Int Var)
 Function Magic_GetScale:Float(hmEmitter:Int)
 Function Magic_SetScale:Int(hmEmitter:Int, scale:Float)
 Function Magic_IsInterpolationMode:Byte(hmEmitter:Int)
 Function Magic_SetInterpolationMode:Int(hmEmitter:Int, mode:Byte)
 Function Magic_IsRandomMode:Byte(hmEmitter:Int)
 Function Magic_SetRandomMode:Int(hmEmitter:Int, mode:Byte)
 Function Magic_LoadArrayFromFile:Int(hmEmitter:Int, file$z)
 Function Magic_SaveArrayToFile:Int(hmEmitter:Int, file$z)
 Function Magic_SetData:Int(hmEmitter:Int, data:Int)
 Function Magic_GetData:Int(hmEmitter:Int)
 Function Magic_GetEmitterName$z(hmEmitter:Int)
 Function Magic_IsFolder:Byte(hmEmitter:Int)
 Function Magic_GetEmitterCount:Int(hmEmitter:Int)
 Function Magic_GetEmitter:Byte Ptr(hmEmitter:Int, index:Int)
 Function Magic_EmitterToInterval1:Int(hmEmitter:Int, file:Byte Ptr)
 Function Magic_IsInterval1:Byte(hmEmitter:Int)
 
 Function Magic_GetParticlesTypeName$z(hmEmitter:Int, index:Int)
 Function Magic_LockParticlesType:Int(hmEmitter:Int, index:Int)
 Function Magic_UnlockParticlesType:Int()
 Function Magic_GetTextureID:Int()
 Function Magic_SetTextureID:Int(id:Int)
 Function Magic_GetTextureCount:Int()
 Function Magic_GetTexture:Byte Ptr(index:Int)
 Function Magic_GetNextParticle:Byte Ptr()
 Function Magic_GetParticleRectangle:Byte Ptr(particle:Byte Ptr, texture:Byte Ptr)
 
 Function Magic_MoveParticle(x:Float, y:Float)
 Function Magic_RotateParticle(angle:Float)
 
 Function Magic_CreateAtlases:Float(width:Int, height:Int, steps:Int, scale_step:Float)
 Function Magic_GetAtlasCount:Int()
 Function Magic_GetAtlas:Byte Ptr(index:Int)
 
 Function Magic_GetPivot:Int(x:Int Var, y:Int Var)
 Function Magic_IsFlipX:Byte()
 Function Magic_IsFlipY:Byte()
 
 Function Magic_GetDiagramFactor:Float(hmEmitter:Int, type_index:Int, diagram_index:Int)
 Function Magic_SetDiagramFactor:Int(hmEmitter:Int, type_index:Int, diagram_index:Int, factor:Float)
 Function Magic_GetDiagramAddition:Float(hmEmitter:Int, type_index:Int, diagram_index:Int)
 Function Magic_SetDiagramAddition:Int(hmEmitter:Int, type_index:Int, diagram_index:Int, addition:Float)
 Function Magic_IsDiagramEnabled:Byte(hmEmitter:Int, type_index:Int, diagram_index:Int)
End Extern
 
Include "shared.bmx"
Private
Function Find:TMagicData(magic:TMagic, name:String)
 For Local _data:TMagicData = EachIn magic
  If _data._name = name Then Return _data
 Next
End Function
Function FindFirst:TMagicData(magic:TMagic)
 Local _data:TMagicData
 For _data = EachIn magic
  If _data._type = MAGIC_FOLDER
   If _data._animate = False Then Continue
   Exit
  Else
   Exit
  End If
 Next
 If _data._name = "" Then Return Null
 Return _data
End Function
Type TMagicEffectDriver Extends TEffectDriver
 Const Debug:Byte = False
 
 Method Init:Byte()
  Return True
 End Method
 
 Method Free()
  data = Null
  rdata = Null
  enum = Null
  Magic_CloseAllFiles()
 End Method
 
 Method Name:String()
  Return "Magic"
 End Method
 
 Method Load:TMagicEffect(url:Object, flags:Int)
  Local tab:String = "~t"
  Local tab2:String = tab + tab
  Local tab3:String = tab + tab + tab
  Try
   Local magic:TMagic = LoadMagic(url)
   Local _data:TMagicData
   _data = FindFirst(magic)
   Assert _data, "ERROR : effect not load."
   Local effect:TMagicEffect = New TMagicEffect
   Select Magic_LoadEmitter(magic._handle, _data._name, effect._handle)
    Case MAGIC_SUCCESS
     effect._images = New TImage[Magic_GetParticlesTypeCount(effect._handle)]
     For Local i:Int = Magic_GetParticlesTypeCount(effect._handle) - 1 To 0 Step - 1
      Magic_LockParticlesType(effect._handle, i)
      For Local ctex:Int = 0 Until Magic_GetTextureCount()
 
       Local m_t:MAGIC_TEXTURE = New MAGIC_TEXTURE
       Local bptr:Byte Ptr = MemAlloc(SizeOf(MAGIC_TEXTURE))
 
       bptr = Magic_GetTexture(ctex)
       MemCopy(m_t, bptr, SizeOf(MAGIC_TEXTURE))
     If Debug
       ' количество байт в файле
       DebugLog tab3 + "length : " + m_t.length
       ' образ файла
       'Print "~t~tdata : " + String.FromCString(m_t.data)
       'DebugLog tab3 + "data : " + "0x" + Hex(Int(m_t.data))
       ' контрольная сумма образа файла
       DebugLog tab3 + "crc : " + m_t.crc
       ' имя файла
       Local file_name:String = String.FromCString(m_t.file)
       DebugLog tab3 + "file : " + file_name
       ' путь к файлу (возможен относительный путь)  
       DebugLog tab3 + "path : " + String.FromCString(m_t.path)
       ' положение кадра текстуры на суммарной текстуре
       DebugLog tab3 + "left : " + m_t.Left + " top : " + m_t.top
       DebugLog tab3 + "right : " + m_t.Right + " bottom : " + m_t.bottom
       ' длина текущего кадра на текстуре
       DebugLog tab3 + "frame_width : " + m_t.frame_width
       ' высота текущего кадра на текстуре
       DebugLog tab3 + "frame_height : " + m_t.frame_height
       ' длина суммарной текстуры
       DebugLog tab3 + "texture_width : " + m_t.texture_width
       ' высота суммарной текстуры
       DebugLog tab3 + "texture_height : " + m_t.texture_height
       ' координаты центральной точки отностительно центра текстуры
       ' по умолчанию равен 0,0
       DebugLog tab3 + "pivot_x : " + m_t.pivot_x
       DebugLog tab3 + "pivot_y : " + m_t.pivot_y
       ' масштаб частиц
       DebugLog tab3 + "scale : " + m_t.scale
     EndIf
       If ctex = 0 Then effect._images[i] = CreateImage(m_t.frame_width, m_t.frame_height, Magic_GetTextureCount(), flags)
       effect._images[i].SetPixmap(ctex, LoadPixmap(CreateRamStream(m_t.data, m_t.length, True, False)))
       SetImageHandle(effect._images[i], (m_t.frame_width Shr 1) + m_t.pivot_x, (m_t.frame_height Shr 1) + m_t.pivot_y)
       m_t = Null
      Next
      Magic_UnlockParticlesType()
     Next
     magic.Close()
     magic = Null
     Magic_SetLoopMode(effect._handle, MAGIC_LOOP)
     Magic_SetColorMode(effect._handle, MAGIC_COLOR_STANDARD)
     Return effect
    Case MAGIC_ERROR
     magic.Close()
     magic = Null
     Throw("ERROR : effect not load : " + _data._Name)
   End Select
  Catch error:Object
   WriteStdout(error.ToString())
   Return Null
  End Try
 End Method
 
 Method Draw(effect_:TEffect, x:Float, y:Float)
  Local effect:TMagicEffect = TMagicEffect(effect_)
  'If effect._stopped = True Then Return
  'If Magic_InInterval(effect._handle) = False Then Return
  Local effect_sx:Float, effect_sy:Float, effect_angle:Float
  Local rBlend:Int, rR:Int, rG:Int, rB:Int, rA:Float
  rBlend = GetBlend()
  rA = GetAlpha()
  GetColor(rR, rG, rB)
  GetScale(effect_sx, effect_sy)
  effect_angle = GetRotation()
  Magic_SetEmitterDirection(effect._handle, effect_angle)
  Magic_SetEmitterPosition(effect._handle, x / effect_sx, y / effect_sy)
  If Magic_GetColorMode(effect._handle) = MAGIC_COLOR_TINT
   Magic_SetTint(effect._handle, (0 Shl 24) | (rB Shl 16) | (rG Shl 8) | rR)
  End If
  For Local index:Int = Magic_GetParticlesTypeCount(effect._handle) - 1 To 0 Step - 1
   Magic_LockParticlesType(effect._handle, index)
   If Magic_IsIntensive() = True
    SetBlend(LIGHTBLEND)
   Else
    SetBlend(ALPHABLEND)
   End If
   Local particle:Byte Ptr
   Repeat
    particle = Magic_GetNextParticle()
    If particle = Null Then Exit
 
    Local FloatPtr:Float Ptr = Float Ptr(particle)
 
    Local px:Float = Float(floatPtr[0]) * effect_sx
    Local py:Float = Float(floatPtr[1]) * effect_sy
    Local psize:Float = Float(floatPtr[2])
    Local pangle:Float = Float(floatPtr[3])' - effect_angle
 
    Local intPtr:Int Ptr = Int Ptr(particle)
 
    Local color:Byte Ptr = Varptr(intPtr)[4]
    Local A:Byte = color[3]
    Local R:Byte = color[2]
    Local G:Byte = color[1]
    Local B:Byte = color[0]
    SetColor(R, G, B)
    SetAlpha(rA * (Float(A) / 255.0))
 
    Local frame:Int = Int(intPtr[5])
 
    Local pscalex:Float = psize / effect._images[index].width
    Local pscaley:Float = psize / effect._images[index].height
 
    SetTransform(pangle, pscalex * effect_sx, pscaley * effect_sy)
    DrawImage(effect._images[index], px, py, frame)
   Forever
   Magic_UnlockParticlesType()
  Next
  SetTransform(effect_angle, effect_sx, effect_sy) ' restore
  SetBlend(rBlend) ' restore
  SetAlpha(rA) ' restore
  SetColor(rR, rG, rB) ' restore
 End Method
 
 Method Update(effect:TEffect, dt:Float)
  Local eff:TMagicEffect = TMagicEffect(effect)
  If Magic_IsInterrupt(eff._handle) = False
   If eff._stopped Then Return
   eff._stopped = Not Magic_Update(eff._handle, dt * Magic_GetUpdateTime(eff._handle))
  Else
   Magic_Update(eff._handle, dt * Magic_GetUpdateTime(eff._handle))
   eff._stopped = True
  EndIf
 End Method
End Type
New TMagicEffectDriver
SetEffectDriver("Magic")
Type TMagicEffect Extends TEffect
 Field _handle:Int
 Field _images:TImage[0]
 Field _stopped:Byte = True
 
 Method Delete()
  Free()
 End Method
 
 Method Free()
  If _handle <> 0
   Magic_UnloadEmitter(_handle)
   _handle = 0
  End If
  _images = Null
  _stopped = Null
 End Method
 
 Method Copy:TMagicEffect()
  Try
   Local effect:TMagicEffect = New TMagicEffect
   If Magic_DuplicateEmitter(_handle, effect._handle) = MAGIC_ERROR Then Throw("ERROR : can't copy effect")
   effect._images = _images
   effect._stopped = _stopped
   Return effect
  Catch error:Object
   WriteStdout(error.ToString())
   Return Null
  End Try
 End Method
 
 Method Play(Loop:Byte = False)
  Select Loop
   Case EFFECT_LOOP Magic_SetLoopMode(_handle, MAGIC_LOOP)
   Case EFFECT_CLIP Magic_SetLoopMode(_handle, MAGIC_FOREVER)
   Default Magic_SetLoopMode(_handle, MAGIC_NOLOOP)
  End Select
  If _stopped Then Magic_Restart(_handle)
  _stopped = False
 End Method
 
 Method Playing:Byte()
  Return _stopped = False
 End Method
 
 Method Stop()
  _stopped = True
  Magic_Stop(_handle)
 End Method
 
 Method SetPaused(paused:Byte)
  Select paused
   Case True
    If _stopped Then Return
    Magic_SetInterrupt(_handle, True)
    _stopped = True
   Case False
    If _stopped = False Then Return
    If Magic_IsInterrupt(_handle) = True
     Magic_SetInterrupt(_handle, False)
     _stopped = False
     Return
    End If
    'Magic_Restart(_handle)
    _stopped = False
  End Select
 End Method
 
 Method SetMode(mode:Byte)
  If (mode & EFFECT_MODE_POSITION)
   Magic_SetEmitterPositionMode(_handle, False)
  Else
   Magic_SetEmitterPositionMode(_handle, True)
  End If
  If (mode & EFFECT_MODE_ROTATION)
   Magic_SetEmitterDirectionMode(_handle, False)
  Else
   Magic_SetEmitterDirectionMode(_handle, True)
  End If
 End Method
 
 Method GetMode:Byte()
  Local pos:Byte = Not Magic_GetEmitterPositionMode(_handle)
  Local rot:Byte = (Not Magic_GetEmitterDirectionMode(_handle)) * EFFECT_MODE_ROTATION
  Return pos | rot
 End Method
 
 Method MoveParticles(speedAngle:Float = 0.0, speedx:Float = 0.0, speedy:Float = 0.0)
  If speedAngle <> 0.0
   Magic_RotateEmitterParticles(_handle, speedAngle)
  End If
  If (speedx <> 0.0) | (speedy <> 0.0)
   Magic_MoveEmitterParticles(_handle, speedx, speedy)
  End If
 End Method
 
 Method ColorMode(mode:Byte = False, power:Float = 1.0)
  power = Max(Min(power, 1.0) , 0.0)
  Magic_SetTintStrength(_handle, power * 100.0)
  Select mode
   Case False Magic_SetColorMode(_handle, MAGIC_COLOR_STANDARD)
   Case True Magic_SetColorMode(_handle, MAGIC_COLOR_TINT)
   Default Magic_SetColorMode(_handle, MAGIC_COLOR_USER)
  End Select
 End Method
 
 Method SetParam(param:Int, data:Object)
 
 End Method
 
 Method GetParam:Object(param:Int)
 
 End Method
End Type
 
Private
Type MagicData
 Field _type:Int
 Field _name:Byte Ptr
 Field _animate:Int
 Method ToString:String()
  Return String.FromCString(_name)
 End Method
End Type
Global data:MagicData = New MagicData
Global rdata:TMagicData = New TMagicData
Global enum:TMagicEnum = New TMagicEnum
Global _start:Byte = False
Type TMagicEnum
 Field _handle:Int
 
 Method HasNext:Int()
  If _start
   _start = False
   If Magic_FindFirst(_handle, data, 0) <> "" Then Return True
  End If
  If Magic_FindNext(_handle, data) <> "" Then Return True
 End Method
 
 Method NextObject:Object()
  rdata._animate = data._animate
  rdata._name = data.ToString()
  rdata._type = data._type
  Return rdata
 End Method
End Type
Rem'
 bbdoc: Данные ресурсного файла.
EndRem
Type TMagicData
 Rem'
 bbdoc: Тип файла (папка \ эмиттер).
 EndRem
 Field _type:Int
 
 Rem'
 bbdoc: Имя файла.
 EndRem
 Field _name:String
 
 Rem'
 bbdoc: Признак анимированности.
 EndRem
 Field _animate:Int
End Type
Rem'
 bbdoc: Ресурсный файл.
EndRem
Type TMagic
 Field _handle:Int
 
 Method Delete()
  Close()
 End Method
 
 Rem'
 bbdoc: Закрывает файл.
 EndRem
 Method Close()
  If _handle <> 0
   Magic_CloseFile(_handle)
   _handle = 0
  End If
 End Method
 
 Rem'
 bbdoc: Загружает ptc-файл по указанному пути.
 EndRem
 Method Load:Int(url:Object)
  Local stream:TStream = TStream(url)
  If Not stream Then stream = ReadStream(url)
  If Not stream Then Throw("Magic -> Error loading .ptc file (" + url.ToString() + ")")
  Local mem:Byte Ptr = MemAlloc(stream.Size())
  stream.Read(mem, stream.Size())
  stream.Close() ; stream = Null
  Return Magic_OpenFileInMemory(mem, _handle)
 End Method
 
 Rem'
 bbdoc: Возвращает полный путь к текущей папке.
 EndRem
 Method GetCurrentFolder:String()
  Return Magic_GetCurrentFolder(_handle)
 End Method
 
 Rem'
 bbdoc: Устанавливает новую текущую папку.
 EndRem
 Method SetCurrentFolder(path:String = "")
  Magic_SetCurrentFolder(_handle, path)
 End Method
 
 'Private
 Method ObjectEnumerator:TMagicEnum()
  enum._handle = _handle
  _start = True
  Return enum
 End Method
End Type
Rem'
 bbdoc: Функция загружает ptc-файл.
EndRem
Function LoadMagic:TMagic(url:Object)
 'Try
  Local magic:TMagic = New TMagic
  If magic.Load(url) <> MAGIC_SUCCESS Then Throw("Magic -> Error loading .ptc file (" + url.ToString() + ")")
  Return magic
 'Catch error:Object
 ' Notify error.ToString()
 ' Return Null
 'End Try
End Function
Ну и как тебе такой заголовок ?
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
maxturbo (21.05.2011)
Старый 21.05.2011, 02:42   #11
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Модуль Magic Particles

Мда )))) Не хило
Сообщение от Diablo1909 Посмотреть сообщение
Номальные партиклы для Б3Д уже давно есть.
А где взять эти нормальны Particl'ы для Blitz3D ??
__________________

Последний раз редактировалось maxturbo, 21.05.2011 в 06:24.
(Offline)
 
Ответить с цитированием
Старый 03.06.2012, 14:51   #12
Черный крыс
 
Сообщений: n/a
Ответ: Модуль Magic Particles

Сообщение от maxturbo Посмотреть сообщение
Мда )))) Не хило

А где взять эти нормальны Particl'ы для Blitz3D ??
Спроси у tormoz'а.
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Particles ELIAS 3D-программирование 18 23.05.2010 20:44
Age of Wonders: Shadow Magic Chrono Syndrome Игры / Games 10 27.12.2007 14:33
Magic jimon Болтовня 19 25.04.2006 15:50


Часовой пояс GMT +1, время: 01:00.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com