]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/mapblock_mesh.h
Make scrollbar scale according to DPI and scaling factor
[dragonfireclient.git] / src / mapblock_mesh.h
index 5028873c47236b1d30b03cc7ae42d5ba5e358b16..7f52317383a02435930a98983e7525299f7667c4 100644 (file)
@@ -1,18 +1,18 @@
 /*
-Minetest-c55
-Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+GNU Lesser General Public License for more details.
 
-You should have received a copy of the GNU General Public License along
+You should have received a copy of the GNU Lesser General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
@@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef MAPBLOCK_MESH_HEADER
 #define MAPBLOCK_MESH_HEADER
 
-#include "common_irrlicht.h"
+#include "irrlichttypes_extrabloated.h"
 #include "tile.h"
 #include "voxel.h"
 #include <map>
@@ -81,7 +81,7 @@ class MapBlockMesh
 {
 public:
        // Builds the mesh given
-       MapBlockMesh(MeshMakeData *data);
+       MapBlockMesh(MeshMakeData *data, v3s16 camera_offset);
        ~MapBlockMesh();
 
        // Main animation function, parameters:
@@ -107,6 +107,8 @@ class MapBlockMesh
                if(m_animation_force_timer > 0)
                        m_animation_force_timer--;
        }
+       
+       void updateCameraOffset(v3s16 camera_offset);
 
 private:
        scene::SMesh *m_mesh;
@@ -122,11 +124,20 @@ class MapBlockMesh
        // Maps mesh buffer (i.e. material) indices to base texture names
        std::map<u32, std::string> m_crack_materials;
 
+       // Animation info: texture animationi
+       // Maps meshbuffers to TileSpecs
+       std::map<u32, TileSpec> m_animation_tiles;
+       std::map<u32, int> m_animation_frames; // last animation frame
+       std::map<u32, int> m_animation_frame_offsets;
+       
        // Animation info: day/night transitions
        // Last daynight_ratio value passed to animate()
        u32 m_last_daynight_ratio;
        // For each meshbuffer, maps vertex indices to (day,night) pairs
        std::map<u32, std::map<u32, std::pair<u8, u8> > > m_daynight_diffs;
+       
+       // Camera offset info -> do we have to translate the mesh?
+       v3s16 m_camera_offset;
 };
 
 
@@ -137,13 +148,13 @@ class MapBlockMesh
 struct PreMeshBuffer
 {
        TileSpec tile;
-       core::array<u16> indices;
-       core::array<video::S3DVertex> vertices;
+       std::vector<u16> indices;
+       std::vector<video::S3DVertex> vertices;
 };
 
 struct MeshCollector
 {
-       core::array<PreMeshBuffer> prebuffers;
+       std::vector<PreMeshBuffer> prebuffers;
 
        void append(const TileSpec &material,
                        const video::S3DVertex *vertices, u32 numVertices,
@@ -154,14 +165,15 @@ struct MeshCollector
 //   alpha in the A channel of the returned SColor
 //   day light (0-255) in the R channel of the returned SColor
 //   night light (0-255) in the G channel of the returned SColor
-inline video::SColor MapBlock_LightColor(u8 alpha, u16 light)
+//   light source (0-255) in the B channel of the returned SColor
+inline video::SColor MapBlock_LightColor(u8 alpha, u16 light, u8 light_source=0)
 {
-       return video::SColor(alpha, (light & 0xff), (light >> 8), 0);
+       return video::SColor(alpha, (light & 0xff), (light >> 8), light_source);
 }
 
 // Compute light at node
-u16 getInteriorLight(MapNode n, s32 increment, MeshMakeData *data);
-u16 getFaceLight(MapNode n, MapNode n2, v3s16 face_dir, MeshMakeData *data);
+u16 getInteriorLight(MapNode n, s32 increment, INodeDefManager *ndef);
+u16 getFaceLight(MapNode n, MapNode n2, v3s16 face_dir, INodeDefManager *ndef);
 u16 getSmoothLight(v3s16 p, v3s16 corner, MeshMakeData *data);
 
 // Retrieves the TileSpec of a face of a node