![](images/chestnut/misc/left.gif) |
25.04.2009, 13:36
|
#1
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Модуль Magic Particles
Описание: http://www.astralax.ru/projects/particles
Magic Particles — это специализированный редактор спецэффектов. Пылающий текст, летящая комета, танец осенних листьев под порывами ветра, снежная вьюга и разноцветный туман, извивающиеся щупальца диковинных тварей, причудливые силуэты растений — все эти (и многие другие!) образы могут быть не только созданы в этой программе, но и вставлены в ваши фотографии и видеозаписи.
|
Скачать: http://www.astralax.ru/forum/viewtopic.php?f=5&t=58
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
|
|
25.04.2009, 15:47
|
#2
|
|
Ответ: Модуль Magic Particles
Ага. Сейчас занимаемся документацией этого модуля, хотя она будет дублироваться хелпом с самой либой.
Скоро выложу обновленный модуль, с поддержкой траекторий.
ЗЫ. Огромное спасибо Dimanche13. За большой вклад в создании модуля.
PSS О найденых багах и пожеланиях отписывайтесь сюда или же diablo190[@]rambler.ru
Последний раз редактировалось Черный крыс, 25.04.2009 в 16:18.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
26.04.2009, 11:05
|
#3
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Модуль Magic Particles
Только вот самого файла модуля там нету, это так и предусмотренно?
Просто думал скомпилю под Mac, и обломался. Если нужен ходячий компилятор под MacOS X (PPC/Intel), то обращайтесь!
|
(Offline)
|
|
19.05.2011, 14:32
|
#4
|
Разработчик
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений (для 66 пользователей)
|
Ответ: Модуль Magic Particles
А на Blitz3D можно написать заголовочный файл для Magic Particles 3D??? Или если есть то киньте ссылку ![:)](images/smilies/smile.gif) Если же нет, то печально ![:)](images/smilies/smile.gif)
__________________
|
(Offline)
|
|
20.05.2011, 21:50
|
#5
|
Разработчик
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений (для 66 пользователей)
|
Ответ: Модуль Magic Particles
Сток программистов знающих и ни чего ответить не могут ![:)](images/smilies/smile.gif)
__________________
|
(Offline)
|
|
20.05.2011, 22:27
|
#6
|
|
Ответ: Модуль Magic Particles
Можно. Тока этого делать, скорее всего делать никто не будет. Да еще и гемора много чтобы его заврапить по Б3Д.
|
|
|
20.05.2011, 22:49
|
#7
|
Разработчик
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений (для 66 пользователей)
|
Ответ: Модуль Magic Particles
Сообщение от Diablo1909
Можно. Тока этого делать, скорее всего делать никто не будет. Да еще и гемора много чтобы его заврапить по Б3Д.
|
И в чем заключается геморой написания заголовочного файла под B3D ?? ))
__________________
|
(Offline)
|
|
20.05.2011, 23:02
|
#8
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Модуль Magic Particles
А ты попробуй напиши, потом расскажешь.
__________________
|
(Offline)
|
|
20.05.2011, 23:22
|
#9
|
Разработчик
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений (для 66 пользователей)
|
Ответ: Модуль Magic Particles
Сообщение от SBJoker
А ты попробуй напиши, потом расскажешь.
|
Ну так я и спрашиваю в чем заключается и стоит ли вообще писать?
__________________
|
(Offline)
|
|
21.05.2011, 00:26
|
#10
|
|
Ответ: Модуль Magic Particles
Так ответ тебе написали в 6-м посте. Номальные партиклы для Б3Д уже давно есть.
Ну а если тебе так интересно то Магик-партикл это всего лишь считалка, а все остальное будь добр пиши сам, в том числе и оббертку, на Б3Д это будет выглядеть ОЧЕНЬ невыразительно, для примера привожу код из модуля под БМакс :
![](images/chestnut/misc/code_html.gif)
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] -> [email protected]"
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
![](images/chestnut/misc/code_html.gif)
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
![](images/chestnut/misc/code_html.gif)
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
Ну и как тебе такой заголовок ?
|
|
|
Сообщение было полезно следующим пользователям:
|
|
21.05.2011, 06:42
|
#11
|
Разработчик
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений (для 66 пользователей)
|
Ответ: Модуль Magic Particles
Мда )))) Не хило
Сообщение от Diablo1909
Номальные партиклы для Б3Д уже давно есть.
|
А где взять эти нормальны Particl'ы для Blitz3D ?? ![:)](images/smilies/smile.gif)
__________________
Последний раз редактировалось maxturbo, 21.05.2011 в 10:24.
|
(Offline)
|
|
03.06.2012, 18:51
|
#12
|
|
Ответ: Модуль Magic Particles
Сообщение от maxturbo
Мда )))) Не хило
А где взять эти нормальны Particl'ы для Blitz3D ?? ![:)](images/smilies/smile.gif)
|
Спроси у tormoz'а.
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Particles |
ELIAS |
3D-программирование |
18 |
24.05.2010 00:44 |
Age of Wonders: Shadow Magic |
Chrono Syndrome |
Игры / Games |
10 |
27.12.2007 17:33 |
Magic |
jimon |
Болтовня |
19 |
25.04.2006 19:50 |
Часовой пояс GMT +4, время: 05:02.
|