Тема: Bombers3D
Показать сообщение отдельно
Старый 07.01.2006, 16:55   #47
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
а вот само решение:
Type TViz
	Field I%, J%, EndI%, EndJ%
	Field Direction%
End Type

Function *CreateVisPoints(plrNum%)
	Local plrI%=CXtoI%(plr(plrNum)\X%)
	Local plrJ%=CZtoJ%(plr(plrNum)\Z%)
	Local plrDir%=plr(plrNum)\Direction%
	Local CI%=plrI%, CJ%=plrJ%
	Local I%, J%
	Local EI%
	Local Dist%=VizDistanse%
	Select plrDir%
	Case Dir_Up
 *	CJ%=plrJ%-VizDistanse%
	Case Dir_Right
 *	CI%=plrI%+VizDistanse%
	Case Dir_Down *
 *	CJ%=plrJ%+VizDistanse%
	Case Dir_Left
 *	CI%=plrI%-VizDistanse%
	End Select
	VizUpd(plrI%,plrJ%,3)
	Select plrDir%
	Case Dir_Up, Dir_Down
 *If plrDir%=Dir_Up Then
 *	EI=plrJ%-VizDistanse%
 *Else 
 *	EI=plrJ%+VizDistanse%
 *EndIf
 *CreateVPoint(plrI%,plrJ%,CI%,CJ%,plrDir%)
 *For I%=1 To VizDistanse%
 *	If I=A Then
 * *For TVizPoint.TViz = Each TViz
 * *	If (TVizPoint\I=plrI%) Then If (TVizPoint\J=plrI%) Then	If (TVizPoint\Direction%=plrDir%) Then Return
 * *Next
 *	EndIf 
 *	CreateVPoint(plrI%,plrJ%,CI+I%,EI,plrDir%)
 *	CreateVPoint(plrI%,plrJ%,CI-I%,EI,plrDir%)
 *Next 
	Case Dir_Right, Dir_Left
 *	If plrDir%=Dir_Right Then
 * *EI%=plrI%+VizDistanse%
 *	Else 
 * *EI%=plrI%-VizDistanse%
 *	EndIf
 *	CreateVPoint(plrI%,plrJ%,CI%,CJ%,plrDir%)
 *For J%=1 To VizDistanse%
 *	If J=A Then
 * *For TVizPoint.TViz = Each TViz
 * *	If (TVizPoint\I=plrI%) Then If (TVizPoint\J=plrI%) Then	If (TVizPoint\Direction%=plrDir%) Then Return
 * *Next
 *	EndIf 
 *	CreateVPoint(plrI%,plrJ%,EI%,CJ+J%,plrDir%)
 *	CreateVPoint(plrI%,plrJ%,EI%,CJ-J%,plrDir%)
 *Next 
	End Select
	
End Function

Function CreateVPoint(I%,J%,EndI%,EndJ%,Direction%)
	TVizPoint.TViz = New TViz
	TVizPoint\I%=I%
	TVizPoint\J%=J%
	TVizPoint\EndI%=EndI%
	TVizPoint\EndJ%=EndJ%
	TVizPoint\Direction%=Direction%
End Function 

Function UpdPlrViz()
	Local AngleKoef#, sg%=1
	Local D%, D1%, TI%,TJ%, A%, B%
	Local Index%
	Index%=0
	
	For TV.TViz=Each TViz
 *Index=Index+1
 *Select TV\Direction%
 *Case Dir_Up
 * *D%=TV\EndI%-TV\I%
 * *For J%=TV\J% To TV\EndJ% Step -1
 * *	TI%=TV\I% + Float(D%*Abs(TV\J%-J%))/Float(VizDistanse%)
 * *	TJ%=J%
 * *	If UPVAddon(TV, TI, TJ) Then Goto n
 * *Next
 *Case Dir_Right
 * *D%=TV\EndJ%-TV\J%
 * *For I%=TV\I% To TV\EndI%
 * *	TJ%=TV\J% + Float(D%*Abs(I%-TV\I%))/Float(VizDistanse%)
 * *	TI%=I%
 * *	If UPVAddon(TV, TI, TJ) Then Goto n
 * *Next
 *Case Dir_Down
 * *D%=TV\EndI%-TV\I%
 * *For J%=TV\J% To TV\EndJ%
 * *	TI%=TV\I% + Float(D%*Abs(J%-TV\J%))/Float(VizDistanse%)
 * *	TJ%=J%
 * *	If UPVAddon(TV, TI, TJ) Then Goto n
 * *Next
 *Case Dir_Left
 * *D%=TV\EndJ%-TV\J%
 * *For I%=TV\I% To TV\EndI% Step -1
 * *	TJ%=TV\J% + Float(D%*Abs(TV\I%-I%))/Float(VizDistanse%)
 * *	TI%=I%
 * *	If UPVAddon(TV, TI, TJ) Then Goto n
 * *Next
 *End Select
 * *If Not (TV=Null) Then
 * *	Delete TV
 * *EndIf 
 *.n
 *If index>VizD2% Then Return
	Next 

End Function 

Function UPVAddon%(TV.TViz,TI%,TJ%)
	Local I%=0
	If TI<0 Then I%=1
	If TJ<0 Then I%=1
	If TI>CornerW Then I%=1
	If TJ>cornerH Then I%=1
	If I Then
 *Delete TV
 *Return 1
	EndIf 
	If Not Sceneobject(TI%,TJ%)\Visibaly Then VizUpd(TI,TJ,2)
	Select Sceneobject(TI%,TJ%)\GeometryType%
 *Case GTNothing,GTWeapon%,GTTool%,GTTreasure%,GTStoneBall%;,GTPlayer%,GTMonster%,GTBlood%
 *	Return 0
 *Default
 *	Delete TV
 *	Return 1	
	End Select
End Function
скопировал прям из кода игры, так что неволнуйтесь, если чего-то не поймете
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием