-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPackage.swift
122 lines (106 loc) · 2.98 KB
/
Package.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// swift-tools-version:5.5
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
//MARK: - Package
let package = Package(
name: "swift-raylib-examples",
platforms: [
.macOS(.v12),
],
dependencies: [
.package(url: "https://github.com/Lancelotbronner/swift-raylib", branch: "main"),
],
targets: [
// Core Module
.example(.core, "Basic Window"),
.example(.core, "Input Keys"),
.example(.core, "Input Mouse"),
.example(.core, "Input Mouse Wheel"),
.example(.core, "2D Camera"),
.example(.core, "2D Camera Mouse Zoom"),
.example(.core, "2D Camera Platformer"),
.example(.core, "Letterboxed Window"),
.example(.core, "Drop Files"),
.example(.core, "Scissor Test"),
// .example(.core, "3D First Person"),
// Shapes Module
.example(.shapes, "Basic Shapes"),
.example(.shapes, "Bouncing Ball"),
.example(.shapes, "Color Palette"),
.example(.shapes, "Following Eyes"),
// Textures Module
.example(.textures, "Atlas", [
.copy("scarfy.png"),
]),
.example(.textures, "Blend Modes", [
.copy("background.png"),
.copy("foreground.png"),
]),
.example(.textures, "Image Generation"),
.example(.textures, "Logo Raylib", [
.copy("logo.png"),
]),
.example(.textures, "Sprite Animation", [
.copy("scarfy.png"),
]),
// Audio Module
.example(.audio, "Module Playing", [
.copy("mini1111.xm"),
]),
// Classic Games
.classic("Arkanoid"),
// .classic("Platformer"),
.classic("Snake"),
// Games
// .game("HexTrader", resources: true, assets: true),
// .game("RPG Example", resources: true),
]
)
//MARK: - Templates
extension Target.Dependency {
static let raylib = Self.product(name: "RaylibKit", package: "swift-raylib")
}
extension Target {
static func example(_ module: RaylibModule, _ name: String, _ resources: [Resource]? = nil, _ exclude: [String] = [], license: Bool = false) -> Target {
var exclude = exclude
if license {
exclude.append("LICENSE.md")
}
let target = Target.executableTarget(
name: "\(module.rawValue) - \(name)",
dependencies: [.raylib],
path: "Sources/\(module.rawValue)/\(name)",
exclude: exclude,
resources: resources)
return target
}
static func classic(_ name: String, _ resources: [Resource]? = nil) -> Target {
let target = Target.executableTarget(
name: "Classic Game - \(name)",
dependencies: [.raylib],
path: "Sources/Classics/\(name)",
resources: resources)
return target
}
static func game(_ name: String, resources: Bool = false, assets: Bool = false) -> Target {
let target = Target.executableTarget(
name: "Game - \(name)",
dependencies: [.raylib],
path: "Sources/Games/\(name)",
resources: [])
if resources {
target.resources?.append(.copy("Resources/"))
}
if assets {
target.exclude.append("Assets")
}
return target
}
}
//MARK: - Utilites
enum RaylibModule: String {
case core = "Core"
case shapes = "Shapes"
case textures = "Textures"
case audio = "Audio"
}