Example Wedge (script_wedge.as)

[Solid("script_wedge")] class ExampleWedge : ScriptSolid { GUIData[]@ GetGuiData() const { return {}; } void GuiUpdated(const dictionary@ dict) { } CMapClass@ CreateMapSolid( const BoundBox@ box, TextureAlignment align ) { float width = (box.maxs[0] - box.mins[0]) / 2; float depth = (box.maxs[1] - box.mins[1]) / 2; float height = (box.maxs[2] - box.mins[2]) / 2; Vector origin; box.GetBoundsCenter(origin); CMapFace face; CMapSolid@ solid = CMapSolid(); Vector[] points; points.resize(4); points[0][0] = origin[0] + width; points[0][1] = origin[1] + depth; points[0][2] = origin[2] + height; points[1][0] = origin[0] + width; points[1][1] = origin[1] - depth; points[1][2] = origin[2] + height; points[2][0] = origin[0] - width; points[2][1] = origin[1] - depth; points[2][2] = origin[2] + height; face.CreateFace(points, 3); solid.AddFace(face); for (int i = 0; i < 3; i++) { points[i][2] = origin[2] - height; } face.CreateFace(points, -3); solid.AddFace(face); points[0][0] = origin[0] + width; points[0][1] = origin[1] + depth; points[0][2] = origin[2] - height; points[1][0] = origin[0] + width; points[1][1] = origin[1] + depth; points[1][2] = origin[2] + height; points[2][0] = origin[0] - width; points[2][1] = origin[1] - depth; points[2][2] = origin[2] + height; points[3][0] = origin[0] - width; points[3][1] = origin[1] - depth; points[3][2] = origin[2] - height; face.CreateFace(points, 4); solid.AddFace(face); points[0][0] = origin[0] + width; points[0][1] = origin[1] - depth; points[0][2] = origin[2] + height; points[1][0] = origin[0] + width; points[1][1] = origin[1] - depth; points[1][2] = origin[2] - height; points[2][0] = origin[0] - width; points[2][1] = origin[1] - depth; points[2][2] = origin[2] - height; points[3][0] = origin[0] - width; points[3][1] = origin[1] - depth; points[3][2] = origin[2] + height; face.CreateFace(points, 4); solid.AddFace(face); points[0][0] = origin[0] + width; points[0][1] = origin[1] + depth; points[0][2] = origin[2] + height; points[1][0] = origin[0] + width; points[1][1] = origin[1] + depth; points[1][2] = origin[2] - height; points[2][0] = origin[0] + width; points[2][1] = origin[1] - depth; points[2][2] = origin[2] - height; points[3][0] = origin[0] + width; points[3][1] = origin[1] - depth; points[3][2] = origin[2] + height; face.CreateFace(points, 4); solid.AddFace(face); solid.CalcBounds(false); solid.InitializeTextureAxes(align, INIT_TEXTURE_ALL | INIT_TEXTURE_FORCE); return solid; } void DrawPreview( Render@ render, const BoundBox@ box ) { float width = (box.maxs[0] - box.mins[0]) / 2; float depth = (box.maxs[1] - box.mins[1]) / 2; float height = (box.maxs[2] - box.mins[2]) / 2; Vector origin; box.GetBoundsCenter(origin); MeshBuilder builder; builder.Start(GetDefaultTextureName(), MATERIAL_QUADS, 3); Vector2D tc1(0, 0); Vector2D tc2(0, 1); Vector2D tc3(1, 1); Vector2D tc4(1, 0); Vector pos; pos.x = origin[0] + width; pos.y = origin[1] + depth; pos.z = origin[2] - height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc1 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] + depth; pos.z = origin[2] + height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc2 ); builder.AdvanceVertex(); pos.x = origin[0] - width; pos.y = origin[1] - depth; pos.z = origin[2] + height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc3 ); builder.AdvanceVertex(); pos.x = origin[0] - width; pos.y = origin[1] - depth; pos.z = origin[2] - height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc4 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] - depth; pos.z = origin[2] + height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc1 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] - depth; pos.z = origin[2] - height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc2 ); builder.AdvanceVertex(); pos.x = origin[0] - width; pos.y = origin[1] - depth; pos.z = origin[2] - height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc3 ); builder.AdvanceVertex(); pos.x = origin[0] - width; pos.y = origin[1] - depth; pos.z = origin[2] + height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc4 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] + depth; pos.z = origin[2] + height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc1 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] + depth; pos.z = origin[2] - height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc2 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] - depth; pos.z = origin[2] - height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc3 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] - depth; pos.z = origin[2] + height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc4 ); builder.AdvanceVertex(); builder.Draw(); builder.Start(GetDefaultTextureName(), MATERIAL_TRIANGLES, 2); pos.x = origin[0] + width; pos.y = origin[1] + depth; pos.z = origin[2] + height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc1 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] - depth; pos.z = origin[2] + height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc2 ); builder.AdvanceVertex(); pos.x = origin[0] - width; pos.y = origin[1] - depth; pos.z = origin[2] + height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc3 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] + depth; pos.z = origin[2] - height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc1 ); builder.AdvanceVertex(); pos.x = origin[0] - width; pos.y = origin[1] - depth; pos.z = origin[2] - height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc3 ); builder.AdvanceVertex(); pos.x = origin[0] + width; pos.y = origin[1] - depth; pos.z = origin[2] - height; builder.Position( pos ); builder.Normal( vec3_origin ); builder.TexCoord( 0, tc4 ); builder.AdvanceVertex(); builder.Draw(); } };