forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Как узнать размер меша? (http://forum.boolean.name/showthread.php?t=1832)

WaReZ_MEN 28.05.2007 02:44

Re: Как узнать размер меша?
 
Код:

....
 Pick%= CameraPick(Cam,MouseX(),MouseY())
....

For  Unit.TUnit = Each TUnit
        If Unit<>Null
        ;        EntityPickMode        Unit\Model,2
                AnimEntityPickMode(Unit\Model,2)
                If Pick%= Unit\Model
                          Unit\Selected=True
                        Else
                                Unit\Selected=False
                        EndIf 
                EndIf         
    Next   

....

Function AnimEntityPickMode(Mesh, Mode)
  EntityPickMode(Mesh, Mode)
  For i = 1 To (CountChildren(Mesh))
      Child = GetChild(Mesh, i)
      AnimEntityPickMode(Child, Mode)
  Next
End Function


HolyDel 28.05.2007 02:50

Re: Как узнать размер меша?
 
1. необязательно каждый цинкл проводить изминение пикабелити этих объектов. достаточно ето сделать один раз, во время их создания.
ПС. а можно весь код в студию?

WaReZ_MEN 28.05.2007 02:51

Там очень много что канкретно нужно?

С простыми (не анемироваными) мешами все ок, а с анемироваными не получается

HolyDel 28.05.2007 02:56

Re: Как узнать размер меша?
 
1. как показывается выделение юнитов
2. ВЕСЬ код от Pick%= CameraPick(Cam,MouseX(),MouseY()) до If Pick%= Unit\Model.
3. вынеси плиз AnimEntityPickMode(Unit\Model,2), туда, где создаются юниты.

WaReZ_MEN 28.05.2007 03:03

Re: Как узнать размер меша?
 
Код:

    Pick%= CameraPick(Cam,MouseX(),MouseY())
If MouseHit(1)
                    If CursorStatus=0 Then SelectBuilding(): SelectUnit():                                  MouseHitMap(PickedX(),PickedZ()) 
                    If CursorStatus=1 Then PostBuilding()             
                EndIf
       
        If KeyHit(1)
          If CursorStatus=0 Then Exit
              ClearMouseStatus()
              CursorStatus=0
        EndIf
         
          If KeyHit(6) Then CreateUnit( 1,PickedX(),PickedY()+1,PickedZ()) 

        DrawSelectUnit()
        DrawImage MousePointer,MouseX(),MouseY()

        Flip
Forever



Function SelectUnit()           
    For  Unit.TUnit = Each TUnit
        If Unit<>Null
        ;        EntityPickMode        Unit\Model,2
;                AnimEntityPickMode(Unit\Model,2) ;перенес в создание юнита
                If Pick%= Unit\Model
                          Unit\Selected=True
                        Else
                                Unit\Selected=False
                        EndIf 
                EndIf         
    Next   
End Function

Function DrawSelectUnit()
max#=10000000.0
 For  Unit.TUnit = Each TUnit
        If Unit<>Null
                If Unit\Selected=True
                                CameraProject(Cam,EntityX(Unit\Model),EntityY(Unit\Model)+Unit\ModelHeight#+0.5,EntityZ(Unit\Model))               
                If EntityInView(Unit\Model,Cam)=True               
                                tY=TerrainY(terrain,EntityX(Unit\Model),EntityY(Unit\Model),EntityZ(Unit\Model))
                                        PositionEntity SelectUnitSprite,EntityX(Unit\Model),tY+.1,EntityZ(Unit\Model)
                                        max#=Unit\ModelWidth#
                                        If Max#>Unit\ModelDepth#  Then max#=Unit\ModelDepth#
                                        ScaleSprite SelectUnitSprite,max#,max#
                                        ShowEntity SelectUnitSprite       
                                        NewInterface.TInterface=First TInterface
                        StartDraw
                                        SetBlend FI_ALPHABLEND       
                                        DrawImageEx Unit\Avatar ,NewInterface\AvatarX,NewInterface\AvatarY
                                        DrawImageEx Unit\Icon ,NewInterface\IconX,NewInterface\IconY
                                EndDraw       
                                        UnitHealth(Unit\MaxHealth,Unit\NowHealth,ProjectedX#(),ProjectedY#(),True)
                                        Return 0
                                        EndIf
                    EndIf       
            EndIf       
    Next                   
    HideEntity SelectUnitSprite
    Return 0
End Function

Function UnitHealth(MaxHealth,NowHealth,Unit_X,Unit_Y,Viseble)

  If Viseble=True
         
  mxh=((MaxHealth/10)/4)
 
  If NowHealth/10=MaxHealth/10 Or NowHealth/10>= ((mxh*3)) Then Color 0,255,0
 
  If  NowHealth/10>= ((mxh*2)) And NowHealth/10<((mxh*3)) Then Color 255,255,0
  If  NowHealth/10<= ((mxh*2)) Then Color 0,255,0
 
        ;Color 255,0,0
        Rect Unit_X-(MaxHealth/10)/2,Unit_Y,MaxHealth/10,6,0
        Rect Unit_X-(MaxHealth/10)/2,Unit_Y,NowHealth/10,6,1
        Color 255,255,255
    Return 0
  EndIf 
 
  Return 0
End Function


moka 28.05.2007 04:34

Re: Как узнать размер меша?
 
http://www.boolean.name/showthread.php?t=3610
;)

HolyDel 28.05.2007 11:53

Re: Как узнать размер меша?
 
черт, как я сразу недопер.
ведь функция возвращает хендл пикнутого ентити и етот хендл несовпадает с хендлом родителя. надо проверять нет ли ентити с таким хендлом среди детей.
Код:

function IsMyChild(ent,child)
for i=1 to countchildren(ent)
ismychild(ent,child)
next
if ent=child then itistrue=1 ; itistrue - глобальная переменная
end function
короче обнуляеш переменную, вызываеш ф-ию и потом смотриш значение перменной.


WaReZ_MEN 29.05.2007 01:42

Re: Как узнать размер меша?
 
HolyDel спасибо но МоКа тебя опередил и с этим :)


Часовой пояс GMT +4, время: 06:50.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot