commit de460abd2938243c592916f47eab7f55042d4029 Author: PoliEcho Date: Sat Aug 23 10:57:15 2025 +0200 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..474e379 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode +build/ \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f004f2a --- /dev/null +++ b/Makefile @@ -0,0 +1,40 @@ +CPPC = g++ +COMMON_CPPC_FLAGS = -std=c++23 -Wall -Wextra -lSDL3 -lSDL3_image `pkg-config --cflags --libs sdl3` -Wno-write-strings +CPPC_FLAGS = -O3 $(COMMON_CPPC_FLAGS) +DEBUG_FLAGS = -ggdb $(COMMON_CPPC_FLAGS) +DEBUG_ASANITIZE = -fsanitize=address -ggdb -fno-omit-frame-pointer $(COMMON_CPPC_FLAGS) + +SRC_PATH := src +OBJ_PATH := build/obj +BIN_PATH := build/bin +BIN_NAME := Vector_blow + +SRC_FILES := $(shell find $(SRC_PATH) -name '*.cpp') +OBJ_FILES := $(patsubst $(SRC_PATH)/%.cpp,$(OBJ_PATH)/%.o,$(SRC_FILES)) + +all: make-build-dir $(BIN_PATH)/$(BIN_NAME) + + +debug: CPPC_FLAGS = $(DEBUG_FLAGS) +debug: make-build-dir $(BIN_PATH)/$(BIN_NAME) + +asan: CPPC_FLAGS = $(DEBUG_ASANITIZE) +asan: make-build-dir $(BIN_PATH)/$(BIN_NAME) + +make-build-dir: + mkdir -p $(OBJ_PATH) + mkdir -p $(BIN_PATH) + + +$(BIN_PATH)/$(BIN_NAME): $(OBJ_FILES) + $(CPPC) $(CPPC_FLAGS) $^ -o $@ + + +$(OBJ_PATH)/%.o: $(SRC_PATH)/%.cpp + $(CPPC) $(CPPC_FLAGS) -c $< -o $@ + + +clean: + rm -fr build + +.PHONY: all clean debug asan diff --git a/assets/player_ship.pdf b/assets/player_ship.pdf new file mode 100644 index 0000000..28ad358 Binary files /dev/null and b/assets/player_ship.pdf differ diff --git a/assets/player_ship.svg b/assets/player_ship.svg new file mode 100644 index 0000000..d066f19 --- /dev/null +++ b/assets/player_ship.svg @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/misc/player_ship.dxf b/misc/player_ship.dxf new file mode 100644 index 0000000..fa2adc8 --- /dev/null +++ b/misc/player_ship.dxf @@ -0,0 +1,4802 @@ +999 +dxflib 3.26.4.0 + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1015 + 9 +$HANDSEED + 5 +FFFF + 9 +$DIMADEC + 70 +0 + 9 +$DIMASZ + 40 +0.125 + 9 +$DIMATFIT + 70 +0 + 9 +$DIMAUNIT + 70 +0 + 9 +$DIMAZIN + 70 +2 + 9 +$DIMBLK + 1 +0 + 9 +$DIMBLK1 + 1 +0 + 9 +$DIMBLK2 + 1 +0 + 9 +$DIMDEC + 70 +4 + 9 +$DIMDLI + 40 +0.25 + 9 +$DIMDSEP + 70 +46 + 9 +$DIMEXE + 40 +0.0625 + 9 +$DIMEXO + 40 +0.03125 + 9 +$DIMGAP + 40 +0.03125 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMLUNIT + 70 +2 + 9 +$DIMSCALE + 40 +1.0 + 9 +$DIMTAD + 70 +1 + 9 +$DIMTIH + 70 +0 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTXT + 40 +0.125 + 9 +$DIMZIN + 70 +8 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$INSUNITS + 70 +4 + 9 +$LTSCALE + 40 +1.0 + 9 +$MAXACTVP + 70 +64 + 9 +$MEASUREMENT + 70 +1 + 9 +$MIRRTEXT + 70 +0 + 9 +$PDMODE + 70 +0 + 9 +$PDSIZE + 40 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +8 +100 +AcDbSymbolTable + 70 +1 + 0 +VPORT + 5 +30 +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 +0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +286.3055555555554861 + 22 +148.5 + 13 +0.0 + 23 +0.0 + 14 +10.0 + 24 +10.0 + 15 +10.0 + 25 +10.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +297.0 + 41 +1.92798353909465 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 +0 + 72 +100 + 73 +1 + 74 +3 + 75 +1 + 76 +1 + 77 +0 + 78 +0 +281 +0 + 65 +1 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 +0 +146 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +5 +100 +AcDbSymbolTable + 70 +41 + 0 +LTYPE + 5 +16 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +Continuous + 70 +0 + 3 +Solid line + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +31 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDENX2 + 70 +0 + 3 +Hidden (2x) ____ ____ ____ ____ ____ ____ ____ + 72 +65 + 73 +2 + 40 +19.0499999999999972 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +32 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTERX2 + 70 +0 + 3 +Center (2x) ________ __ ________ __ _____ + 72 +65 + 73 +4 + 40 +101.6000000000000085 + 49 +63.5 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +33 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO05W100 + 70 +0 + 3 +ISO long-dash double-dot ____ .. ____ .. ____ . + 72 +65 + 73 +6 + 40 +33.0000000000000071 + 49 +24.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9000000000000004 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +34 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOMX2 + 70 +0 + 3 +Phantom (2x) ____________ ____ ____ _ + 72 +65 + 73 +6 + 40 +127.0000000000000142 + 49 +63.5 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +35 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER2 + 70 +0 + 3 +Border (.5x) __.__.__.__.__.__.__.__.__.__.__. + 72 +65 + 73 +6 + 40 +22.2250000000000014 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.125 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-3.125 + 74 +0 + 0 +LTYPE + 5 +36 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO14W100 + 70 +0 + 3 +ISO dash triple-dot __ . . . __ . . . __ . . . _ + 72 +65 + 73 +8 + 40 +24.0000000000000036 + 49 +12.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9000000000000004 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9000000000000004 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +37 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDEN + 70 +0 + 3 +Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 +65 + 73 +2 + 40 +9.5249999999999986 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +38 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO12W100 + 70 +0 + 3 +ISO dash double-dot __ . . __ . . __ . . __ . . + 72 +65 + 73 +6 + 40 +21.0 + 49 +12.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9000000000000004 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +39 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO08W100 + 70 +0 + 3 +ISO long-dash short-dash ____ __ ____ __ ____ _ + 72 +65 + 73 +4 + 40 +36.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +3A +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO03W100 + 70 +0 + 3 +ISO dash space __ __ __ __ __ __ + 72 +65 + 73 +2 + 40 +30.0 + 49 +12.0 + 74 +0 + 49 +-18.0 + 74 +0 + 0 +LTYPE + 5 +3B +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOM2 + 70 +0 + 3 +Phantom (.5x) ___ _ _ ___ _ _ ___ _ _ ___ _ _ + 72 +65 + 73 +6 + 40 +31.7500000000000036 + 49 +15.875 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +3C +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT + 70 +0 + 3 +Dash dot __ . __ . __ . __ . __ . __ . __ . __ + 72 +65 + 73 +4 + 40 +25.4000000000000021 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.2999999999999998 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-6.2999999999999998 + 74 +0 + 0 +LTYPE + 5 +3D +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO15W100 + 70 +0 + 3 +ISO double-dash triple-dot __ __ . . . __ __ . . + 72 +65 + 73 +10 + 40 +39.0000000000000071 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9000000000000004 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9000000000000004 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +3E +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOTX2 + 70 +0 + 3 +Dot (2x) . . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +12.6999999999999993 + 49 +0.1 + 74 +0 + 49 +-12.5999999999999996 + 74 +0 + 0 +LTYPE + 5 +3F +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE + 70 +0 + 3 +Divide ____ . . ____ . . ____ . . ____ . . ____ + 72 +65 + 73 +6 + 40 +31.7500000000000036 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.2999999999999998 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-6.25 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-6.2999999999999998 + 74 +0 + 0 +LTYPE + 5 +40 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO04W100 + 70 +0 + 3 +ISO long-dash dot ____ . ____ . ____ . ____ . _ + 72 +65 + 73 +4 + 40 +30.0 + 49 +24.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +41 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDEX2 + 70 +0 + 3 +Divide (2x) ________ . . ________ . . _ + 72 +65 + 73 +6 + 40 +63.5 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6499999999999986 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-12.5999999999999979 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-12.6499999999999986 + 74 +0 + 0 +LTYPE + 5 +42 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +HIDDEN2 + 70 +0 + 3 +Hidden (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 +65 + 73 +2 + 40 +4.7624999999999993 + 49 +3.1749999999999998 + 74 +0 + 49 +-1.5874999999999999 + 74 +0 + 0 +LTYPE + 5 +43 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER2 + 70 +0 + 3 +Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ + 72 +65 + 73 +4 + 40 +28.5750000000000028 + 49 +19.0500000000000007 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 49 +3.1749999999999998 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +15 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYLAYER + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +44 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO11W100 + 70 +0 + 3 +ISO double-dash dot __ __ . __ __ . __ __ . __ _ + 72 +65 + 73 +6 + 40 +33.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +45 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDERX2 + 70 +0 + 3 +Border (2x) ____ ____ . ____ ____ . ___ + 72 +65 + 73 +6 + 40 +88.8999999999999773 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6499999999999986 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-12.6499999999999986 + 74 +0 + 0 +LTYPE + 5 +46 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO02W100 + 70 +0 + 3 +ISO dash __ __ __ __ __ __ __ __ __ __ __ __ __ + 72 +65 + 73 +2 + 40 +15.0 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +47 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO13W100 + 70 +0 + 3 +ISO double-dash double-dot __ __ . . __ __ . . _ + 72 +65 + 73 +8 + 40 +36.0000000000000071 + 49 +12.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +12.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9000000000000004 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +48 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO07W100 + 70 +0 + 3 +ISO dot . . . . . . . . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +3.0 + 49 +0.1 + 74 +0 + 49 +-2.8999999999999999 + 74 +0 + 0 +LTYPE + 5 +14 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BYBLOCK + 70 +0 + 3 + + 72 +65 + 73 +0 + 40 +0.0 + 0 +LTYPE + 5 +49 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO06W100 + 70 +0 + 3 +ISO long-dash triple-dot ____ ... ____ ... ____ + 72 +65 + 73 +8 + 40 +36.0000000000000071 + 49 +24.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9000000000000004 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9000000000000004 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +LTYPE + 5 +4A +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CENTER + 70 +0 + 3 +Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ + 72 +65 + 73 +4 + 40 +50.8000000000000043 + 49 +31.75 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +4B +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED + 70 +0 + 3 +Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ + 72 +65 + 73 +2 + 40 +19.0499999999999972 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +4C +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHED2 + 70 +0 + 3 +Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + 72 +65 + 73 +2 + 40 +9.5249999999999986 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.1749999999999998 + 74 +0 + 0 +LTYPE + 5 +4D +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOT2 + 70 +0 + 3 +Dash dot (.5x) _._._._._._._._._._._._._._._. + 72 +65 + 73 +4 + 40 +12.6999999999999993 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.125 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-3.125 + 74 +0 + 0 +LTYPE + 5 +4E +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHDOTX2 + 70 +0 + 3 +Dash dot (2x) ____ . ____ . ____ . ___ + 72 +65 + 73 +4 + 40 +50.7999999999999972 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6499999999999986 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-12.6499999999999986 + 74 +0 + 0 +LTYPE + 5 +4F +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DIVIDE2 + 70 +0 + 3 +Divide (.5x) __..__..__..__..__..__..__..__.._ + 72 +65 + 73 +6 + 40 +15.8749999999999982 + 49 +6.3499999999999996 + 74 +0 + 49 +-3.125 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-3.0750000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-3.125 + 74 +0 + 0 +LTYPE + 5 +50 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT + 70 +0 + 3 +Dot . . . . . . . . . . . . . . . . . . . . . . . . + 72 +65 + 73 +2 + 40 +6.3499999999999996 + 49 +0.1 + 74 +0 + 49 +-6.25 + 74 +0 + 0 +LTYPE + 5 +51 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DASHEDX2 + 70 +0 + 3 +Dashed (2x) ____ ____ ____ ____ ____ ___ + 72 +65 + 73 +2 + 40 +38.0999999999999943 + 49 +25.3999999999999986 + 74 +0 + 49 +-12.6999999999999993 + 74 +0 + 0 +LTYPE + 5 +52 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +BORDER + 70 +0 + 3 +Border __ __ . __ __ . __ __ . __ __ . __ __ . + 72 +65 + 73 +6 + 40 +44.4499999999999957 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +12.6999999999999993 + 74 +0 + 49 +-6.2999999999999998 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-6.2999999999999998 + 74 +0 + 0 +LTYPE + 5 +53 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO09W100 + 70 +0 + 3 +ISO long-dash double-short-dash ____ __ __ ____ + 72 +65 + 73 +6 + 40 +45.0 + 49 +24.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 49 +6.0 + 74 +0 + 49 +-3.0 + 74 +0 + 0 +LTYPE + 5 +54 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +DOT2 + 70 +0 + 3 +Dot (.5x) ........................................ + 72 +65 + 73 +2 + 40 +3.1749999999999998 + 49 +0.1 + 74 +0 + 49 +-3.0749999999999997 + 74 +0 + 0 +LTYPE + 5 +55 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +PHANTOM + 70 +0 + 3 +Phantom ______ __ __ ______ __ __ ______ + 72 +65 + 73 +6 + 40 +63.5000000000000071 + 49 +31.75 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 49 +6.3499999999999996 + 74 +0 + 49 +-6.3499999999999996 + 74 +0 + 0 +LTYPE + 5 +56 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ACAD_ISO10W100 + 70 +0 + 3 +ISO dash dot __ . __ . __ . __ . __ . __ . __ . + 72 +65 + 73 +4 + 40 +18.0 + 49 +12.0 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 49 +0.1 + 74 +0 + 49 +-2.9500000000000002 + 74 +0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +2 +100 +AcDbSymbolTable + 70 +3 + 0 +LAYER + 5 +10 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 +0 + 62 +7 +420 +16777215 + 6 +Continuous +370 +15 +390 +F + 0 +LAYER + 5 +57 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +details + 70 +0 + 62 +7 +420 +16777215 + 6 +Continuous +370 +5 +390 +F + 0 +LAYER + 5 +58 +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +guns + 70 +0 + 62 +7 +420 +16777215 + 6 +Continuous +370 +5 +390 +F + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +3 +100 +AcDbSymbolTable + 70 +1 + 0 +STYLE + 5 +59 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 +0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 +0 + 42 +2.5 + 3 + + 4 + +1001 +ACAD +1000 +txt +1071 +0 + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +6 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +7 +100 +AcDbSymbolTable + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +9 +100 +AcDbSymbolTable + 70 +1 + 0 +APPID + 5 +12 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 +0 + 0 +APPID + 5 +5A +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +QCAD + 70 +0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +A +100 +AcDbSymbolTable + 70 +1 +100 +AcDbDimStyleTable + 71 +0 + 0 +DIMSTYLE +105 +27 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +Standard + 41 +0.125 + 42 +0.03125 + 43 +3.75 + 44 +0.0625 + 70 +0 + 73 +0 + 74 +0 + 77 +1 + 78 +8 +140 +0.125 +141 +2.5 +143 +0.03937007874016 +147 +0.03125 +171 +3 +172 +1 +271 +2 +272 +2 +274 +3 +278 +44 +283 +0 +284 +8 +340 +59 + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +100 +AcDbSymbolTable + 70 +1 + 0 +BLOCK_RECORD + 5 +1F +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +22 + 0 +BLOCK_RECORD + 5 +1B +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +1E + 0 +BLOCK_RECORD + 5 +23 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space0 +340 +26 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +20 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Model_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Model_Space + 1 + + 0 +ENDBLK + 5 +21 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +1C +100 +AcDbEntity + 67 +1 + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space + 1 + + 0 +ENDBLK + 5 +1D +100 +AcDbEntity + 67 +1 + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +24 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space0 + 70 +0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space0 + 1 + + 0 +ENDBLK + 5 +25 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LINE + 5 +5B +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +0.0 + 20 +4.25 + 30 +0.0 + 11 +0.0000000000000001 + 21 +5.75 + 31 +0.0 + 0 +LINE + 5 +5C +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +0.0000000000000001 + 20 +5.75 + 30 +0.0 + 11 +1.0 + 21 +6.0 + 31 +0.0 + 0 +LINE + 5 +5D +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +1.0 + 20 +6.0 + 30 +0.0 + 11 +0.5 + 21 +7.5 + 31 +0.0 + 0 +LINE + 5 +5E +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +0.5 + 20 +7.5 + 30 +0.0 + 11 +2.5 + 21 +7.5 + 31 +0.0 + 0 +LINE + 5 +5F +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +2.5 + 20 +7.5 + 30 +0.0 + 11 +4.0 + 21 +6.0 + 31 +0.0 + 0 +LINE + 5 +60 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +4.0 + 20 +6.0 + 30 +0.0 + 11 +7.0 + 21 +6.4000000000000004 + 31 +0.0 + 0 +LINE + 5 +61 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +7.0 + 20 +6.4000000000000004 + 30 +0.0 + 11 +7.0 + 21 +6.0 + 31 +0.0 + 0 +LINE + 5 +62 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +7.0 + 20 +6.0 + 30 +0.0 + 11 +9.0 + 21 +6.0 + 31 +0.0 + 0 +LINE + 5 +63 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +9.0 + 20 +6.0 + 30 +0.0 + 11 +9.9000000000000004 + 21 +5.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +64 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +9.9000000000000004 + 20 +5.2999999999999998 + 30 +0.0 + 11 +13.4000000000000004 + 21 +5.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +65 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +13.4000000000000004 + 20 +5.2999999999999998 + 30 +0.0 + 11 +12.9000000000000004 + 21 +4.7999999999999998 + 31 +0.0 + 0 +LINE + 5 +66 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +12.9000000000000004 + 20 +4.7999999999999998 + 30 +0.0 + 11 +15.9000000000000004 + 21 +4.7999999999999998 + 31 +0.0 + 0 +LINE + 5 +67 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +15.9000000000000004 + 20 +4.7999999999999998 + 30 +0.0 + 11 +16.8999999999999986 + 21 +4.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +68 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +13.8999999999999986 + 20 +4.0 + 30 +0.0 + 11 +0.9999999999999982 + 21 +4.0 + 31 +0.0 + 0 +LINE + 5 +69 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +0.9999999999999982 + 20 +4.0 + 30 +0.0 + 11 +0.0 + 21 +4.25 + 31 +0.0 + 0 +LINE + 5 +6A +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +13.8999999999999986 + 20 +4.0 + 30 +0.0 + 11 +14.6499999999999986 + 21 +4.0750000000000002 + 31 +0.0 + 0 +LINE + 5 +6B +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +14.6499999999999986 + 20 +4.0750000000000002 + 30 +0.0 + 11 +15.3999999999999986 + 21 +4.1500000000000004 + 31 +0.0 + 0 +LINE + 5 +6C +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +15.3999999999999986 + 20 +4.1500000000000004 + 30 +0.0 + 11 +16.1499999999999986 + 21 +4.2249999999999996 + 31 +0.0 + 0 +LINE + 5 +6D +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +16.1499999999999986 + 20 +4.2249999999999996 + 30 +0.0 + 11 +16.8999999999999986 + 21 +4.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +6E +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +9.8999999999999986 + 20 +5.2999999999999998 + 30 +0.0 + 11 +9.6999999999999993 + 21 +5.0 + 31 +0.0 + 0 +LINE + 5 +6F +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +9.6999999999999993 + 20 +5.0 + 30 +0.0 + 11 +7.1999999999999993 + 21 +5.0 + 31 +0.0 + 0 +LINE + 5 +70 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +7.1999999999999993 + 20 +5.0 + 30 +0.0 + 11 +7.1999999999999993 + 21 +6.0 + 31 +0.0 + 0 +LINE + 5 +71 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +11.9999999999999982 + 20 +5.2999999999999998 + 30 +0.0 + 11 +11.7999999999999989 + 21 +5.0 + 31 +0.0 + 0 +LINE + 5 +72 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +11.7999999999999989 + 20 +5.0 + 30 +0.0 + 11 +11.0999999999999996 + 21 +5.0 + 31 +0.0 + 0 +LINE + 5 +73 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +11.0999999999999996 + 20 +5.0 + 30 +0.0 + 11 +11.2999999999999989 + 21 +5.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +74 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +11.6999999999999993 + 20 +5.0 + 30 +0.0 + 11 +11.8999999999999986 + 21 +5.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +75 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +11.5999999999999996 + 20 +5.0 + 30 +0.0 + 11 +11.7999999999999989 + 21 +5.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +76 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +11.4999999999999982 + 20 +5.0 + 30 +0.0 + 11 +11.6999999999999993 + 21 +5.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +77 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +11.3999999999999986 + 20 +5.0 + 30 +0.0 + 11 +11.5999999999999996 + 21 +5.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +78 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +11.2999999999999989 + 20 +5.0 + 30 +0.0 + 11 +11.4999999999999982 + 21 +5.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +79 +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +11.1999999999999993 + 20 +5.0 + 30 +0.0 + 11 +11.3999999999999986 + 21 +5.2999999999999998 + 31 +0.0 + 0 +LINE + 5 +7A +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +7.0 + 20 +6.2000000000000002 + 30 +0.0 + 11 +7.2999999999999998 + 21 +6.1999999999999993 + 31 +0.0 + 0 +ARC + 5 +7B +100 +AcDbEntity + 8 +details + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbCircle + 10 +7.2999999999999998 + 20 +6.0 + 30 +0.0 + 40 +0.1999999999999993 +100 +AcDbArc + 50 +360.0 + 51 +90.0 + 0 +LINE + 5 +7C +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +0.9999999999999999 + 20 +6.0 + 30 +0.0 + 11 +4.0 + 21 +6.0 + 31 +0.0 + 0 +LINE + 5 +7D +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +1.0 + 20 +5.0 + 30 +0.0 + 11 +4.0 + 21 +5.0 + 31 +0.0 + 0 +LINE + 5 +7E +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +2.5 + 20 +4.7000000000000002 + 30 +0.0 + 11 +0.5 + 21 +4.7000000000000002 + 31 +0.0 + 0 +LINE + 5 +7F +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +1.0 + 20 +5.0 + 30 +0.0 + 11 +0.5 + 21 +4.7000000000000002 + 31 +0.0 + 0 +LINE + 5 +80 +100 +AcDbEntity + 8 +0 + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +2.5 + 20 +4.7000000000000002 + 30 +0.0 + 11 +4.0 + 21 +5.0 + 31 +0.0 + 0 +LINE + 5 +81 +100 +AcDbEntity + 8 +guns + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +14.2749999999999986 + 20 +4.0374999999999996 + 30 +0.0 + 11 +16.0749999999999993 + 21 +4.0374999999999996 + 31 +0.0 + 0 +LINE + 5 +82 +100 +AcDbEntity + 8 +guns + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +16.0749999999999993 + 20 +4.0374999999999996 + 30 +0.0 + 11 +16.0749999999999993 + 21 +4.2157 + 31 +0.0 + 0 +LINE + 5 +83 +100 +AcDbEntity + 8 +guns + 62 +256 +370 +-1 + 48 +1.0 + 6 +BYLAYER +100 +AcDbLine + 10 +16.0749999999999993 + 20 +4.1265999999999998 + 30 +0.0 + 11 +15.0249999999999986 + 21 +4.1125000000000007 + 31 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +C +100 +AcDbDictionary +280 +0 +281 +1 + 3 +ACAD_GROUP +350 +D + 3 +ACAD_LAYOUT +350 +1A + 3 +ACAD_MLINESTYLE +350 +17 + 3 +ACAD_PLOTSETTINGS +350 +19 + 3 +ACAD_PLOTSTYLENAME +350 +E + 3 +AcDbVariableDictionary +350 +84 + 3 +QCAD_OBJECTS +350 +85 + 0 +DICTIONARY + 5 +D +100 +AcDbDictionary +280 +0 +281 +1 + 0 +ACDBDICTIONARYWDFLT + 5 +E +100 +AcDbDictionary +281 +1 + 3 +Normal +350 +F +100 +AcDbDictionaryWithDefault +340 +F + 0 +ACDBPLACEHOLDER + 5 +F + 0 +DICTIONARY + 5 +17 +100 +AcDbDictionary +280 +0 +281 +1 + 3 +Standard +350 +18 + 0 +MLINESTYLE + 5 +18 +100 +AcDbMlineStyle + 2 +STANDARD + 70 +0 + 3 + + 62 +256 + 51 +90.0 + 52 +90.0 + 71 +2 + 49 +0.5 + 62 +256 + 6 +BYLAYER + 49 +-0.5 + 62 +256 + 6 +BYLAYER + 0 +DICTIONARY + 5 +19 +100 +AcDbDictionary +280 +0 +281 +1 + 0 +DICTIONARY + 5 +1A +100 +AcDbDictionary +281 +1 + 3 +Layout1 +350 +1E + 3 +Layout2 +350 +26 + 3 +Model +350 +22 + 0 +LAYOUT + 5 +1E +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 +1 + 71 +1 + 10 +0.0 + 20 +0.0 + 11 +420.0 + 21 +297.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +100000000000000000000.0 + 24 +100000000000000000000.0 + 34 +100000000000000000000.0 + 15 +-100000000000000000000.0 + 25 +-100000000000000000000.0 + 35 +-100000000000000000000.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +0 +330 +1B + 0 +LAYOUT + 5 +22 +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +1712 + 72 +0 + 73 +0 + 74 +0 + 7 + + 75 +0 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Model + 70 +1 + 71 +0 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +0 +330 +1F + 0 +LAYOUT + 5 +26 +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 + + 6 + + 40 +0.0 + 41 +0.0 + 42 +0.0 + 43 +0.0 + 44 +0.0 + 45 +0.0 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 +688 + 72 +0 + 73 +0 + 74 +5 + 7 + + 75 +16 +147 +1.0 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout2 + 70 +1 + 71 +2 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 +0 +330 +23 + 0 +DICTIONARY + 5 +84 +100 +AcDbDictionary +281 +1 + 3 +DIMASSOC +350 +87 + 3 +HIDETEXT +350 +86 + 0 +DICTIONARYVAR + 5 +86 +100 +DictionaryVariables +280 +0 + 1 +2 + 0 +DICTIONARYVAR + 5 +87 +100 +DictionaryVariables +280 +0 + 1 +1 + 0 +DICTIONARY + 5 +85 +100 +AcDbDictionary +281 +1 + 3 +ColorSettings/BackgroundColor +350 +88 + 3 +ColorSettings/ColorMode +350 +89 + 3 +Grid/DisplayGrid00 +350 +8A + 3 +Grid/DisplayGrid01 +350 +8B + 3 +Grid/DisplayGrid02 +350 +8C + 3 +Grid/DisplayGrid03 +350 +8D + 3 +Grid/GridSpacingX00 +350 +8E + 3 +Grid/GridSpacingX01 +350 +8F + 3 +Grid/GridSpacingX02 +350 +90 + 3 +Grid/GridSpacingX03 +350 +91 + 3 +Grid/GridSpacingY00 +350 +92 + 3 +Grid/GridSpacingY01 +350 +93 + 3 +Grid/GridSpacingY02 +350 +94 + 3 +Grid/GridSpacingY03 +350 +95 + 3 +Grid/IsometricGrid00 +350 +96 + 3 +Grid/IsometricGrid01 +350 +97 + 3 +Grid/IsometricGrid02 +350 +98 + 3 +Grid/IsometricGrid03 +350 +99 + 3 +Grid/IsometricProjection00 +350 +9A + 3 +Grid/IsometricProjection01 +350 +9B + 3 +Grid/IsometricProjection02 +350 +9C + 3 +Grid/IsometricProjection03 +350 +9D + 3 +Grid/MetaGridSpacingX00 +350 +9E + 3 +Grid/MetaGridSpacingX01 +350 +9F + 3 +Grid/MetaGridSpacingX02 +350 +A0 + 3 +Grid/MetaGridSpacingX03 +350 +A1 + 3 +Grid/MetaGridSpacingY00 +350 +A2 + 3 +Grid/MetaGridSpacingY01 +350 +A3 + 3 +Grid/MetaGridSpacingY02 +350 +A4 + 3 +Grid/MetaGridSpacingY03 +350 +A5 + 3 +MultiPageSettings/Columns +350 +A6 + 3 +MultiPageSettings/GlueMarginsBottom +350 +A7 + 3 +MultiPageSettings/GlueMarginsLeft +350 +A8 + 3 +MultiPageSettings/GlueMarginsRight +350 +A9 + 3 +MultiPageSettings/GlueMarginsTop +350 +AA + 3 +MultiPageSettings/PrintCropMarks +350 +AB + 3 +MultiPageSettings/Rows +350 +AC + 3 +PageSettings/OffsetX +350 +AD + 3 +PageSettings/OffsetY +350 +AE + 3 +PageSettings/PageOrientation +350 +AF + 3 +PageSettings/PaperHeight +350 +B0 + 3 +PageSettings/PaperWidth +350 +B1 + 3 +PageSettings/Scale +350 +B2 + 3 +PageSettings/ShowPaperBorders +350 +B3 + 3 +PageTagSettings/EnablePageTags +350 +B4 + 3 +PageTagSettings/TagAlignment +350 +B5 + 3 +PageTagSettings/TagFont +350 +B6 + 3 +PageTagSettings/TagPosition +350 +B7 + 3 +QCADVersion +350 +B8 + 3 +UnitSettings/PaperUnit +350 +B9 + 3 +ViewportCenter +350 +BA + 3 +ViewportHeight +350 +BB + 3 +ViewportWidth +350 +BC + 0 +XRECORD + 5 +89 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +FullColor + 0 +XRECORD + 5 +8A +330 +85 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +8B +330 +85 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +8C +330 +85 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +8D +330 +85 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +8E +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +8F +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +90 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +91 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +92 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +93 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +94 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +95 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +96 +330 +85 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +97 +330 +85 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +98 +330 +85 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +99 +330 +85 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +9A +330 +85 +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +9B +330 +85 +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +9C +330 +85 +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +9D +330 +85 +100 +AcDbXrecord +280 +1 + 90 +65537 + 0 +XRECORD + 5 +9E +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +9F +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +A0 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +A1 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +A2 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +A3 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +A4 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +A5 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +auto + 0 +XRECORD + 5 +A6 +330 +85 +100 +AcDbXrecord +280 +1 + 90 +1 + 0 +XRECORD + 5 +A7 +330 +85 +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +A8 +330 +85 +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +A9 +330 +85 +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +AA +330 +85 +100 +AcDbXrecord +280 +1 + 40 +10.0 + 0 +XRECORD + 5 +AB +330 +85 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +AC +330 +85 +100 +AcDbXrecord +280 +1 + 90 +1 + 0 +XRECORD + 5 +AD +330 +85 +100 +AcDbXrecord +280 +1 + 40 +-96.5499999999999972 + 0 +XRECORD + 5 +AE +330 +85 +100 +AcDbXrecord +280 +1 + 40 +-142.75 + 0 +XRECORD + 5 +AF +330 +85 +100 +AcDbXrecord +280 +1 +1000 +Portrait + 0 +XRECORD + 5 +B0 +330 +85 +100 +AcDbXrecord +280 +1 + 40 +297.0 + 0 +XRECORD + 5 +B1 +330 +85 +100 +AcDbXrecord +280 +1 + 40 +210.0 + 0 +XRECORD + 5 +B2 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +1:1 + 0 +XRECORD + 5 +B3 +330 +85 +100 +AcDbXrecord +280 +1 +290 +1 + 0 +XRECORD + 5 +B4 +330 +85 +100 +AcDbXrecord +280 +1 +290 +0 + 0 +XRECORD + 5 +B5 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +Inside + 0 +XRECORD + 5 +B6 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +Arial,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1 + 0 +XRECORD + 5 +B7 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +TopLeft + 0 +XRECORD + 5 +B8 +330 +85 +100 +AcDbXrecord +280 +1 +1000 +3.32.3.1 + 0 +XRECORD + 5 +B9 +330 +85 +100 +AcDbXrecord +280 +1 + 90 +4 + 0 +XRECORD + 5 +BB +330 +85 +100 +AcDbXrecord +280 +1 + 40 +344.0681458003169837 + 0 +XRECORD + 5 +BC +330 +85 +100 +AcDbXrecord +280 +1 + 40 +632.1251980982567602 + 0 +ENDSEC + 0 +EOF diff --git a/src/const.hpp b/src/const.hpp new file mode 100644 index 0000000..aba54f2 --- /dev/null +++ b/src/const.hpp @@ -0,0 +1,13 @@ +#include + +#ifndef CONST_NS +#define CONST_NS + +constexpr int SCREEN_WIDTH = 1600; +constexpr int SCREEN_HEIGHT = 1200; +constexpr int WORLD_WIDTH = 20000; +constexpr int WORLD_HEIGHT = 200000; +constexpr int TARGET_FPS = 120; +constexpr Uint64 TARGET_FRAME_TIME_NS = 1'000'000'000 / TARGET_FPS; + +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..232aefd --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,127 @@ +#include "const.hpp" +#include "types.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +sdl_session main_sdl_session; + +#define WIDTH_RATIO 15 +#define HEIGHT_RATIO 41.53846153846154 +#define MIN_INPUT_DELAY 0 + +int main(int argc, char *argv[]) { + SDL_Init(SDL_INIT_VIDEO); + + const SDL_DisplayMode *mode = + SDL_GetCurrentDisplayMode(SDL_GetPrimaryDisplay()); + + main_sdl_session.window = + SDL_CreateWindow("Vector Blow", mode->w, mode->h, SDL_WINDOW_FULLSCREEN); + + main_sdl_session.renderer = + SDL_CreateRenderer(main_sdl_session.window, "gpu,vulcan"); + + SDL_Texture *player_ship_texture = nullptr; + { + SDL_IOStream *texture_file = SDL_IOFromFile("assets/player_ship.svg", "r"); + SDL_Surface *player_ship_surface = IMG_LoadSizedSVG_IO( + texture_file, + static_cast(static_cast(mode->w) / + static_cast(WIDTH_RATIO)), + static_cast(static_cast(mode->h) / + static_cast(HEIGHT_RATIO))); + + SDL_CloseIO(texture_file); + + player_ship_texture = SDL_CreateTextureFromSurface( + main_sdl_session.renderer, player_ship_surface); + SDL_DestroySurface(player_ship_surface); + } + + SDL_FRect player_ship_rect = { + 0, 0, + static_cast(static_cast(mode->w) / + static_cast(WIDTH_RATIO)), + static_cast(static_cast(mode->h) / + static_cast(HEIGHT_RATIO))}; + + bool running = true; + Uint64 lastFrameTime = SDL_GetTicksNS(); + float deltaTime = 0.0f; + + Uint8 player_ship_speed = 1; + while (running) { + const Uint64 frameStart = SDL_GetTicksNS(); + + SDL_Event event; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_EVENT_QUIT: + running = false; + break; + default: + break; + } + } + + const bool *keystate = SDL_GetKeyboardState(NULL); + static Uint32 last_toggle_direction[4]; + std::memset(last_toggle_direction, 0, sizeof(last_toggle_direction)); + if ((keystate[SDL_SCANCODE_DOWN] || keystate[SDL_SCANCODE_S]) && + (SDL_GetTicks() - last_toggle_direction[0] > MIN_INPUT_DELAY)) { + player_ship_rect.y += player_ship_speed; + last_toggle_direction[0] = SDL_GetTicks(); + } + if ((keystate[SDL_SCANCODE_UP] || keystate[SDL_SCANCODE_W]) && + (SDL_GetTicks() - last_toggle_direction[1] > MIN_INPUT_DELAY)) { + player_ship_rect.y -= player_ship_speed; + last_toggle_direction[1] = SDL_GetTicks(); + } + if ((keystate[SDL_SCANCODE_RIGHT] || keystate[SDL_SCANCODE_D]) && + (SDL_GetTicks() - last_toggle_direction[2] > MIN_INPUT_DELAY)) { + player_ship_rect.x += player_ship_speed; + last_toggle_direction[2] = SDL_GetTicks(); + } + if ((keystate[SDL_SCANCODE_LEFT] || keystate[SDL_SCANCODE_A]) && + (SDL_GetTicks() - last_toggle_direction[3] > MIN_INPUT_DELAY)) { + player_ship_rect.x -= player_ship_speed; + last_toggle_direction[3] = SDL_GetTicks(); + } + + SDL_SetRenderDrawColor(main_sdl_session.renderer, 0, 0, 0, 255); + SDL_RenderClear(main_sdl_session.renderer); + + SDL_RenderTexture(main_sdl_session.renderer, player_ship_texture, nullptr, + &player_ship_rect); + + SDL_RenderPresent(main_sdl_session.renderer); + + const Uint64 frameTime = SDL_GetTicksNS() - frameStart; + if (frameTime < TARGET_FRAME_TIME_NS) { + const Uint64 sleepTime = TARGET_FRAME_TIME_NS - frameTime; + if (sleepTime >= 2'000'000) { + SDL_DelayNS(sleepTime - 2'000'000); + } + while (SDL_GetTicksNS() - frameStart < TARGET_FRAME_TIME_NS) { + } + } + + deltaTime = (SDL_GetTicksNS() - lastFrameTime) / 1e9f; + lastFrameTime = SDL_GetTicksNS(); + } + + SDL_DestroyTexture(player_ship_texture); + SDL_DestroyRenderer(main_sdl_session.renderer); + SDL_DestroyWindow(main_sdl_session.window); + SDL_Quit(); + + return 0; +} diff --git a/src/types.hpp b/src/types.hpp new file mode 100644 index 0000000..142cd42 --- /dev/null +++ b/src/types.hpp @@ -0,0 +1,85 @@ +#include "const.hpp" +#include +#include +#include +#include +#include + +#ifndef TYPES_NS +#define TYPES_NS + +struct Angle { +private: + float value{0}; + + void normalize() { + value = std::fmod(value, 360); + if (value < 0) + value += 360; // Handle negative values + } + +public: + // Constructor + Angle(int val = 0) : value(val) { normalize(); } + + // Assignment operator + Angle &operator=(int val) { + value = val; + normalize(); + return *this; + } + + // Compound assignment + Angle &operator+=(int rhs) { + value += rhs; + normalize(); + return *this; + } + + Angle &operator-=(int rhs) { + value -= rhs; + normalize(); + return *this; + } + + // Type conversion + operator int() const { return value; } + + // Stream output + friend std::ostream &operator<<(std::ostream &os, const Angle &a) { + return os << a.value; + } +}; + +struct basic_cords { + float x; + float y; +}; + +struct Entity { + SDL_FRect position; + SDL_FRect Tposition; + bool gotoT = false; + SDL_Texture *texture; + SDL_Rect srcRect; + float speed; + Angle angle = 0; + + basic_cords Central_position(std::optional x = std::nullopt, + std::optional y = std::nullopt) { + if (x != std::nullopt) { + position.x = *x - position.w / 2; + } + if (y != std::nullopt) { + position.y = *y - position.h / 2; + } + + return {position.x + position.w / 2, position.y + position.h / 2}; + } +}; + +struct sdl_session { + SDL_Window *window; + SDL_Renderer *renderer; +}; +#endif \ No newline at end of file