celx_internal.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:5k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // celx_internal.h
  2. //
  3. // Copyright (C) 2003-2008, the Celestia Development Team
  4. //
  5. // Lua script extensions for Celestia. Internals that should only
  6. // be needed by modules that implement a celx object.
  7. //
  8. // This program is free software; you can redistribute it and/or
  9. // modify it under the terms of the GNU General Public License
  10. // as published by the Free Software Foundation; either version 2
  11. // of the License, or (at your option) any later version.
  12. #ifndef _CELX_INTERNAL_H_
  13. #define _CELX_INTERNAL_H_
  14. #include <map>
  15. #include <string>
  16. class CelestiaCore;
  17. class TimelinePhase;
  18. enum
  19. {
  20.     Celx_Celestia = 0,
  21.     Celx_Observer = 1,
  22.     Celx_Object   = 2,
  23.     Celx_Vec3     = 3,
  24.     Celx_Matrix   = 4,
  25.     Celx_Rotation = 5,
  26.     Celx_Position = 6,
  27.     Celx_Frame    = 7,
  28.     Celx_CelScript= 8,
  29.     Celx_Font     = 9,
  30.     Celx_Image    = 10,
  31.     Celx_Texture  = 11,
  32.     Celx_Phase    = 12,
  33. };
  34. // select which type of error will be fatal (call lua_error) and
  35. // which will return a default value instead
  36. enum FatalErrors
  37. {
  38.     NoErrors   = 0,
  39.     WrongType  = 1,
  40.     WrongArgc  = 2,
  41.     AllErrors = WrongType | WrongArgc,
  42. };
  43. class CelxLua;
  44. class CelxValue
  45. {
  46. public:
  47.     enum CelxType
  48.     {
  49.         Celx_Number,
  50.         Celx_String,
  51.         Celx_Nil,
  52.     };
  53.     
  54.     CelxValue() : type(Celx_Nil) {}
  55.     CelxValue(double d) : type(Celx_Number), value_number(d) {}
  56.     CelxValue(const char* s) : type(Celx_String), value_cstring(s) {}
  57.     
  58.     void push(lua_State* l) const
  59.     {
  60.         switch (type)
  61.         {
  62.             case Celx_Number: lua_pushnumber(l, value_number); break;
  63.             case Celx_String: lua_pushstring(l, value_cstring); break;
  64.             case Celx_Nil: lua_pushnil(l); break;
  65.         }
  66.     }
  67. private:
  68.     CelxType type;
  69.     union
  70.     {
  71.         double value_number;
  72.         char* value_string;
  73.         const char* value_cstring;
  74.     };
  75. };
  76. class CelxLua
  77. {
  78. public:
  79.     CelxLua(lua_State* l);
  80.     ~CelxLua();
  81.     
  82.     bool isType(int index, int type) const;
  83.     
  84.     void setClass(int id);
  85.     void pushClassName(int id);
  86.     void* checkUserData(int index, int id);
  87.     void doError(const char* errorMessage);
  88.     void checkArgs(int minArgs, int maxArgs, const char* errorMessage);
  89.     void createClassMetatable(int id);
  90.     void registerMethod(const char* name, lua_CFunction fn);
  91.     void registerValue(const char* name, float value);
  92.     
  93.     void setTable(const char* field, lua_Number value);
  94.     void setTable(const char* field, const char* value);
  95.         
  96.     void newFrame(const ObserverFrame& f);
  97.     void newVector(const Vec3d& v);
  98.     void newRotation(const Quatd& q);
  99.     void newPosition(const UniversalCoord& uc);
  100.     void newObject(const Selection& sel);
  101.     void newPhase(const TimelinePhase& phase);
  102.     Vec3d* toVector(int n);
  103.     Quatd* toRotation(int n);
  104.     UniversalCoord* toPosition(int n);
  105.     Selection* toObject(int n);
  106.     ObserverFrame* toFrame(int n);
  107.     
  108.     void push(const CelxValue& v1);
  109.     void push(const CelxValue& v1, const CelxValue& v2);
  110.     
  111.     CelestiaCore* appCore(FatalErrors fatalErrors = NoErrors);
  112.     
  113.     lua_Number safeGetNumber(int index,
  114.                              FatalErrors fatalErrors = AllErrors,
  115.                              const char* errorMessage = "Numeric argument expected",
  116.                              lua_Number defaultValue = 0.0);
  117.     const char* safeGetString(int index,
  118.                               FatalErrors fatalErrors = AllErrors,
  119.                               const char* errorMessage = "String argument expected");
  120.     bool safeGetBoolean(int index,
  121.                         FatalErrors fatalErrors = AllErrors,
  122.                         const char* errorMsg = "Boolean argument expected",
  123.                         bool defaultValue = false);
  124.     
  125.     LuaState* getLuaStateObject();
  126.     
  127.     // String to flag mappings
  128.     typedef std::map<std::string, uint32> FlagMap;
  129.     typedef std::map<std::string, Color*> ColorMap;
  130.     static void initMaps();
  131.     static void initRenderFlagMap();
  132.     static void initLabelFlagMap();
  133.     static void initBodyTypeMap();
  134.     static void initLocationFlagMap();
  135.     static void initOverlayElementMap();
  136.     static void initOrbitVisibilityMap();
  137.     static void initLabelColorMap();
  138.     static void initLineColorMap();
  139.     
  140.     static FlagMap RenderFlagMap;
  141.     static FlagMap LabelFlagMap;
  142.     static FlagMap LocationFlagMap;
  143.     static FlagMap BodyTypeMap;
  144.     static FlagMap OverlayElementMap;
  145.     static FlagMap OrbitVisibilityMap;
  146.     static ColorMap LineColorMap;
  147.     static ColorMap LabelColorMap;
  148.     static bool mapsInitialized;
  149.     
  150.     static const char* ClassNames[];
  151.     
  152. private:
  153.     lua_State* m_lua;
  154. };
  155. #endif // _CELX_INTERNAL_H_