Coder Social home page Coder Social logo

kristoisberg / samp-td-streamer Goto Github PK

View Code? Open in Web Editor NEW
8.0 2.0 1.0 79 KB

Library for working around the hardcoded textdraw limits in open.mp and SA-MP.

Pawn 100.00%
sa-mp sa-mp-library pawn pawn-package textdraws streamer limit-removing

samp-td-streamer's Introduction

TextDraw Streamer* - No more textdraw limits!

sampctl

Notice: This repository is not being actively maintained anymore. If anyone wishes to continue the development of the project, please create a fork of the repository and release future versions there.

This library removes the limits on how many textdraws can be created at the same time (2048 global and 256 per-player textdraws as of 0.3.7 and 0.3.DL). The library works by only creating the textdraws when they are visible for anyone. This is a rewrite of the PlayerTextDrawStreamer include, originally created by theYiin and later maintained by me. Some benefits over the old include:

  • Support for global textdraws.
  • No limits at all - the old include used static arrays meaning that the limits were still there, they were just higher. This library uses PawnPlus for dynamic containers and dynamically allocated strings, meaning that there is no limit on how many textdraws can be created.
  • Smaller footprint on the binary size - Again, static arrays are replaced with dynamic memory, the old include increased the binary size by several megabytes and also increased the compilation time drastically, compared to this the footprint of this library is almost non-existent.

* - Technically, this library does not do any streaming. However, in the SA-MP community, the name "streamer" is often associated with something that removes hardcoded limits from something, therefore this name is used to help people find the library.

Installation

Simply install to your project:

sampctl package install kristoisberg/samp-td-streamer

To use the streamer for global textdraws, include the following file:

#include <td-streamer-global>

To use the streamer for per-player textdraws, include the following file:

#include <td-streamer-player>

If you wish to use it for both, you can either include both of the previous files or simply include:

#include <td-streamer>

Notes: This library must be the first one to hook any textdraw-related functions, otherwise a compile time error will be thrown. Neither should any textdraw-related functions or callbacks be used before the inclusion of this library. If YSF or SKY are used, they must be included before this library.

Usage

The include is completely plug & play, after being installed properly it should automatically do its job.

Functions

The following functions are either modified or added by this library:

td-streamer-global.inc

Text:TextDrawCreate(Float:x, Float:y, const text[]);
Text:TextDrawCreateStr(Float:x, Float:y, String:text);
IsValidTextDraw(Text:text);
TextDrawDestroy(Text:text);
TextDrawShowForPlayer(playerid, Text:text);
TextDrawHideForPlayer(playerid, Text:text);
TextDrawShowForAll(Text:text);
TextDrawHideForAll(Text:text);
IsTextDrawVisibleForPlayer(playerid, Text:text);
IsTextDrawVisibleForAnyone(Text:text);
TextDrawSetString(Text:text, const string[]);
TextDrawGetString(Text:text, string[], len = sizeof(string));
TextDrawSetStringStr(Text:text, String:string);
String:TextDrawGetStringStr(Text:text);
TextDrawSetPos(Text:text, Float:x, Float:y); // TextDrawSetPosition also works if SKY is included
TextDrawGetPos(Text:text, &Float:x, &Float:y);
TextDrawLetterSize(Text:text, Float:x, Float:y);
TextDrawGetLetterSize(Text:text, &Float:x, &Float:y);
TextDrawTextSize(Text:text, Float:x, Float:y);
TextDrawGetTextSize(Text:text, &Float:x, &Float:y);
TextDrawColor(Text:text, color);
TextDrawGetColor(Text:text);
TextDrawBoxColor(Text:text, color);
TextDrawGetBoxColor(Text:text);
TextDrawBackgroundColor(Text:text, color);
TextDrawGetBackgroundColor(Text:text);
TextDrawSetShadow(Text:text, size);
TextDrawGetShadow(Text:text);
TextDrawSetOutline(Text:text, size);
TextDrawGetOutline(Text:text);
TextDrawFont(Text:text, font);
TextDrawGetFont(Text:text);
TextDrawUseBox(Text:text, use);
TextDrawIsBox(Text:text);
TextDrawSetProportional(Text:text, set);
TextDrawIsProportional(Text:text);
TextDrawSetSelectable(Text:text, set);
TextDrawIsSelectable(Text:text);
TextDrawAlignment(Text:text, alignment);
TextDrawGetAlignment(Text:text);
TextDrawSetPreviewModel(Text:text, model);
TextDrawGetPreviewModel(Text:text);
TextDrawSetPreviewRot(Text:text, Float:x, Float:y, Float:z, Float:zoom = 1.0);
TextDrawGetPreviewRot(Text:text, &Float:x, &Float:y, &Float:z, &Float:zoom);
TextDrawSetPreviewVehCol(Text:text, color1, color2);
TextDrawGetPreviewVehCol(Text:text, &color1, &color2);
TextDrawSetExtraID(Text:text, extra1, extra2 = INVALID_TEXTDRAW_EXTRA_ID);
TextDrawGetExtraID(Text:text, &extra1, &extra2 = INVALID_TEXTDRAW_EXTRA_ID);

td-streamer-player.inc

PlayerText:CreatePlayerTextDraw(playerid, Float:x, Float:y, const text[]);
PlayerText:CreatePlayerTextDrawStr(playerid, Float:x, Float:y, String:text);
PlayerTextDrawDestroy(playerid, PlayerText:text);
PlayerTextDrawShow(playerid, PlayerText:text);
PlayerTextDrawHide(playerid, PlayerText:text);
IsPlayerTextDrawVisible(playerid, PlayerText:text);
PlayerTextDrawSetString(playerid, PlayerText:text, const string[]);
PlayerTextDrawGetString(playerid, PlayerText:text, string[], len = sizeof(string));
PlayerTextDrawSetStringStr(playerid, PlayerText:text, String:string);
String:PlayerTextDrawGetStringStr(playerid, PlayerText:text);
PlayerTextDrawSetPos(playerid, PlayerText:text, Float:x, Float:y); // PlayerTextDrawSetPosition also works if SKY is included
PlayerTextDrawGetPos(playerid, PlayerText:text, &Float:x, &Float:y);
PlayerTextDrawLetterSize(playerid, PlayerText:text, Float:x, Float:y);
PlayerTextDrawGetLetterSize(playerid, PlayerText:text, &Float:x, &Float:y);
PlayerTextDrawTextSize(playerid, PlayerText:text, Float:x, Float:y);
PlayerTextDrawGetTextSize(playerid, PlayerText:text, &Float:x, &Float:y);
PlayerTextDrawColor(playerid, PlayerText:text, color);
PlayerTextDrawGetColor(playerid, PlayerText:text);
PlayerTextDrawBoxColor(playerid, PlayerText:text, color);
PlayerTextDrawGetBoxColor(playerid, PlayerText:text);
PlayerTextDrawBackgroundColor(playerid, PlayerText:text, color);
PlayerTextDrawGetBackgroundColor(playerid, PlayerText:text);
PlayerTextDrawSetShadow(playerid, PlayerText:text, size);
PlayerTextDrawGetShadow(playerid, PlayerText:text);
PlayerTextDrawSetOutline(playerid, PlayerText:text, size);
PlayerTextDrawGetOutline(playerid, PlayerText:text);
PlayerTextDrawFont(playerid, PlayerText:text, font);
PlayerTextDrawGetFont(playerid, PlayerText:text);
PlayerTextDrawUseBox(playerid, PlayerText:text, use);
PlayerTextDrawIsBox(playerid, PlayerText:text);
PlayerTextDrawSetProportional(playerid, PlayerText:text, set);
PlayerTextDrawIsProportional(playerid, PlayerText:text);
PlayerTextDrawSetSelectable(playerid, PlayerText:text, set);
PlayerTextDrawIsSelectable(playerid, PlayerText:text);
PlayerTextDrawAlignment(playerid, PlayerText:text, alignment);
PlayerTextDrawGetAlignment(playerid, PlayerText:text);
PlayerTextDrawSetPreviewModel(playerid, PlayerText:text, model);
PlayerTextDrawGetPreviewModel(playerid, PlayerText:text);
PlayerTextDrawSetPreviewRot(playerid, PlayerText:text, Float:x, Float:y, Float:z, Float:zoom = 1.0);
PlayerTextDrawGetPreviewRot(playerid, PlayerText:text, &Float:x, &Float:y, &Float:z, &Float:zoom);
PlayerTextDrawSetPreviewVehCol(playerid, PlayerText:text, color1, color2);
PlayerTextDrawGetPreviewVehCol(playerid, PlayerText:text, &color1, &color2);
PlayerTextDrawSetExtraID(playerid, PlayerText:text, extra1, extra2 = INVALID_TEXTDRAW_EXTRA_ID);
PlayerTextDrawGetExtraID(playerid, PlayerText:text, &extra1, &extra2 = INVALID_TEXTDRAW_EXTRA_ID);

Testing

The test.pwn file contains automated tests and a test script using MSelect by Open-GTO. To test, simply run the package:

sampctl package run

samp-td-streamer's People

Contributors

kristoisberg-icefire avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

cantbekarma

samp-td-streamer's Issues

Rewrite include to use pools instead of lists

PawnPlus will introduce a new dynamic data structure, Pools, which is made for efficiently allocating and deallocating objects without invalidating indexes and leaving gaps in between, which this include already emulates with lists and VAR_NULL.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.