Mod Скрипт для визуализации примитивов

Тема в разделе "Готовые работы", создана пользователем StaleCracker, 29 дек 2017.

  1. StaleCracker

    StaleCracker

    Регистрация:
    19 фев 2011
    Классы для визуализации квадратов, гексов, прямоугольников без лишней возни обработкой\обновлением и прочим.

    интерфейс iVisual, говорит о том что класс является классом визуализации
    void Render( Orientation:: Point point ) - отрисовывает объект
    void Render( Orientation:: Point point, Visual::color c ) - отрисовывает объект с цветом c
    void AddChildren( Visual::iVisual children ) - добавляет наследника в очередь отрисовки
    VisualPriority get_Priority( ) - приоритет отрисовки ( пока бесполезен )

    дефайн типа uint для цветов - color

    дефайн типа double для пометки того что передавать градус нужно в радианах - radian
    double Pi - число Pi
    radian get_Radian( double angle ) - перевод градусов в радиан. Пример Orientation::Radian[90.0f]
    double get_Deg( radian r ) - перевод радианов в градусы. Пример Orientation:: Deg[ 0.71f ];
    Point get_Mouse( ) - возвращает позицию мышки точкой;

    класс Point - точка
    rotate( radian angle ) - поворот точки на угол
    double mod - модуль
    double innerproduct( Point other ) - возвращает скалярное произведение
    radian angle( Point other ) - возвращает угол между точками

    Point ToRadian( ) - переводит координаты точки в радианы ( для случаев когда точка отражает угол, а не позицию )
    Point ToDeg( ) - переводит коордианты точки из радианов в градусы
    Point clone( ) - возвращает копию точки

    класс Instance наследует Visual::iVisual - экземпляр примитива

    Visual::color Color - дефолтный цвет примитива
    double Angle - угол примитива

    int[] Rotate( Visual::color&in c ) - возвращает данные для отрисовки через DrawPrimitive с поворотом Angle и цветом c
    int[] GetData( Orientation:: Point&in point, Visual::color&in c ) - возвращает данные для отрисовки с поворотом Angle, цветом c, и с начальной точкой point
    void Refresh( ) - обновляет данные

    класс Poligon наследует Instance - многоугольник
    void Build( uint angleCount, Orientation:: Point size, Orientation:: Point angle = null, bool radian = false, bool center = true ) - собирает многоугольник с количеством углов angleCount, размером size, внутренними углами angle. radian - указывает передается ли угол в радианах. center - указывает строить ли вокруг центра, или начальная точка должна быть левым верхним углом.

    void Quadre( int size, Orientation:: Point angle = null, bool center = true ) - собирает квадрат
    void Rectangle( int x, int y, Orientation:: Point angle = null, bool center = true ) - собирает прямоугольник
    void Rectangle( Orientation:: Point size, Orientation:: Point angle = null, bool center = true ) - собирает прямоугольник
    void Hexagonal( int x, int y, double angle, bool center = true ) - собирает гексагон
    void Hexagonal( int x, int y, Orientation:: Point angle = null, bool center = true ) - собирает гексагон
    void Hexagonal( Orientation:: Point size, double angle, bool center = true ) - собирает гексагон
    void Hexagonal( Orientation:: Point size, Orientation:: Point angle = null, bool center = true ) - собирает гексагон

    bool Fill - заливать ли фигуру цветом.

    Вложения:

    • Visual.7z
      Размер файла:
      2,6 КБ
      Просмотров:
      44
    Последнее редактирование: 10 янв 2018
  2. StaleCracker

    StaleCracker

    Регистрация:
    19 фев 2011
    Пример отрисовывающий гексагон под курсором зеленым цветом, и соседние гексагоны белым цветом.
    Код:
    Visual::iVisual Cell;
    double ZoomTemp;
     
    void ModuleInit( )
    {
      __EventRenderIface.SubscribeToLayer( 2, RenderMouse );
    }
     
    void DrawGameHexBorder( uint16 hx, uint16 hy, Visual::color color )
    {
      int x = -1, y = -1;
     
      if( GetHexPos( hx, hy, x, y ) && GetMonitorHex( x, y, hx, hy ) )
    	Cell.Render( Orientation::Point( x, y ), color );
    }
     
    void DrawGameHexBorder( uint16 hx, uint16 hy )
    {
      int x = -1, y = -1;
     
      if( GetHexPos( hx, hy, x, y ) )
    	Cell.Render( Orientation::Point( x, y ) );
    }
     
    void Build( )
    {
      Primitive::Poligon poli = @Primitive::Poligon( );
      poli.Hexagonal( Orientation::Point( __MapHexWidth * 0.55 / __SpritesZoom, __MapHexHeight * 0.55 / __SpritesZoom ), 90.0f );
      poli.Color = Visual::color( COLOR_DGREEN );
      @Cell = @poli;
      ZoomTemp = __SpritesZoom;
    }
     
    void RenderMouse( uint )
    {
      if( @Cell is null || __SpritesZoom != ZoomTemp )
    	Build( );
     
      uint16 hx = 0, hy = 0;
      if( GetMonitorHex( __MouseX, __MouseY, hx, hy )  )
      {
    	for( uint i = 0; i < 6; i++ )
    	{
    	  uint16 newX = hx, newY = hy;
    	  MoveHexByDir( newX, newY, i, 1 );
    	  DrawGameHexBorder( newX, newY, Visual::color( COLOR_GRAY ) );
    	}
    	DrawGameHexBorder( hx, hy );
      }
    }
    Последнее редактирование: 11 янв 2018
  3. StaleCracker

    StaleCracker

    Регистрация:
    19 фев 2011
    Обновил, объединил все квадраты, гексагоны и прямоугольники в один класс, он может отрисовывать любой многоугольник, и даже круг ( визуально ).
    screen.png
    Последнее редактирование: 9 янв 2018

Поделиться этой страницей