Compare commits

..

3 Commits

Author SHA1 Message Date
Vladislav Khorev
472bfb3e22 Somehow it is working 2026-08-02 21:45:49 +03:00
Vladislav Khorev
6d3e1bf1ee ios fixing SDL2 version 2026-08-02 20:36:10 +03:00
Vladislav Khorev
b8401519d5 Working on ios version 2026-08-02 20:10:34 +03:00
26 changed files with 1196 additions and 290 deletions

3
.gitignore vendored
View File

@ -414,3 +414,6 @@ android_resources/
.artifacts/
*.zip
.DS_Store

View File

@ -25,7 +25,7 @@ macro(check_and_download URL ARCHIVE_NAME EXTRACTED_DIR_NAME CHECK_FILE)
endmacro()
# 1) ZLIB (Нужна только для инклудов, если не используете emscripten порты)
check_and_download("https://github.com/madler/zlib/releases/download/v1.3.2/zlib132.zip" "zlib132.zip" "zlib-1.3.2" "CMakeLists.txt")
check_and_download("https://www.zlib.net/zlib132.zip" "zlib132.zip" "zlib-1.3.2" "CMakeLists.txt")
# 2) SDL2
check_and_download("https://github.com/libsdl-org/SDL/archive/refs/tags/release-2.32.10.zip" "release-2.32.10.zip" "SDL-release-2.32.10" "CMakeLists.txt")

63
proj-ios/.gitignore vendored Normal file
View File

@ -0,0 +1,63 @@
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## Obj-C/Swift specific
*.hmap
## App packaging
*.ipa
*.dSYM.zip
*.dSYM
## Playgrounds
timeline.xctimeline
playground.xcworkspace
# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm
.build/
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build/
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output

99
proj-ios/fetch_dependencies.sh Executable file
View File

@ -0,0 +1,99 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
THIRDPARTY_DIR="$PROJECT_ROOT/thirdparty"
mkdir -p "$THIRDPARTY_DIR"
echo "=========================================="
echo "Fetching Dependencies into: $THIRDPARTY_DIR"
echo "=========================================="
download_and_extract() {
local name="$1"
local url="$2"
local archive_name="$3"
local target_dir_name="$4"
local archive_path="$THIRDPARTY_DIR/$archive_name"
local target_path="$THIRDPARTY_DIR/$target_dir_name"
if [ -d "$target_path" ]; then
echo "[$name] Already extracted in $target_path. Skipping."
return 0
fi
if [ ! -f "$archive_path" ]; then
echo "[$name] Downloading $archive_name to $THIRDPARTY_DIR ..."
curl -L "$url" -o "$archive_path"
else
echo "[$name] Archive $archive_name already exists in $THIRDPARTY_DIR."
fi
echo "[$name] Extracting $archive_name ..."
if [[ "$archive_name" == *.tar.gz ]] || [[ "$archive_name" == *.tgz ]]; then
if ! tar -xzf "$archive_path" -C "$THIRDPARTY_DIR"; then
echo "[$name] Extraction failed! Removing corrupt archive $archive_path."
rm -f "$archive_path"
exit 1
fi
elif [[ "$archive_name" == *.tar.bz2 ]]; then
if ! tar -xjf "$archive_path" -C "$THIRDPARTY_DIR"; then
echo "[$name] Extraction failed! Removing corrupt archive $archive_path."
rm -f "$archive_path"
exit 1
fi
elif [[ "$archive_name" == *.zip ]]; then
if ! unzip -q "$archive_path" -d "$THIRDPARTY_DIR"; then
echo "[$name] Extraction failed! Removing corrupt archive $archive_path."
rm -f "$archive_path"
exit 1
fi
fi
echo "[$name] Unpacked successfully."
}
# 1. zlib
download_and_extract \
"zlib" \
"https://github.com/madler/zlib/archive/refs/tags/v1.3.1.tar.gz" \
"zlib-1.3.1.tar.gz" \
"zlib-1.3.1"
# 2. bzip2
download_and_extract \
"bzip2" \
"https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz" \
"bzip2-1.0.8.tar.gz" \
"bzip2-1.0.8"
# 3. libpng
download_and_extract \
"libpng" \
"https://downloads.sourceforge.net/project/libpng/libpng16/1.6.43/libpng-1.6.43.tar.gz" \
"libpng-1.6.43.tar.gz" \
"libpng-1.6.43"
# 4. libzip
download_and_extract \
"libzip" \
"https://github.com/nih-at/libzip/releases/download/v1.10.1/libzip-1.10.1.tar.gz" \
"libzip-1.10.1.tar.gz" \
"libzip-1.10.1"
# 5. Boost
download_and_extract \
"Boost" \
"https://archives.boost.io/release/1.84.0/source/boost_1_84_0.tar.gz" \
"boost_1_84_0.tar.gz" \
"boost_1_84_0"
echo "=========================================="
echo "All dependencies downloaded and unpacked!"
echo "=========================================="

View File

@ -0,0 +1,542 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
CE802FFF301FBF0700EB3FA5 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FF1301FBF0700EB3FA5 /* compress.c */; };
CE803000301FBF0700EB3FA5 /* infback.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FF8301FBF0700EB3FA5 /* infback.c */; };
CE803002301FBF0700EB3FA5 /* trees.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FFC301FBF0700EB3FA5 /* trees.c */; };
CE803003301FBF0700EB3FA5 /* inftrees.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FFB301FBF0700EB3FA5 /* inftrees.c */; };
CE803004301FBF0700EB3FA5 /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FF3301FBF0700EB3FA5 /* deflate.c */; };
CE803008301FBF0700EB3FA5 /* inflate.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FFA301FBF0700EB3FA5 /* inflate.c */; };
CE803009301FBF0700EB3FA5 /* inffast.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FF9301FBF0700EB3FA5 /* inffast.c */; };
CE80300A301FBF0700EB3FA5 /* uncompr.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FFD301FBF0700EB3FA5 /* uncompr.c */; };
CE80300B301FBF0700EB3FA5 /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FF0301FBF0700EB3FA5 /* adler32.c */; };
CE80300C301FBF0700EB3FA5 /* zutil.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FFE301FBF0700EB3FA5 /* zutil.c */; };
CE80300D301FBF0700EB3FA5 /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = CE802FF2301FBF0700EB3FA5 /* crc32.c */; };
CE80301F301FC03F00EB3FA5 /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = CE803013301FC03F00EB3FA5 /* pngpread.c */; };
CE803021301FC03F00EB3FA5 /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = CE80301E301FC03F00EB3FA5 /* pngwutil.c */; };
CE803022301FC03F00EB3FA5 /* pngerror.c in Sources */ = {isa = PBXBuildFile; fileRef = CE803010301FC03F00EB3FA5 /* pngerror.c */; };
CE803023301FC03F00EB3FA5 /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = CE80301B301FC03F00EB3FA5 /* pngwio.c */; };
CE803024301FC03F00EB3FA5 /* pngmem.c in Sources */ = {isa = PBXBuildFile; fileRef = CE803012301FC03F00EB3FA5 /* pngmem.c */; };
CE803025301FC03F00EB3FA5 /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = CE803011301FC03F00EB3FA5 /* pngget.c */; };
CE803026301FC03F00EB3FA5 /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = CE80301D301FC03F00EB3FA5 /* pngwtran.c */; };
CE803027301FC03F00EB3FA5 /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = CE803014301FC03F00EB3FA5 /* pngread.c */; };
CE803028301FC03F00EB3FA5 /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = CE803016301FC03F00EB3FA5 /* pngrtran.c */; };
CE803029301FC03F00EB3FA5 /* pngset.c in Sources */ = {isa = PBXBuildFile; fileRef = CE803018301FC03F00EB3FA5 /* pngset.c */; };
CE80302A301FC03F00EB3FA5 /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = CE80301A301FC03F00EB3FA5 /* pngtrans.c */; };
CE80302B301FC03F00EB3FA5 /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = CE80301C301FC03F00EB3FA5 /* pngwrite.c */; };
CE80302C301FC03F00EB3FA5 /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = CE803017301FC03F00EB3FA5 /* pngrutil.c */; };
CE80302D301FC03F00EB3FA5 /* pngrio.c in Sources */ = {isa = PBXBuildFile; fileRef = CE803015301FC03F00EB3FA5 /* pngrio.c */; };
CE803030301FC0E600EB3FA5 /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = CE80302F301FC0E600EB3FA5 /* png.c */; };
CE803032301FC79A00EB3FA5 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE803031301FC79A00EB3FA5 /* OpenGLES.framework */; };
CEFECA7E301FB69D00FBB2C4 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEFECA6A301FB5DF00FBB2C4 /* SDL2.framework */; };
CEFECA7F301FB69D00FBB2C4 /* SDL2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CEFECA6A301FB5DF00FBB2C4 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
CEFECA69301FB5DF00FBB2C4 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = CEFECA57301FB5DE00FBB2C4 /* SDL.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = A7D88B5423E2437C00DCD162;
remoteInfo = "Framework-iOS";
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
CEFECA80301FB69D00FBB2C4 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
CEFECA7F301FB69D00FBB2C4 /* SDL2.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
CE802FF0301FBF0700EB3FA5 /* adler32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/adler32.c"; sourceTree = "<absolute>"; };
CE802FF1301FBF0700EB3FA5 /* compress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = compress.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/compress.c"; sourceTree = "<absolute>"; };
CE802FF2301FBF0700EB3FA5 /* crc32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/crc32.c"; sourceTree = "<absolute>"; };
CE802FF3301FBF0700EB3FA5 /* deflate.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/deflate.c"; sourceTree = "<absolute>"; };
CE802FF8301FBF0700EB3FA5 /* infback.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = infback.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/infback.c"; sourceTree = "<absolute>"; };
CE802FF9301FBF0700EB3FA5 /* inffast.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inffast.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/inffast.c"; sourceTree = "<absolute>"; };
CE802FFA301FBF0700EB3FA5 /* inflate.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inflate.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/inflate.c"; sourceTree = "<absolute>"; };
CE802FFB301FBF0700EB3FA5 /* inftrees.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = inftrees.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/inftrees.c"; sourceTree = "<absolute>"; };
CE802FFC301FBF0700EB3FA5 /* trees.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = trees.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/trees.c"; sourceTree = "<absolute>"; };
CE802FFD301FBF0700EB3FA5 /* uncompr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = uncompr.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/uncompr.c"; sourceTree = "<absolute>"; };
CE802FFE301FBF0700EB3FA5 /* zutil.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = zutil.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/zlib-1.3.1/zutil.c"; sourceTree = "<absolute>"; };
CE803010301FC03F00EB3FA5 /* pngerror.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngerror.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngerror.c"; sourceTree = "<absolute>"; };
CE803011301FC03F00EB3FA5 /* pngget.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngget.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngget.c"; sourceTree = "<absolute>"; };
CE803012301FC03F00EB3FA5 /* pngmem.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngmem.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngmem.c"; sourceTree = "<absolute>"; };
CE803013301FC03F00EB3FA5 /* pngpread.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngpread.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngpread.c"; sourceTree = "<absolute>"; };
CE803014301FC03F00EB3FA5 /* pngread.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngread.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngread.c"; sourceTree = "<absolute>"; };
CE803015301FC03F00EB3FA5 /* pngrio.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrio.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngrio.c"; sourceTree = "<absolute>"; };
CE803016301FC03F00EB3FA5 /* pngrtran.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrtran.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngrtran.c"; sourceTree = "<absolute>"; };
CE803017301FC03F00EB3FA5 /* pngrutil.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrutil.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngrutil.c"; sourceTree = "<absolute>"; };
CE803018301FC03F00EB3FA5 /* pngset.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngset.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngset.c"; sourceTree = "<absolute>"; };
CE80301A301FC03F00EB3FA5 /* pngtrans.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngtrans.c"; sourceTree = "<absolute>"; };
CE80301B301FC03F00EB3FA5 /* pngwio.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwio.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngwio.c"; sourceTree = "<absolute>"; };
CE80301C301FC03F00EB3FA5 /* pngwrite.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwrite.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngwrite.c"; sourceTree = "<absolute>"; };
CE80301D301FC03F00EB3FA5 /* pngwtran.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwtran.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngwtran.c"; sourceTree = "<absolute>"; };
CE80301E301FC03F00EB3FA5 /* pngwutil.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwutil.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/pngwutil.c"; sourceTree = "<absolute>"; };
CE80302F301FC0E600EB3FA5 /* png.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = png.c; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/libpng-1.6.43/png.c"; sourceTree = "<absolute>"; };
CE803031301FC79A00EB3FA5 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
CEFECA3C301FB52F00FBB2C4 /* shadowoverbishkek.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = shadowoverbishkek.app; sourceTree = BUILT_PRODUCTS_DIR; };
CEFECA57301FB5DE00FBB2C4 /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = "/Users/user/Projects/shadow-over-bishkek001/thirdparty/SDL-release-2.32.10/Xcode/SDL/SDL.xcodeproj"; sourceTree = "<absolute>"; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
CEFECA3E301FB52F00FBB2C4 /* shadowoverbishkek */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = shadowoverbishkek;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
CEFECA39301FB52F00FBB2C4 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CEFECA7E301FB69D00FBB2C4 /* SDL2.framework in Frameworks */,
CE803032301FC79A00EB3FA5 /* OpenGLES.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
CE802FEF301FBEDA00EB3FA5 /* zlib */ = {
isa = PBXGroup;
children = (
CE802FF0301FBF0700EB3FA5 /* adler32.c */,
CE802FF1301FBF0700EB3FA5 /* compress.c */,
CE802FF2301FBF0700EB3FA5 /* crc32.c */,
CE802FF3301FBF0700EB3FA5 /* deflate.c */,
CE802FF8301FBF0700EB3FA5 /* infback.c */,
CE802FF9301FBF0700EB3FA5 /* inffast.c */,
CE802FFA301FBF0700EB3FA5 /* inflate.c */,
CE802FFB301FBF0700EB3FA5 /* inftrees.c */,
CE802FFC301FBF0700EB3FA5 /* trees.c */,
CE802FFD301FBF0700EB3FA5 /* uncompr.c */,
CE802FFE301FBF0700EB3FA5 /* zutil.c */,
);
path = zlib;
sourceTree = "<group>";
};
CE80300F301FBFC600EB3FA5 /* libpng */ = {
isa = PBXGroup;
children = (
CE803010301FC03F00EB3FA5 /* pngerror.c */,
CE803011301FC03F00EB3FA5 /* pngget.c */,
CE803012301FC03F00EB3FA5 /* pngmem.c */,
CE803013301FC03F00EB3FA5 /* pngpread.c */,
CE803014301FC03F00EB3FA5 /* pngread.c */,
CE803015301FC03F00EB3FA5 /* pngrio.c */,
CE803016301FC03F00EB3FA5 /* pngrtran.c */,
CE803017301FC03F00EB3FA5 /* pngrutil.c */,
CE803018301FC03F00EB3FA5 /* pngset.c */,
CE80301A301FC03F00EB3FA5 /* pngtrans.c */,
CE80301B301FC03F00EB3FA5 /* pngwio.c */,
CE80301C301FC03F00EB3FA5 /* pngwrite.c */,
CE80301D301FC03F00EB3FA5 /* pngwtran.c */,
CE80301E301FC03F00EB3FA5 /* pngwutil.c */,
CE80302F301FC0E600EB3FA5 /* png.c */,
);
path = libpng;
sourceTree = "<group>";
};
CEFECA33301FB52F00FBB2C4 = {
isa = PBXGroup;
children = (
CE80300F301FBFC600EB3FA5 /* libpng */,
CE802FEF301FBEDA00EB3FA5 /* zlib */,
CEFECA57301FB5DE00FBB2C4 /* SDL.xcodeproj */,
CEFECA3E301FB52F00FBB2C4 /* shadowoverbishkek */,
CEFECA7D301FB69D00FBB2C4 /* Frameworks */,
CEFECA3D301FB52F00FBB2C4 /* Products */,
);
sourceTree = "<group>";
};
CEFECA3D301FB52F00FBB2C4 /* Products */ = {
isa = PBXGroup;
children = (
CEFECA3C301FB52F00FBB2C4 /* shadowoverbishkek.app */,
);
name = Products;
sourceTree = "<group>";
};
CEFECA5A301FB5DF00FBB2C4 /* Products */ = {
isa = PBXGroup;
children = (
CEFECA6A301FB5DF00FBB2C4 /* SDL2.framework */,
);
name = Products;
sourceTree = "<group>";
};
CEFECA7D301FB69D00FBB2C4 /* Frameworks */ = {
isa = PBXGroup;
children = (
CE803031301FC79A00EB3FA5 /* OpenGLES.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
CEFECA3B301FB52F00FBB2C4 /* shadowoverbishkek */ = {
isa = PBXNativeTarget;
buildConfigurationList = CEFECA52301FB53200FBB2C4 /* Build configuration list for PBXNativeTarget "shadowoverbishkek" */;
buildPhases = (
CEFECA38301FB52F00FBB2C4 /* Sources */,
CEFECA39301FB52F00FBB2C4 /* Frameworks */,
CEFECA3A301FB52F00FBB2C4 /* Resources */,
CEFECA80301FB69D00FBB2C4 /* Embed Frameworks */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
CEFECA3E301FB52F00FBB2C4 /* shadowoverbishkek */,
);
name = shadowoverbishkek;
packageProductDependencies = (
);
productName = shadowoverbishkek;
productReference = CEFECA3C301FB52F00FBB2C4 /* shadowoverbishkek.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
CEFECA34301FB52F00FBB2C4 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 2610;
LastUpgradeCheck = 2610;
TargetAttributes = {
CEFECA3B301FB52F00FBB2C4 = {
CreatedOnToolsVersion = 26.1.1;
};
};
};
buildConfigurationList = CEFECA37301FB52F00FBB2C4 /* Build configuration list for PBXProject "shadowoverbishkek" */;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = CEFECA33301FB52F00FBB2C4;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
productRefGroup = CEFECA3D301FB52F00FBB2C4 /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = CEFECA5A301FB5DF00FBB2C4 /* Products */;
ProjectRef = CEFECA57301FB5DE00FBB2C4 /* SDL.xcodeproj */;
},
);
projectRoot = "";
targets = (
CEFECA3B301FB52F00FBB2C4 /* shadowoverbishkek */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
CEFECA6A301FB5DF00FBB2C4 /* SDL2.framework */ = {
isa = PBXReferenceProxy;
fileType = wrapper.framework;
path = SDL2.framework;
remoteRef = CEFECA69301FB5DF00FBB2C4 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
CEFECA3A301FB52F00FBB2C4 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
CEFECA38301FB52F00FBB2C4 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
CE802FFF301FBF0700EB3FA5 /* compress.c in Sources */,
CE803000301FBF0700EB3FA5 /* infback.c in Sources */,
CE803002301FBF0700EB3FA5 /* trees.c in Sources */,
CE803003301FBF0700EB3FA5 /* inftrees.c in Sources */,
CE803004301FBF0700EB3FA5 /* deflate.c in Sources */,
CE803008301FBF0700EB3FA5 /* inflate.c in Sources */,
CE803030301FC0E600EB3FA5 /* png.c in Sources */,
CE803009301FBF0700EB3FA5 /* inffast.c in Sources */,
CE80300A301FBF0700EB3FA5 /* uncompr.c in Sources */,
CE80301F301FC03F00EB3FA5 /* pngpread.c in Sources */,
CE803021301FC03F00EB3FA5 /* pngwutil.c in Sources */,
CE803022301FC03F00EB3FA5 /* pngerror.c in Sources */,
CE803023301FC03F00EB3FA5 /* pngwio.c in Sources */,
CE803024301FC03F00EB3FA5 /* pngmem.c in Sources */,
CE803025301FC03F00EB3FA5 /* pngget.c in Sources */,
CE803026301FC03F00EB3FA5 /* pngwtran.c in Sources */,
CE803027301FC03F00EB3FA5 /* pngread.c in Sources */,
CE803028301FC03F00EB3FA5 /* pngrtran.c in Sources */,
CE803029301FC03F00EB3FA5 /* pngset.c in Sources */,
CE80302A301FC03F00EB3FA5 /* pngtrans.c in Sources */,
CE80302B301FC03F00EB3FA5 /* pngwrite.c in Sources */,
CE80302C301FC03F00EB3FA5 /* pngrutil.c in Sources */,
CE80302D301FC03F00EB3FA5 /* pngrio.c in Sources */,
CE80300B301FBF0700EB3FA5 /* adler32.c in Sources */,
CE80300C301FBF0700EB3FA5 /* zutil.c in Sources */,
CE80300D301FBF0700EB3FA5 /* crc32.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
CEFECA50301FB53200FBB2C4 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = R89DR83966;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.1;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
CEFECA51301FB53200FBB2C4 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = R89DR83966;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 26.1;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
CEFECA53301FB53200FBB2C4 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = R89DR83966;
GENERATE_INFOPLIST_FILE = YES;
HEADER_SEARCH_PATHS = (
"\"$(SRCROOT)/../../thirdparty/SDL-release-2.32.10/include\"",
"\"$(SRCROOT)/../../thirdparty/zlib-1.3.1\"",
"\"$(SRCROOT)/../../thirdparty/libpng-1.6.43\"",
);
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UIMainStoryboardFile = "";
INFOPLIST_KEY_UIRequiredDeviceCapabilities = metal;
INFOPLIST_KEY_UIStatusBarHidden = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 18.5;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = fishrungames.shadowoverbishkek;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(TARGET_NAME)/ShaderTypes.h";
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
CEFECA54301FB53200FBB2C4 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = R89DR83966;
GENERATE_INFOPLIST_FILE = YES;
HEADER_SEARCH_PATHS = (
"\"$(SRCROOT)/../../thirdparty/SDL-release-2.32.10/include\"",
"\"$(SRCROOT)/../../thirdparty/zlib-1.3.1\"",
"\"$(SRCROOT)/../../thirdparty/libpng-1.6.43\"",
);
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UIMainStoryboardFile = "";
INFOPLIST_KEY_UIRequiredDeviceCapabilities = metal;
INFOPLIST_KEY_UIStatusBarHidden = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 18.5;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = fishrungames.shadowoverbishkek;
PRODUCT_NAME = "$(TARGET_NAME)";
STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_APPROACHABLE_CONCURRENCY = YES;
SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(TARGET_NAME)/ShaderTypes.h";
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
CEFECA37301FB52F00FBB2C4 /* Build configuration list for PBXProject "shadowoverbishkek" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CEFECA50301FB53200FBB2C4 /* Debug */,
CEFECA51301FB53200FBB2C4 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
CEFECA52301FB53200FBB2C4 /* Build configuration list for PBXNativeTarget "shadowoverbishkek" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CEFECA53301FB53200FBB2C4 /* Debug */,
CEFECA54301FB53200FBB2C4 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = CEFECA34301FB52F00FBB2C4 /* Project object */;
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View File

@ -0,0 +1,11 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,35 @@
{
"images" : [
{
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "tinted"
}
],
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,17 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"properties" : {
"origin" : "bottom-left",
"interpretation" : "non-premultiplied-colors"
},
"textures" : [
{
"idiom" : "universal",
"filename" : "Universal.mipmapset"
}
]
}

View File

@ -0,0 +1,12 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
},
"levels" : [
{
"filename" : "ColorMap.png",
"mipmap-level" : "base"
}
]
}

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>

View File

@ -0,0 +1,23 @@
/*
SDL_uikit_main.c, placed in the public domain by Sam Lantinga 3/18/2019
*/
/* Include the SDL main definition header */
#include "SDL_main.h"
#if defined(__IPHONEOS__) || defined(__TVOS__)
#ifndef SDL_MAIN_HANDLED
#ifdef main
#undef main
#endif
int main(int argc, char *argv[])
{
return SDL_UIKitRunApp(argc, argv, SDL_main);
}
#endif /* !SDL_MAIN_HANDLED */
#endif /* __IPHONEOS__ || __TVOS__ */
/* vi: set ts=4 sw=4 expandtab: */

View File

@ -0,0 +1,78 @@
//
// mainios.cpp
// shadowoverbishkek
//
// Created by  User on 02.08.2026.
//
#include "SDL.h"
#include <SDL_opengles2.h>
#include <iostream>
int main(int argc, char** argv)
{
// Initialize SDL video subsystem
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "Failed to initialize SDL: " << SDL_GetError() << std::endl;
return -1;
}
// Configure OpenGL ES 2.0 context attributes for iOS
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
// Create full screen window for iOS display
SDL_Window* window = SDL_CreateWindow(
"Shadow Over Bishkek",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
0,
0,
SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN | SDL_WINDOW_ALLOW_HIGHDPI
);
if (!window) {
std::cerr << "Failed to create window: " << SDL_GetError() << std::endl;
SDL_Quit();
return -1;
}
// Create the OpenGL ES context
SDL_GLContext glContext = SDL_GL_CreateContext(window);
if (!glContext) {
std::cerr << "Failed to create OpenGL context: " << SDL_GetError() << std::endl;
SDL_DestroyWindow(window);
SDL_Quit();
return -1;
}
// Set clear color to red (R=1, G=0, B=0, A=1)
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
bool running = true;
SDL_Event event;
// Main rendering loop
while (running) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
running = false;
}
}
// Clear color buffer with red color
glClear(GL_COLOR_BUFFER_BIT);
// Swap the OpenGL buffers to display the frame
SDL_GL_SwapWindow(window);
}
// Cleanup resources
SDL_GL_DeleteContext(glContext);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}

View File

@ -0,0 +1,228 @@
/* pnglibconf.h - library build configuration */
/* libpng version 1.6.43 */
/* Copyright (c) 2018-2024 Cosmin Truta */
/* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson */
/* This code is released under the libpng license. */
/* For conditions of distribution and use, see the disclaimer */
/* and license in png.h */
/* pnglibconf.h */
/* Machine generated file: DO NOT EDIT */
/* Derived from: scripts/pnglibconf.dfa */
#ifndef PNGLCONF_H
#define PNGLCONF_H
#define PNG_ARM_NEON_OPT 0
/* options */
#define PNG_16BIT_SUPPORTED
#define PNG_ALIGNED_MEMORY_SUPPORTED
#undef PNG_ARM_NEON_API_SUPPORTED
/*#undef PNG_
_CHECK_SUPPORTED*/
#define PNG_BENIGN_ERRORS_SUPPORTED
#define PNG_BENIGN_READ_ERRORS_SUPPORTED
/*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/
#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
#define PNG_COLORSPACE_SUPPORTED
#define PNG_CONSOLE_IO_SUPPORTED
#define PNG_CONVERT_tIME_SUPPORTED
/*#undef PNG_DISABLE_ADLER32_CHECK_SUPPORTED*/
#define PNG_EASY_ACCESS_SUPPORTED
/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/
#define PNG_ERROR_TEXT_SUPPORTED
#define PNG_FIXED_POINT_SUPPORTED
#define PNG_FLOATING_ARITHMETIC_SUPPORTED
#define PNG_FLOATING_POINT_SUPPORTED
#define PNG_FORMAT_AFIRST_SUPPORTED
#define PNG_FORMAT_BGR_SUPPORTED
#define PNG_GAMMA_SUPPORTED
#define PNG_GET_PALETTE_MAX_SUPPORTED
#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
#define PNG_INCH_CONVERSIONS_SUPPORTED
#define PNG_INFO_IMAGE_SUPPORTED
#define PNG_IO_STATE_SUPPORTED
/*#undef PNG_MIPS_MMI_API_SUPPORTED*/
/*#undef PNG_MIPS_MMI_CHECK_SUPPORTED*/
/*#undef PNG_MIPS_MSA_API_SUPPORTED*/
/*#undef PNG_MIPS_MSA_CHECK_SUPPORTED*/
#define PNG_MNG_FEATURES_SUPPORTED
#define PNG_POINTER_INDEXING_SUPPORTED
/*#undef PNG_POWERPC_VSX_API_SUPPORTED*/
/*#undef PNG_POWERPC_VSX_CHECK_SUPPORTED*/
#define PNG_PROGRESSIVE_READ_SUPPORTED
#define PNG_READ_16BIT_SUPPORTED
#define PNG_READ_ALPHA_MODE_SUPPORTED
#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
#define PNG_READ_BACKGROUND_SUPPORTED
#define PNG_READ_BGR_SUPPORTED
#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
#define PNG_READ_COMPOSITE_NODIV_SUPPORTED
#define PNG_READ_COMPRESSED_TEXT_SUPPORTED
#define PNG_READ_EXPAND_16_SUPPORTED
#define PNG_READ_EXPAND_SUPPORTED
#define PNG_READ_FILLER_SUPPORTED
#define PNG_READ_GAMMA_SUPPORTED
#define PNG_READ_GET_PALETTE_MAX_SUPPORTED
#define PNG_READ_GRAY_TO_RGB_SUPPORTED
#define PNG_READ_INTERLACING_SUPPORTED
#define PNG_READ_INT_FUNCTIONS_SUPPORTED
#define PNG_READ_INVERT_ALPHA_SUPPORTED
#define PNG_READ_INVERT_SUPPORTED
#define PNG_READ_OPT_PLTE_SUPPORTED
#define PNG_READ_PACKSWAP_SUPPORTED
#define PNG_READ_PACK_SUPPORTED
#define PNG_READ_QUANTIZE_SUPPORTED
#define PNG_READ_RGB_TO_GRAY_SUPPORTED
#define PNG_READ_SCALE_16_TO_8_SUPPORTED
#define PNG_READ_SHIFT_SUPPORTED
#define PNG_READ_STRIP_16_TO_8_SUPPORTED
#define PNG_READ_STRIP_ALPHA_SUPPORTED
#define PNG_READ_SUPPORTED
#define PNG_READ_SWAP_ALPHA_SUPPORTED
#define PNG_READ_SWAP_SUPPORTED
#define PNG_READ_TEXT_SUPPORTED
#define PNG_READ_TRANSFORMS_SUPPORTED
#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
#define PNG_READ_USER_CHUNKS_SUPPORTED
#define PNG_READ_USER_TRANSFORM_SUPPORTED
#define PNG_READ_bKGD_SUPPORTED
#define PNG_READ_cHRM_SUPPORTED
#define PNG_READ_eXIf_SUPPORTED
#define PNG_READ_gAMA_SUPPORTED
#define PNG_READ_hIST_SUPPORTED
#define PNG_READ_iCCP_SUPPORTED
#define PNG_READ_iTXt_SUPPORTED
#define PNG_READ_oFFs_SUPPORTED
#define PNG_READ_pCAL_SUPPORTED
#define PNG_READ_pHYs_SUPPORTED
#define PNG_READ_sBIT_SUPPORTED
#define PNG_READ_sCAL_SUPPORTED
#define PNG_READ_sPLT_SUPPORTED
#define PNG_READ_sRGB_SUPPORTED
#define PNG_READ_tEXt_SUPPORTED
#define PNG_READ_tIME_SUPPORTED
#define PNG_READ_tRNS_SUPPORTED
#define PNG_READ_zTXt_SUPPORTED
#define PNG_SAVE_INT_32_SUPPORTED
#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
#define PNG_SEQUENTIAL_READ_SUPPORTED
#define PNG_SETJMP_SUPPORTED
#define PNG_SET_OPTION_SUPPORTED
#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
#define PNG_SET_USER_LIMITS_SUPPORTED
#define PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED
#define PNG_SIMPLIFIED_READ_BGR_SUPPORTED
#define PNG_SIMPLIFIED_READ_SUPPORTED
#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
#define PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED
#define PNG_SIMPLIFIED_WRITE_SUPPORTED
#define PNG_STDIO_SUPPORTED
#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
#define PNG_TEXT_SUPPORTED
#define PNG_TIME_RFC1123_SUPPORTED
#define PNG_UNKNOWN_CHUNKS_SUPPORTED
#define PNG_USER_CHUNKS_SUPPORTED
#define PNG_USER_LIMITS_SUPPORTED
#define PNG_USER_MEM_SUPPORTED
#define PNG_USER_TRANSFORM_INFO_SUPPORTED
#define PNG_USER_TRANSFORM_PTR_SUPPORTED
#define PNG_WARNINGS_SUPPORTED
#define PNG_WRITE_16BIT_SUPPORTED
#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
#define PNG_WRITE_BGR_SUPPORTED
#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
#define PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
#define PNG_WRITE_FILLER_SUPPORTED
#define PNG_WRITE_FILTER_SUPPORTED
#define PNG_WRITE_FLUSH_SUPPORTED
#define PNG_WRITE_GET_PALETTE_MAX_SUPPORTED
#define PNG_WRITE_INTERLACING_SUPPORTED
#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED
#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
#define PNG_WRITE_INVERT_SUPPORTED
#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
#define PNG_WRITE_PACKSWAP_SUPPORTED
#define PNG_WRITE_PACK_SUPPORTED
#define PNG_WRITE_SHIFT_SUPPORTED
#define PNG_WRITE_SUPPORTED
#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
#define PNG_WRITE_SWAP_SUPPORTED
#define PNG_WRITE_TEXT_SUPPORTED
#define PNG_WRITE_TRANSFORMS_SUPPORTED
#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
#define PNG_WRITE_USER_TRANSFORM_SUPPORTED
#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
#define PNG_WRITE_bKGD_SUPPORTED
#define PNG_WRITE_cHRM_SUPPORTED
#define PNG_WRITE_eXIf_SUPPORTED
#define PNG_WRITE_gAMA_SUPPORTED
#define PNG_WRITE_hIST_SUPPORTED
#define PNG_WRITE_iCCP_SUPPORTED
#define PNG_WRITE_iTXt_SUPPORTED
#define PNG_WRITE_oFFs_SUPPORTED
#define PNG_WRITE_pCAL_SUPPORTED
#define PNG_WRITE_pHYs_SUPPORTED
#define PNG_WRITE_sBIT_SUPPORTED
#define PNG_WRITE_sCAL_SUPPORTED
#define PNG_WRITE_sPLT_SUPPORTED
#define PNG_WRITE_sRGB_SUPPORTED
#define PNG_WRITE_tEXt_SUPPORTED
#define PNG_WRITE_tIME_SUPPORTED
#define PNG_WRITE_tRNS_SUPPORTED
#define PNG_WRITE_zTXt_SUPPORTED
#define PNG_bKGD_SUPPORTED
#define PNG_cHRM_SUPPORTED
#define PNG_eXIf_SUPPORTED
#define PNG_gAMA_SUPPORTED
#define PNG_hIST_SUPPORTED
#define PNG_iCCP_SUPPORTED
#define PNG_iTXt_SUPPORTED
#define PNG_oFFs_SUPPORTED
#define PNG_pCAL_SUPPORTED
#define PNG_pHYs_SUPPORTED
#define PNG_sBIT_SUPPORTED
#define PNG_sCAL_SUPPORTED
#define PNG_sPLT_SUPPORTED
#define PNG_sRGB_SUPPORTED
#define PNG_tEXt_SUPPORTED
#define PNG_tIME_SUPPORTED
#define PNG_tRNS_SUPPORTED
#define PNG_zTXt_SUPPORTED
/* end of options */
/* settings */
#define PNG_API_RULE 0
#define PNG_DEFAULT_READ_MACROS 1
#define PNG_GAMMA_THRESHOLD_FIXED 5000
#define PNG_IDAT_READ_SIZE PNG_ZBUF_SIZE
#define PNG_INFLATE_BUF_SIZE 1024
#define PNG_LINKAGE_API extern
#define PNG_LINKAGE_CALLBACK extern
#define PNG_LINKAGE_DATA extern
#define PNG_LINKAGE_FUNCTION extern
#define PNG_MAX_GAMMA_8 11
#define PNG_QUANTIZE_BLUE_BITS 5
#define PNG_QUANTIZE_GREEN_BITS 5
#define PNG_QUANTIZE_RED_BITS 5
#define PNG_TEXT_Z_DEFAULT_COMPRESSION (-1)
#define PNG_TEXT_Z_DEFAULT_STRATEGY 0
#define PNG_USER_CHUNK_CACHE_MAX 1000
#define PNG_USER_CHUNK_MALLOC_MAX 8000000
#define PNG_USER_HEIGHT_MAX 1000000
#define PNG_USER_WIDTH_MAX 1000000
#define PNG_ZBUF_SIZE 8192
#define PNG_ZLIB_VERNUM 0 /* unknown */
#define PNG_Z_DEFAULT_COMPRESSION (-1)
#define PNG_Z_DEFAULT_NOFILTER_STRATEGY 0
#define PNG_Z_DEFAULT_STRATEGY 1
#define PNG_sCAL_PRECISION 5
#define PNG_sRGB_PROFILE_CHECKS 2
/* end of settings */
#endif /* PNGLCONF_H */

View File

View File

@ -173,8 +173,8 @@ void Character::resetPlayerAfterDeath() {
state.attack = 0;
}
bool Character::forceReplan() {
if (!pathPlanner) return false;
void Character::forceReplan() {
if (!pathPlanner) return;
const Eigen::Vector3f normalizedTarget(state.requestedWalkTarget.x(), 0.f, state.requestedWalkTarget.z());
state.pathWaypoints = pathPlanner(state.position, normalizedTarget);
@ -185,13 +185,12 @@ bool Character::forceReplan() {
waypoint.y() = 0.f;
}
state.walkTarget = state.pathWaypoints.back();
return true;
return;
}
state.walkTarget = Eigen::Vector3f(state.position.x(), 0.f, state.position.z());
state.onArrivedCallback = nullptr;
state.onArrivedCallbackName.clear();
return false;
}
void Character::setTexture(std::shared_ptr<FRG::Texture> texture) {

View File

@ -59,7 +59,7 @@ public:
void setTarget(const Eigen::Vector3f& target, std::function<void()> onArrived = nullptr, std::string callbackName = "");
void stopAndRotateToTarget(int npcId);
bool forceReplan();
void forceReplan();
void stopInPlace() { state.stopInPlace(); }
// ---- Reset ----

View File

@ -103,8 +103,7 @@ public:
float modelScale = 0.12f;
Eigen::Quaternionf modelCorrectionRotation = Eigen::Quaternionf::Identity();
bool useGpuSkinning = true;
//float collisionRadius = 0.45f;
float collisionRadius = 0.65f;
float collisionRadius = 0.45f;
float interactionRadius = 0.0f;
// --- Pathfinding data (serializable parts) ---

View File

@ -22,8 +22,8 @@ int Environment::width = CONST_DEFAULT_WIDTH;
int Environment::height = CONST_DEFAULT_HEIGHT;
float Environment::zoom = DEFAULT_ZOOM;
//bool Environment::enableLogging = false;
bool Environment::enableLogging = true;
bool Environment::enableLogging = false;
//bool Environment::enableLogging = true;
SDL_Window* Environment::window = nullptr;

View File

@ -797,7 +797,7 @@ namespace FRG
"resources/navigation/dorm3_b.json",
"resources/navigation/dorm3_all_open.json",
};*/
params_dorm.navigationJsonPaths = {
"resources/navigation/dorm3_bca.txt", //0
"resources/navigation/dorm3_ca.txt", //1
@ -806,7 +806,7 @@ namespace FRG
"resources/navigation/dorm3_b.txt",
"resources/navigation/dorm3_all_open.txt", //5
};
/*
params_dorm.navigationJsonPaths = {
"resources/navigation/dorm0_large.json",
@ -1452,18 +1452,6 @@ namespace FRG
if (event.key.keysym.sym == SDLK_BACKSPACE) {
//menuManager.uiManager.onKeyBackspace();
}
if (event.key.keysym.sym == SDLK_1)
{
startNightTransition();
}
if (event.key.keysym.sym == SDLK_2)
{
startDarklandsTransition();
}
if (event.key.keysym.sym == SDLK_3)
{
logger() << "Player position: " << currentLocation()->player->state.position.transpose() << std::endl;
}
}
if (event.type == SDL_TEXTINPUT) {

View File

@ -450,16 +450,7 @@ namespace FRG
const auto addCharacter = [&](const Character* other) {
if (!other || other == self) return;
if (other->getHp() <= 0.f || !other->state.enabled) return;
// Проверяем, находятся ли персонажи в состоянии фактического столкновения
const float dist = (other->state.position - self->state.position).norm();
const float collisionDist = self->state.collisionRadius + other->state.collisionRadius;
// Добавляем epsilon (0.1f) для учета погрешностей при входе в зону коллизии
const bool isColliding = dist <= (collisionDist + 0.1f);
// Игнорируем движущегося персонажа, только если мы с ним НЕ сталкиваемся в данный момент
if (other->isMoving() && !isColliding) return;
if (other->isMoving()) return;
if (distancePointToSegmentXZ(other->state.position, start, end) > kDynamicObstacleInfluenceDist) {
return;
@ -469,7 +460,7 @@ namespace FRG
obs.position = Eigen::Vector3f(other->state.position.x(), navigation->getFloorY(), other->state.position.z());
obs.radius = (std::max)(0.0f, other->state.collisionRadius * 0.6f);
dynamicObstacles.push_back(obs);
};
};
addCharacter(player.get());
for (const auto& npc : npcs) {
@ -477,8 +468,8 @@ namespace FRG
}
return navigation->findPathToNearest(start, end, dynamicObstacles);
};
};
};
if (player) {
player->setPathPlanner(makePlanner(player.get()));
@ -600,9 +591,6 @@ namespace FRG
}
Character* Location::raycastNpcs(const Eigen::Vector3f& rayOrigin, const Eigen::Vector3f& rayDir, float maxDistance) {
//return nullptr;
// Every NPC is treated as a vertical cylinder: radius 1.0m, height 1.85m,
// base at npc->position (the model's foot). Intersection = circle hit in the
// XZ plane, then clip the entry/exit t against the [yFoot, yFoot+height] slab.
@ -666,6 +654,7 @@ namespace FRG
else {
//logger() << "[RAYCAST_NPC] No NPC hit" << std::endl;
}
return closestNpc;
}
@ -1424,83 +1413,53 @@ namespace FRG
continue;
}
// 1. ПЕРЕСТРОЕНИЕ ПУТИ (выполняется при пересечении обычного радиуса коллизии)
Eigen::Vector2f normal(1.f, 0.f);
if (dist > kMinSeparationEps) {
normal = delta / dist;
}
const float penetration = (minDist - dist);
const float push = penetration * 0.5f;
Eigen::Vector3f newA = a->state.position;
Eigen::Vector3f newB = b->state.position;
newA.x() -= normal.x() * push;
newA.z() -= normal.y() * push;
newA.y() = 0.f;
newB.x() += normal.x() * push;
newB.z() += normal.y() * push;
newB.y() = 0.f;
const bool aWasMoving = a->isMoving();
const bool bWasMoving = b->isMoving();
auto tryReplan = [&](Character* c) {
if (replanCooldownRemainingMs.find(c) != replanCooldownRemainingMs.end()) {
return; // Уже находится в откате
}
if (c->forceReplan()) {
replanCooldownRemainingMs[c] = 500; // таймаут на спам
}
};
if (navigation && navigation->isReady()) {
const bool aOk = navigation->isWalkable(newA);
const bool bOk = navigation->isWalkable(newB);
if (aWasMoving || bWasMoving) {
if (aWasMoving && bWasMoving) {
tryReplan(a);
tryReplan(b);
}
else if (aWasMoving) {
tryReplan(a);
}
else if (bWasMoving) {
tryReplan(b);
}
}
// 2. ФИЗИЧЕСКОЕ ВЫТАЛКИВАНИЕ (только если дистанция меньше 0.5 * minDist)
const float hardMinDist = minDist * 0.5f;
if (dist < hardMinDist) {
Eigen::Vector2f normal(1.f, 0.f);
if (dist > kMinSeparationEps) {
normal = delta / dist;
}
// Вычисляем выталкивание относительно hardMinDist, а не minDist
const float penetration = (hardMinDist - dist);
const float push = penetration * 0.5f;
Eigen::Vector3f newA = a->state.position;
Eigen::Vector3f newB = b->state.position;
newA.x() -= normal.x() * push;
newA.z() -= normal.y() * push;
newA.y() = 0.f;
newB.x() += normal.x() * push;
newB.z() += normal.y() * push;
newB.y() = 0.f;
if (navigation && navigation->isReady()) {
const bool aOk = navigation->isWalkable(newA);
const bool bOk = navigation->isWalkable(newB);
if (aOk && bOk) {
a->state.position = newA;
b->state.position = newB;
}
else if (aOk && !bOk) {
a->state.position = newA;
}
else if (!aOk && bOk) {
b->state.position = newB;
}
}
else {
if (aOk && bOk) {
a->state.position = newA;
b->state.position = newB;
}
else if (aOk && !bOk) {
a->state.position = newA;
}
else if (!aOk && bOk) {
b->state.position = newB;
}
}
else {
a->state.position = newA;
b->state.position = newB;
}
// 3. ОСТАНОВКА И КОЛЛБЭКИ
if (a->state.isPlayer && !aWasMoving) a->stopInPlace();
if (b->state.isPlayer && !bWasMoving) b->stopInPlace();
if (aWasMoving && !bWasMoving) {
nudgeCharacterAside(b, a->state.position);
fireBumpCallbacks(a, b);
}
else if (bWasMoving && !aWasMoving) {
} else if (bWasMoving && !aWasMoving) {
nudgeCharacterAside(a, b->state.position);
fireBumpCallbacks(b, a);
}

View File

@ -124,68 +124,6 @@ void PathFinder::build(const std::string& configPath,
<< ", cell=" << cellSize << ", areas=" << areas.size() << "\n";
}
std::vector<Eigen::Vector3f> PathFinder::findPath(const Eigen::Vector3f& start,
const Eigen::Vector3f& end) const
{
return runAStar(start, end, walkable, false);
}
std::vector<Eigen::Vector3f> PathFinder::findPath(const Eigen::Vector3f& start,
const Eigen::Vector3f& end,
const std::vector<DynamicObstacle>& dynamicObstacles) const
{
if (!ready || walkable.empty()) {
return {};
}
std::vector<unsigned char> walkableGrid = walkable;
// --- Логика внесения dynamicObstacles остается здесь ---
if (!dynamicObstacles.empty()) {
for (const DynamicObstacle& obstacle : dynamicObstacles) {
const float radius = obstacle.radius + agentRadius;
if (radius <= 0.0f) continue;
const float minWorldX = obstacle.position.x() - radius;
const float maxWorldX = obstacle.position.x() + radius;
const float minWorldZ = obstacle.position.z() - radius;
const float maxWorldZ = obstacle.position.z() + radius;
const int minCellX = (std::max)(0, static_cast<int>(std::floor((minWorldX - minX) / cellSize)));
const int maxCellX = (std::min)(gridWidth - 1, static_cast<int>(std::floor((maxWorldX - minX) / cellSize)));
const int minCellZ = (std::max)(0, static_cast<int>(std::floor((minWorldZ - minZ) / cellSize)));
const int maxCellZ = (std::min)(gridDepth - 1, static_cast<int>(std::floor((maxWorldZ - minZ) / cellSize)));
const float radiusSq = radius * radius;
for (int z = minCellZ; z <= maxCellZ; ++z) {
for (int x = minCellX; x <= maxCellX; ++x) {
const Cell cell{ x, z };
const Eigen::Vector3f center = cellCenter(cell);
const float dx = center.x() - obstacle.position.x();
const float dz = center.z() - obstacle.position.z();
if (dx * dx + dz * dz <= radiusSq) {
const int idx = indexOf(cell);
if (idx >= 0 && idx < static_cast<int>(walkableGrid.size())) {
walkableGrid[static_cast<size_t>(idx)] = 0;
}
}
}
}
}
}
return runAStar(start, end, walkableGrid, false);
}
std::vector<Eigen::Vector3f> PathFinder::findNearestReachableImpl(
const Eigen::Vector3f& start,
const Eigen::Vector3f& end,
const std::vector<unsigned char>& walkableGrid) const
{
return runAStar(start, end, walkableGrid, true);
}
/*
std::vector<Eigen::Vector3f> PathFinder::findPath(const Eigen::Vector3f& start,
const Eigen::Vector3f& end) const
{
@ -556,7 +494,7 @@ std::vector<Eigen::Vector3f> PathFinder::findNearestReachableImpl(
path.erase(path.begin());
return path;
}*/
}
std::vector<Eigen::Vector3f> PathFinder::findPathToNearest(
const Eigen::Vector3f& start, const Eigen::Vector3f& end) const
@ -1137,125 +1075,4 @@ bool PathFinder::pointInPolygon(float x, float z, const std::vector<Eigen::Vecto
return inside;
}
std::vector<Eigen::Vector3f> PathFinder::runAStar(
const Eigen::Vector3f& start,
const Eigen::Vector3f& end,
const std::vector<unsigned char>& grid,
bool returnNearestOnFail) const
{
if (!ready || grid.empty()) return {};
Cell startCell, endCell;
if (!findNearestWalkableCell(start, startCell, grid) ||
!findNearestWalkableCell(end, endCell, grid)) {
return {};
}
if (startCell.x == endCell.x && startCell.z == endCell.z) {
return { cellCenter(endCell) };
}
struct QueueNode {
int index = 0;
float priority = 0.0f;
bool operator<(const QueueNode& other) const { return priority > other.priority; }
};
const int cellCount = gridWidth * gridDepth;
std::vector<float> cost(static_cast<size_t>(cellCount), (std::numeric_limits<float>::max)());
std::vector<int> cameFrom(static_cast<size_t>(cellCount), -1);
std::priority_queue<QueueNode> open;
const int startIndex = indexOf(startCell);
const int endIndex = indexOf(endCell);
cost[static_cast<size_t>(startIndex)] = 0.0f;
open.push({ startIndex, 0.0f });
int bestIndex = startIndex;
float bestDist = distanceCells(startCell, endCell);
static const int offsets[8][2] = {
{ 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 },
{ 1, 1 }, { 1, -1 }, { -1, 1 }, { -1, -1 }
};
bool reached = false;
while (!open.empty()) {
const QueueNode current = open.top();
open.pop();
if (current.index == endIndex) {
bestIndex = endIndex;
reached = true;
break;
}
const Cell currentCell{ current.index % gridWidth, current.index / gridWidth };
if (cost[static_cast<size_t>(current.index)] < current.priority - distanceCells(currentCell, endCell)) {
continue;
}
if (returnNearestOnFail) {
const float d = distanceCells(currentCell, endCell);
if (d < bestDist) {
bestDist = d;
bestIndex = current.index;
}
}
for (const auto& offset : offsets) {
Cell next{ currentCell.x + offset[0], currentCell.z + offset[1] };
if (!isCellWalkable(next, grid)) continue;
const bool diagonal = offset[0] != 0 && offset[1] != 0;
if (diagonal) {
Cell h{ currentCell.x + offset[0], currentCell.z };
Cell v{ currentCell.x, currentCell.z + offset[1] };
if (!isCellWalkable(h, grid) || !isCellWalkable(v, grid)) continue;
}
const int nextIndex = indexOf(next);
const float stepCost = diagonal ? 1.41421356f : 1.0f;
const float newCost = cost[static_cast<size_t>(current.index)] + stepCost;
if (newCost >= cost[static_cast<size_t>(nextIndex)]) continue;
cost[static_cast<size_t>(nextIndex)] = newCost;
cameFrom[static_cast<size_t>(nextIndex)] = current.index;
open.push({ nextIndex, newCost + distanceCells(next, endCell) });
}
}
if (!reached && !returnNearestOnFail) return {};
if (bestIndex == startIndex) return {};
std::vector<Cell> cells;
for (int cur = bestIndex; cur != -1; cur = cameFrom[static_cast<size_t>(cur)]) {
cells.push_back({ cur % gridWidth, cur / gridWidth });
if (cur == startIndex) break;
}
std::reverse(cells.begin(), cells.end());
cells = smoothCells(cells, grid);
std::vector<Eigen::Vector3f> path;
path.reserve(cells.size());
for (const Cell& cell : cells) path.push_back(cellCenter(cell));
if (!path.empty() && (path.front() - Eigen::Vector3f(start.x(), floorY, start.z())).norm() < cellSize * 0.75f) {
path.erase(path.begin());
}
if (reached && !path.empty()) {
Cell requestedEndCell;
if (worldToCell(end, requestedEndCell) && requestedEndCell.x == endCell.x && requestedEndCell.z == endCell.z) {
path.back() = Eigen::Vector3f(end.x(), floorY, end.z());
}
}
return path;
}
} // namespace FRG

View File

@ -109,11 +109,6 @@ private:
std::vector<Eigen::Vector3f> findNearestReachableImpl(const Eigen::Vector3f& start,
const Eigen::Vector3f& end,
const std::vector<unsigned char>& walkableGrid) const;
std::vector<Eigen::Vector3f> runAStar(const Eigen::Vector3f& start,
const Eigen::Vector3f& end,
const std::vector<unsigned char>& grid,
bool returnNearestOnFail) const;
};
} // namespace FRG