flagflag  

llGroundSet(int x, int y, double height), llGroundUpdate() anchor.png

Page Top
OS Function に同じような osTerrainSetHeight(), osTerrainFlush() があった. anchor.png
  • llGroundSet(): 座標 (x, y) の標高を height にする関数.
  • llGroundUpdate(): 変更した標高を適用させる.
  • OpenSim/Region/ScriptEngine/Shared/Api/I​mplementation/LSL_Api.cs
           // Fumi.Iseki
           public void llGroundSet(int x, int y, double height)
           {       
               m_host.AddScriptLPS(1);
                   
               if (World.Permissions.CanTerraformLand(m_host.OwnerID, new Vector3(x,y,0)))
               {
                   if (x>=World.Heightmap.Width)  x = World.Heightmap.Width - 1;
                   else if (x<0) x = 0;
                   if (y>=World.Heightmap.Height) y = World.Heightmap.Height - 1;
                   else if (y<0) y = 0; 
                   World.Heightmap[x, y] = height;
               }
           }   
               
           // Fumi.Iseki
           public void llGroundUpdate()
           {   
               m_host.AddScriptLPS(1);
    
               ITerrainModule tm = m_ScriptEngine.World.RequestModuleInterface<ITerrainModule>();
               if (tm != null)
               {
                   tm.TaintTerrain();
               }
           }
  • OpenSim/Region/ScriptEngine/Shared/Api/R​untime/LSL_Stub.cs
           // Fumi.Iseki
           public void llGroundSet(int x, int y, double height)
           {
               m_LSL_Functions.llGroundSet(x, y, height);
           }
    
           // Fumi.Iseki
           public void llGroundUpdate()
           {
               m_LSL_Functions.llGroundUpdate();
           }
  • OpenSim/Region/ScriptEngine/Shared/Api/I​nterface/ILSL_Api.cs
    void llGroundSet(int x, int y, double height);
    void llGroundUpdate();
Page Top

別解:TerrainModule.cs に SetHeightMap() 関数を追加する場合 anchor.png

  • OpenSim/Region/ScriptEngine編集/Shared/Api/Implementation/LSL_Api.cs
          // Fumi.Iseki
           public void llGroundSet(int x, int y, double height)
           {       
               m_host.AddScriptLPS(1);
                   
               if (World.Permissions.CanTerraformLand(m_host.OwnerID, new Vector3(x,y,0)))
               {
                   ITerrainModule tm = m_ScriptEngine.World.RequestModuleInterface<ITerrainModule>();
                   if (tm != null)
                   {
                       if (x>=World.Heightmap.Width)  x = World.Heightmap.Width - 1;
                       else if (x<0) x = 0;
                       if (y>=World.Heightmap.Height) y = World.Heightmap.Height - 1;
                       else if (y<0) y = 0; 
                       tm.SetHeightMap(x, y, height, m_host.OwnerID);
                   }
               }
           } 
  • OpenSim/Region/CoreModules/World/Terrain​/TerrainModule.cs
    public void SetHeightMap(int x, int y, double height, UUID agentId)
    {
        if (m_scene.Permissions.CanTerraformLand(agentId, new Vector3(x,y,0)))
        {
            m_channel[x, y] = height;
        }
     }
    • チェックが2重だな
  • OpenSim/Region/Framework/Interfaces/ITer​rainModule.cs  (インターフェイス)
    void SetHeightMap(int x, int y, double height, UUID agentId)

Front page   Freeze Diff Backup Copy Rename Reload   New List of Pages Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 1597, today: 2, yesterday: 0
Last-modified: 2010-01-21 (Thu) 02:31:13 (JST) (5181d) by iseki

Site Search

Login

Username:

Password:


Lost Password?
Register now!!

Sub Menu

mini Calendar

Last MonthMar 2024Next Month
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Today

Who's Online

78 user(s) are online (5 user(s) are browsing xpwiki)

Members: 0
Guests: 78

more...

Access Counter

Today : 1246112461124611246112461
Yesterday : 6869686968696869
Total : 2318674423186744231867442318674423186744231867442318674423186744
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com