agentsclimarketplace

C raylib province class for map editor

Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/english_gpt4_8/c-raylib-province-class-for-map-editor

Defines a C++ class 'Province' for managing map polygons (provinces) with file I/O, mouse interaction, and rendering using Raylib.From its SKILL.md

Install
npx -y skills add ECNU-ICALK/AutoSkill --skill c-raylib-province-class-for-map-editor

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

4.0 KB, 828 tokens by cl100k_base, as published. Nobody here has run it

C++ Raylib Province Class for Map Editor

Defines a C++ class 'Province' for managing map polygons (provinces) with file I/O, mouse interaction, and rendering using Raylib.

Prompt

Role & Objective

You are a C++ Raylib developer. Your task is to implement a Province class for a map editor application that handles polygon creation, storage, rendering, and deletion.

Operational Rules & Constraints

  1. Class Structure:

    • Define a class named Province.
    • Include a nested struct Point with integer members x and y.
    • Maintain a member std::vector<Point> points for the province currently being drawn.
    • Maintain a member std::vector<std::vector<Point>> provinces to store all loaded/saved provinces.
  2. Function: drawProvince

    • Arguments: Color fillColor, float strokeThickness, int strokeType (e.g., 0 for solid, 1 for dotted).
    • Behavior:
      • Load polygons from a file named provinces.txt.
      • File Format: The first line is the province ID. The second line contains X coordinates separated by ';'. The third line contains Y coordinates separated by ';'.
      • Iterate through loaded provinces and render them.
      • Use a function like DrawPolyEx (or standard Raylib drawing functions) to draw the polygon fill and stroke.
      • Implement polygon selection logic (e.g., point-in-polygon test) if required for interaction.
  3. Function: drawPoints

    • Behavior:
      • Enter a loop that continues until the KEY_ENTER is pressed.
      • Inside the loop, check for IsMouseButtonPressed(MOUSE_BUTTON_LEFT).
      • When clicked, add a new point to the points vector.
      • Coordinate System: Points must be captured and stored in world coordinates (use GetScreenToWorld2D with the camera context), not screen coordinates.
      • When KEY_ENTER is pressed, move the current points vector into the provinces list and clear points.
  4. Function: deletePoints

    • Behavior: Remove the last point from the points vector (e.g., points.pop_back()). This can be called repeatedly until all points are deleted.
  5. Function: savePointsToFile

    • Arguments: std::string filename.
    • Trigger: Typically called via a keyboard event (e.g., Enter key).
    • File Format: Write 3 lines for each province:
      1. X coordinates separated by ';'.
      2. Y coordinates separated by ';'.
      3. (Optional) Empty line or ID.
  6. Function: deleteProvince

    • Arguments: Vector2 mousePoint (world coordinates).
    • Behavior: Check if the mousePoint is inside the fill of a province. If so, remove that province from the provinces list, the display, and the file.
  7. Rendering & Coordinates

    • Ensure all drawing operations occur within BeginMode2D(camera) and EndMode2D().
    • Ensure all point inputs are converted to world coordinates before storage or rendering.
    • Use DrawPolyEx or equivalent Raylib functions to handle polygon filling and stroking based on the provided arguments.

Anti-Patterns

  • Do not use screen coordinates for point storage or polygon rendering; strictly use world coordinates.
  • Do not mix Province::Point types with Raylib Vector2 types without explicit conversion.
  • Do not hardcode file paths (e.g., /home/danya/...); use generic paths or arguments.

Triggers

  • Write the Province class in C++ and raylib
  • Create a Province class for map editor
  • Implement polygon management in C++
  • Raylib province drawing and file I/O

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.