/* Copyright (C) 2024 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * 0 A.D. is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with 0 A.D. If not, see . */ #ifndef INCLUDED_MESSAGES #define INCLUDED_MESSAGES #include #include #include // Opens namespace AtlasMessage, closes it on second inclusion! #ifndef MESSAGES_SKIP_SETUP #include "MessagesSetup.h" #endif // TODO: organisation, documentation, etc #ifdef _MSC_VER // (can't use MSC_VERSION here since this file is included by Atlas too) #pragma warning(push) #pragma warning(disable: 4003) #endif ////////////////////////////////////////////////////////////////////////// // Initialise some engine code. Must be called before anything else. MESSAGE(Init, ); MESSAGE(InitAppWindow, ((void*, handle)) // Atlas Window handle. ); // Initialise SDL-related code. Must be called before SetCanvas and InitGraphics. MESSAGE(InitSDL, ); // Initialise graphics-related code. Must be called after the first SetCanvas, // and before much else. MESSAGE(InitGraphics, ); // Shut down engine/graphics code. MESSAGE(Shutdown, ); struct eRenderView { enum renderViews { NONE, GAME, ACTOR }; }; MESSAGE(RenderEnable, ((int, view)) // eRenderView ); // SetViewParam: used for hints to the renderer, e.g. to set wireframe mode; // unrecognised param names are ignored MESSAGE(SetViewParamB, ((int, view)) // eRenderView ((std::wstring, name)) ((bool, value)) ); MESSAGE(SetViewParamI, ((int, view)) // eRenderView ((std::wstring, name)) ((int, value)) ); MESSAGE(SetViewParamC, ((int, view)) // eRenderView ((std::wstring, name)) ((Color, value)) ); MESSAGE(SetViewParamS, ((int, view)) // eRenderView ((std::wstring, name)) ((std::wstring, value)) ); MESSAGE(JavaScript, ((std::string, command)) ); ////////////////////////////////////////////////////////////////////////// MESSAGE(GuiSwitchPage, ((std::wstring, page)) ); MESSAGE(GuiMouseButtonEvent, ((int, button)) ((bool, pressed)) ((Position, pos)) ((int, clicks)) ); MESSAGE(GuiMouseMotionEvent, ((Position, pos)) ); MESSAGE(GuiKeyEvent, ((int, sdlkey)) // SDLKey code ((int, unichar)) // Unicode character ((bool, pressed)) ); MESSAGE(GuiCharEvent, ((int, sdlkey)) ((int, unichar)) ); ////////////////////////////////////////////////////////////////////////// MESSAGE(SimStopMusic, ); MESSAGE(SimStateSave, ((std::wstring, label)) // named slot to store saved data ); MESSAGE(SimStateRestore, ((std::wstring, label)) // named slot to find saved data ); QUERY(SimStateDebugDump, ((bool, binary)) , ((std::wstring, dump)) ); MESSAGE(SimPlay, ((float, speed)) // 0 for pause, 1 for normal speed ((bool, simTest)) // true if we're in simulation test mode, false otherwise ); ////////////////////////////////////////////////////////////////////////// QUERY(Ping, , ); ////////////////////////////////////////////////////////////////////////// MESSAGE(SetCanvas, ((void*, canvas)) ((int, width)) ((int, height)) ); MESSAGE(ResizeScreen, ((int, width)) ((int, height)) ); QUERY(RenderLoop, , ((bool, wantHighFPS)) ((double, timeSinceActivity)) ); ////////////////////////////////////////////////////////////////////////// // Messages for map panel QUERY(GenerateMap, ((std::wstring, filename)) // random map script filename ((std::string, settings)) // map settings as JSON string , ((int, status)) ); MESSAGE(ImportHeightmap, ((std::wstring, filename)) ); MESSAGE(LoadMap, ((std::wstring, filename)) ); MESSAGE(SaveMap, ((std::wstring, filename)) ); QUERY(GetMapList, , ((std::vector, scenarioFilenames)) ((std::vector, skirmishFilenames)) ((std::vector, tutorialFilenames)) ); QUERY(GetMapSettings, , ((std::string, settings)) ); COMMAND(SetMapSettings, MERGE, ((std::string, settings)) ); MESSAGE(LoadPlayerSettings, ((bool, newplayers)) ); QUERY(GetMapSizes, , ((std::string, sizes)) ); QUERY(GetCurrentMapSize, , ((int, size)) ); QUERY(RasterizeMinimap, , ((int, dimension)) ((std::vector, imageBytes)) ); QUERY(GetRMSData, , ((std::vector, data)) ); QUERY(ExpandBiomes, , ((std::vector, biomes)) ); COMMAND(ResizeMap, NOMERGE, ((int, tiles)) ((int, offsetX)) ((int, offsetY)) ); QUERY(VFSFileExists, ((std::wstring, path)) , ((bool, exists)) ); QUERY(VFSFileRealPath, ((std::wstring, path)) , ((std::wstring, realPath)) ); ////////////////////////////////////////////////////////////////////////// // Messages for player panel QUERY(GetCivData, , ((std::vector>, data)) ); QUERY(GetVictoryConditionData, , ((std::vector, data)) ); QUERY(GetPlayerDefaults, , ((std::string, defaults)) ); QUERY(GetAIData, , ((std::string, data)) ); ////////////////////////////////////////////////////////////////////////// MESSAGE(RenderStyle, ((bool, wireframe)) ); MESSAGE(MessageTrace, ((bool, enable)) ); MESSAGE(Screenshot, ((bool, big)) ); ////////////////////////////////////////////////////////////////////////// MESSAGE(Brush, ((int, width)) // number of vertices ((int, height)) ((std::vector, data)) // width*height array ); MESSAGE(BrushPreview, ((bool, enable)) ((Position, pos)) // only used if enable==true ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// QUERY(GetTerrainGroups, , // no inputs ((std::vector, groupNames)) ); QUERY(GetTerrainGroupTextures, ((std::wstring, groupName)), ((std::vector, names)) ); #ifndef MESSAGES_SKIP_STRUCTS struct sTerrainTexturePreview { Shareable name; Shareable loaded; Shareable imageWidth; Shareable imageHeight; Shareable> imageData; // RGB*width*height }; SHAREABLE_STRUCT(sTerrainTexturePreview); #endif QUERY(GetTerrainGroupPreviews, ((std::wstring, groupName)) ((int, imageWidth)) ((int, imageHeight)) , ((std::vector, previews)) ); QUERY(GetTerrainPassabilityClasses, , // no inputs ((std::vector, classNames)) ); QUERY(GetTerrainTexturePreview, ((std::wstring, name)) ((int, imageWidth)) ((int, imageHeight)) , ((sTerrainTexturePreview, preview)) ); ////////////////////////////////////////////////////////////////////////// #ifndef MESSAGES_SKIP_STRUCTS struct sObjectsListItem { Shareable id; Shareable name; Shareable type; // 0 = entity, 1 = actor }; SHAREABLE_STRUCT(sObjectsListItem); #endif QUERY(GetObjectsList, , // no inputs ((std::vector, objects)) // sorted by .name ); #ifndef MESSAGES_SKIP_STRUCTS struct sObjectSettings { Shareable player; Shareable > selections; // Some settings are immutable and therefore are ignored (and should be left // empty) when passed from the editor to the game: Shareable > > variantGroups; }; SHAREABLE_STRUCT(sObjectSettings); #endif // transform de local entity to a real entity MESSAGE(ObjectPreviewToEntity,); //Query for get selected objects QUERY(GetCurrentSelection, , //No inputs ((std::vector, ids)) ); // Moving Preview(s) object together, default is using the firs element in vector MESSAGE(MoveObjectPreview, ((Position,pos)) ); // Preview object in the game world - creates a temporary unit at the given // position, and removes it when the preview is next changed MESSAGE(ObjectPreview, ((std::wstring, id)) // or empty string => disable ((sObjectSettings, settings)) ((Position, pos)) ((bool, usetarget)) // true => use 'target' for orientation; false => use 'angle' ((Position, target)) ((float, angle)) ((unsigned int, actorseed)) ((bool, cleanObjectPreviews)) ); COMMAND(CreateObject, NOMERGE, ((std::wstring, id)) ((sObjectSettings, settings)) ((Position, pos)) ((bool, usetarget)) // true => use 'target' for orientation; false => use 'angle' ((Position, target)) ((float, angle)) ((unsigned int, actorseed)) ); // Set an actor to be previewed on its own (i.e. without the game world). // (Use RenderEnable to make it visible.) MESSAGE(SetActorViewer, ((std::wstring, id)) ((std::string, animation)) ((int, playerID)) ((float, speed)) ((bool, flushcache)) // true => unload all actor files before starting the preview (because we don't have proper hotloading yet) ); ////////////////////////////////////////////////////////////////////////// QUERY(Exit,,); // no inputs nor outputs ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// struct eScrollConstantDir { enum { FORWARDS, BACKWARDS, LEFT, RIGHT, CLOCKWISE, ANTICLOCKWISE }; }; MESSAGE(ScrollConstant, // set a constant scrolling(/rotation) rate ((int, view)) // eRenderView ((int, dir)) // eScrollConstantDir ((float, speed)) // set speed 0.0f to stop scrolling ); struct eScrollType { enum { FROM, TO }; }; MESSAGE(Scroll, // for scrolling by dragging the mouse FROM somewhere TO elsewhere ((int, view)) // eRenderView ((int, type)) // eScrollType ((Position, pos)) ); MESSAGE(SmoothZoom, ((int, view)) // eRenderView ((float, amount)) ); struct eRotateAroundType { enum { FROM, TO }; }; MESSAGE(RotateAround, ((int, view)) // eRenderView ((int, type)) // eRotateAroundType ((Position, pos)) ); MESSAGE(LookAt, ((int, view)) // eRenderView ((Position, pos)) ((Position, target)) ); MESSAGE(CameraReset, ); QUERY(GetView, , ((sCameraInfo, info)) ); MESSAGE(SetView, ((sCameraInfo, info)) ); ////////////////////////////////////////////////////////////////////////// #ifndef MESSAGES_SKIP_STRUCTS struct sEnvironmentSettings { Shareable watertype; // range 0..1 corresponds to min..max terrain height; out-of-bounds values allowed Shareable waterheight; // range 0..1 corresponds to min..max terrain height; out-of-bounds values allowed Shareable waterwaviness; // range ??? Shareable watermurkiness; // range ??? Shareable windangle; Shareable watercolor; Shareable watertint; Shareable sunrotation; // range -pi..+pi Shareable sunelevation; // range -pi/2 .. +pi/2 // emulate 'HDR' by allowing overly bright suncolor. this is // multiplied on to suncolor after converting to float // (struct Color stores as normal u8, 0..255) Shareable sunoverbrightness; // range 1..3 // support different lighting models ("old" for the version compatible with old scenarios, // "standard" for the new normal model that supports much brighter lighting) Shareable posteffect; Shareable skyset; Shareable suncolor; Shareable ambientcolor; Shareable fogcolor; Shareable fogfactor; Shareable fogmax; Shareable brightness; Shareable contrast; Shareable saturation; Shareable bloom; }; SHAREABLE_STRUCT(sEnvironmentSettings); #endif QUERY(GetEnvironmentSettings, // no inputs , ((sEnvironmentSettings, settings)) ); COMMAND(SetEnvironmentSettings, MERGE, // merge lots of small changes into one undoable command ((sEnvironmentSettings, settings)) ); COMMAND(RecalculateWaterData, NOMERGE, ((float, unused))); COMMAND(PickWaterHeight, NOMERGE, ((Position, screenPos))); QUERY(GetSkySets, // no inputs , ((std::vector, skysets)) ); QUERY(GetPostEffects, // no inputs , ((std::vector, posteffects)) ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// COMMAND(AlterElevation, MERGE, ((Position, pos)) ((float, amount)) ); COMMAND(SmoothElevation, MERGE, ((Position, pos)) ((float, amount)) ); COMMAND(FlattenElevation, MERGE, ((Position, pos)) ((float, amount)) ); COMMAND(PikeElevation, MERGE, ((Position, pos)) ((float, amount)) ); struct ePaintTerrainPriority { enum { HIGH, LOW }; }; COMMAND(PaintTerrain, MERGE, ((Position, pos)) ((std::wstring, texture)) ((int, priority)) // ePaintTerrainPriority ); COMMAND(ReplaceTerrain, NOMERGE, ((Position, pos)) ((std::wstring, texture)) ); COMMAND(FillTerrain, NOMERGE, ((Position, pos)) ((std::wstring, texture)) ); QUERY(GetTerrainTexture, ((Position, pos)) , ((std::wstring, texture)) ); ////////////////////////////////////////////////////////////////////////// QUERY(PickObject, ((Position, pos)) ((bool, selectActors)) , ((ObjectID, id)) ((int, offsetx)) // offset of object centre from input position ((int, offsety)) // ); QUERY(PickObjectsInRect, ((Position, start)) ((Position, end)) ((bool, selectActors)) , ((std::vector, ids)) ); QUERY(PickSimilarObjects, ((ObjectID, id)) , ((std::vector, ids)) ); MESSAGE(ResetSelectionColor, ); COMMAND(MoveObjects, MERGE, ((std::vector, ids)) ((ObjectID, pivot)) ((Position, pos)) ); COMMAND(RotateObjectsFromCenterPoint, MERGE, ((std::vector, ids)) ((Position, target)) ((bool, rotateObject)) ); COMMAND(RotateObject, MERGE, ((std::vector, ids)) ((Position, target)) ); COMMAND(DeleteObjects, NOMERGE, ((std::vector, ids)) ); MESSAGE(SetSelectionPreview, ((std::vector, ids)) ); QUERY(GetObjectSettings, ((int, view)) // eRenderView ((ObjectID, id)) , ((sObjectSettings, settings)) ); COMMAND(SetObjectSettings, NOMERGE, ((int, view)) // eRenderView ((ObjectID, id)) ((sObjectSettings, settings)) ); QUERY(GetObjectMapSettings, ((std::vector, ids)) , ((std::wstring, xmldata)) ); QUERY(GetPlayerObjects, ((int, player)) , ((std::vector, ids)) ); MESSAGE(SetBandbox, ((bool, show)) ((int, sx0)) ((int, sy0)) ((int, sx1)) ((int, sy1)) ); ////////////////////////////////////////////////////////////////////////// QUERY(GetCinemaPaths, , // no inputs ((std::vector , paths)) ); QUERY(GetCameraInfo, , ((AtlasMessage::sCameraInfo, info)) ); QUERY(PickPathNode, ((Position, pos)) , ((AtlasMessage::sCinemaPathNode, node)) ); QUERY(PickAxis, ((AtlasMessage::sCinemaPathNode, node)) ((Position, pos)) , ((int, axis)) ); COMMAND(AddPathNode, NOMERGE, ((AtlasMessage::sCinemaPathNode, node)) ); COMMAND(DeletePathNode, NOMERGE, ((AtlasMessage::sCinemaPathNode, node)) ); COMMAND(MovePathNode, NOMERGE, ((AtlasMessage::sCinemaPathNode, node)) ((int, axis)) ((Position, from)) ((Position, to)) ); COMMAND(AddCinemaPath, NOMERGE, ((std::wstring, pathName))); COMMAND(DeleteCinemaPath, NOMERGE, ((std::wstring, pathName))); COMMAND(SetCinemaPaths, NOMERGE, ((std::vector, paths)) ); COMMAND(SetCinemaPathsDrawing, NOMERGE, ((bool, drawPaths))); MESSAGE(CinemaEvent, ((std::wstring, path)) ((int, mode)) ((float, t)) ((bool, drawCurrent)) ((bool, lines)) ); MESSAGE(ClearPathNodePreview,); ////////////////////////////////////////////////////////////////////////// QUERY(GetSelectedObjectsTemplateNames, ((std::vector, ids)) , ((std::vector, names)) ); #ifdef _MSC_VER #pragma warning(pop) #endif #ifndef MESSAGES_SKIP_SETUP #include "MessagesSetup.h" #endif #endif // INCLUDED_MESSAGES