Changeset 1415


Ignore:
Timestamp:
May 29, 2012, 1:43:55 AM (8 years ago)
Author:
sam
Message:

orbital: use a flex/bison scanner/parser for mesh descriptions.

Location:
trunk/orbital
Files:
10 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/orbital/Makefile.am

    r1403 r1415  
    33
    44orbital_SOURCES = \
    5     orbital.cpp orbital.h mesh.h particlesystem.h tank.h player.h \
    6     gun.h snake.h starfield.h
     5    orbital.cpp orbital.h \
     6    mesh.cpp mesh.h \
     7    particlesystem.h tank.h player.h gun.h snake.h starfield.h
    78nodist_orbital_SOURCES = \
    89    shiny.lolfx.cpp
     
    1011orbital_LDADD =
    1112orbital_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@
    12 orbital_DEPENDENCIES = $(top_builddir)/src/liblol.a
     13orbital_DEPENDENCIES = $(top_builddir)/src/liblol.a \
     14    generated/mesh-scanner.cpp \
     15    generated/mesh-parser.cpp
    1316
    1417all-local: orbital$(EXEEXT)
    1518        test $(MAKE_FSELF) = no || make_fself orbital$(EXEEXT) orbital.self
    1619
    17 EXTRA_DIST = $(PNG) $(WAV)
     20if TRUE
     21generated: .FORCE
     22        $(MKDIR_P) generated
     23        flex -o generated/mesh-scanner.cpp mesh.l
     24        bison -o generated/mesh-parser.cpp -d -b generated/mesh mesh.yy
     25.FORCE:
     26endif
     27
     28EXTRA_DIST = mesh.l mesh.yy
    1829CLEANFILES = $(noinst_PROGRAMS:%$(EXEEXT)=%.self) \
    1930             $(noinst_PROGRAMS:%$(EXEEXT)=%.elf) \
  • trunk/orbital/mesh.h

    r1414 r1415  
    1212extern char const *lolfx_shiny;
    1313
    14 #include "CommandParser.h"
    15 
    1614#if !defined __MESH_H__
    1715#define __MESH_H__
    1816
    19 class Mesh : public CommandParser
     17#include <string>
     18
     19class Mesh
    2020{
    2121public:
     
    2525    {}
    2626
    27     virtual void SwitchCommand(char const *&command)
    28     {
    29         vec4 v4;
    30         vec3 v3;
    31         float f1, f2, f3, f4, f5, f6, f7, f8;
    32 
    33                 const char *&p = command;
    34         {
    35 #define CASE(str) if (CheckCommand(str, p))
    36                  CASE("scb") { p = GetArg(p, v4); SetCurColor2(v4); }
    37             else CASE("sc")  { p = GetArg(p, v4); SetCurColor(v4); }
    38             else CASE("fl")  { Flush(); }
    39             else CASE("tx")  { p = GetArg(p, f1); Translate(vec3(f1, 0, 0)); }
    40             else CASE("ty")  { p = GetArg(p, f1); Translate(vec3(0, f1, 0)); }
    41             else CASE("tz")  { p = GetArg(p, f1); Translate(vec3(0, 0, f1)); }
    42             else CASE("t")   { p = GetArg(p, v3); Translate(v3); }
    43             else CASE("rx")  { p = GetArg(p, f1); RotateX(f1); }
    44             else CASE("ry")  { p = GetArg(p, f1); RotateY(f1); }
    45             else CASE("rz")  { p = GetArg(p, f1); RotateZ(f1); }
    46             else CASE("tax") { p = GetArg(p, f1, f2, f3); TaperX(f1, f2, f3); }
    47             else CASE("tay") { p = GetArg(p, f1, f2, f3); TaperY(f1, f2, f3); }
    48             else CASE("taz") { p = GetArg(p, f1, f2, f3); TaperZ(f1, f2, f3); }
    49             else CASE("sx")  { p = GetArg(p, f1); Scale(vec3(f1, 1, 1)); }
    50             else CASE("sy")  { p = GetArg(p, f1); Scale(vec3(1, f1, 1)); }
    51             else CASE("sz")  { p = GetArg(p, f1); Scale(vec3(1, 1, f1)); }
    52             else CASE("s")   { p = GetArg(p, v3); Scale(v3); }
    53             else CASE("mx")  { MirrorX(); }
    54             else CASE("my")  { MirrorY(); }
    55             else CASE("mz")  { MirrorZ(); }
    56             else CASE("ac")  { p = GetArg(p, f1, f2, f3); p = GetArg(p, f4, f5, f6); AppendCylinder((int)f1, f2, f3, f4, (int)f5, (int)f6); }
    57             else CASE("ab")  { p = GetArg(p, v3); AppendBox(v3); }
    58             else CASE("ascb") { p = GetArg(p, v3, f1); AppendSmoothChamfBox(v3, f1); }
    59             else CASE("afcb") { p = GetArg(p, v3, f1); AppendFlatChamfBox(v3, f1); }
    60             else CASE("asph") { p = GetArg(p, f1); p = GetArg(p, v3); AppendSphere((int)f1, v3); }
    61             else CASE("as")  { p = GetArg(p, f1, f2, f3, f4, f5); AppendStar((int)f1, f2, f3, (int)f4, (int)f5); }
    62             else CASE("aes") { p = GetArg(p, f1, f2, f3, f4); AppendExpandedStar((int)f1, f2, f3, f4); }
    63             else CASE("ad")  { p = GetArg(p, f1, f2, f3); AppendDisc((int)f1, f2, (int)f3); }
    64             else CASE("at")  { p = GetArg(p, f1, f2); AppendSimpleTriangle(f1, (int)f2); }
    65             else CASE("aq")  { p = GetArg(p, f1, f2); AppendSimpleQuad(f1, (int)f2); }
    66             else CASE("acg") { p = GetArg(p, f1, f2, f3, f4); p = GetArg(p, f5, f6, f7, f8); AppendCog((int)f1, f2, f3, f4, f5, f6, f7, (int)f8); }
    67             else CASE("irb") { MeshConvert(); }
    68             else CASE("frb") { /* TODO */ }
    69 #undef CASE
    70         }
    71     }
    72 
    73     virtual void Flush()
     27    void SendCommand(char const *command);
     28
     29    void Flush()
    7430    {
    7531        m_vert_cursor = m_vert.Count();
     
    649605            SetCurVertColor(m_color2);
    650606
    651         AppendQuad(0, 1, 2, 3, m_vert.Count() - 4);
     607        AppendQuad(3, 2, 1, 0, m_vert.Count() - 4);
    652608        ComputeQuadNormals(m_quadidx.Count() - 4, 4);
    653609    }
Note: See TracChangeset for help on using the changeset viewer.