Average American school board

main
Mathieu GROUSSEAU 2 weeks ago
parent 53f9506de8
commit 8d6dd7f2de

@ -20,6 +20,7 @@
F0143C312DF9813C0086CAAA /* PieceNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0143C302DF9813C0086CAAA /* PieceNode.swift */; };
F0143C342DF987490086CAAA /* PlayerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0143C332DF987490086CAAA /* PlayerType.swift */; };
F0143C362DFA9A000086CAAA /* RulesType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0143C352DFA9A000086CAAA /* RulesType.swift */; };
F05DA2112E002AA00094A4A8 /* BoardNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F05DA2102E002AA00094A4A8 /* BoardNode.swift */; };
F0F59E492DD4958800BE32D6 /* C4.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0F59E432DD492B400BE32D6 /* C4.xcframework */; };
F0F59E4A2DD4958800BE32D6 /* C4Persistance.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0F59E412DD492B400BE32D6 /* C4Persistance.xcframework */; };
F0F59E4B2DD4958800BE32D6 /* C4Players.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0F59E422DD492B400BE32D6 /* C4Players.xcframework */; };
@ -68,6 +69,7 @@
F0143C302DF9813C0086CAAA /* PieceNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PieceNode.swift; sourceTree = "<group>"; };
F0143C332DF987490086CAAA /* PlayerType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerType.swift; sourceTree = "<group>"; };
F0143C352DFA9A000086CAAA /* RulesType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RulesType.swift; sourceTree = "<group>"; };
F05DA2102E002AA00094A4A8 /* BoardNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoardNode.swift; sourceTree = "<group>"; };
F0F59E412DD492B400BE32D6 /* C4Persistance.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = C4Persistance.xcframework; path = ../precompiled/xcframeworks/C4Persistance.xcframework; sourceTree = "<group>"; };
F0F59E422DD492B400BE32D6 /* C4Players.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = C4Players.xcframework; path = ../precompiled/xcframeworks/C4Players.xcframework; sourceTree = "<group>"; };
F0F59E432DD492B400BE32D6 /* C4.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = C4.xcframework; path = ../precompiled/xcframeworks/C4.xcframework; sourceTree = "<group>"; };
@ -198,6 +200,7 @@
children = (
F0143C2A2DF018F20086CAAA /* GameScene.swift */,
F0143C302DF9813C0086CAAA /* PieceNode.swift */,
F05DA2102E002AA00094A4A8 /* BoardNode.swift */,
);
path = SpriteKit;
sourceTree = "<group>";
@ -357,6 +360,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
F05DA2112E002AA00094A4A8 /* BoardNode.swift in Sources */,
F0143C312DF9813C0086CAAA /* PieceNode.swift in Sources */,
F0F59E592DE6EB2A00BE32D6 /* PlayerVSPage.swift in Sources */,
F001A04E2DD48FAB00809561 /* MainMenuView.swift in Sources */,

@ -0,0 +1,34 @@
import Foundation
import SpriteKit
class BoardNode: SKShapeNode {
init(cells: (w: Int, h: Int), size: CGSize) {
super.init()
let path = CGMutablePath()
path.addRect(CGRect(x: 0, y: 0, width: size.width, height: size.height))
for y in 0..<cells.h {
for x in 0..<cells.w {
let border = PieceNode.pieceSize - PieceNode.pieceSize * PieceNode.borderFactor
let offset = border / 2
let size2 = PieceNode.pieceSize - border
path.addEllipse(in: CGRect(
x: CGFloat(x) * PieceNode.pieceSize + offset,
y: CGFloat(y) * PieceNode.pieceSize + offset,
width: size2,
height: size2
))
}
}
self.path = path
fillColor = .blue
strokeColor = .black
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

@ -3,7 +3,7 @@ import SpriteKit
public class GameScene: SKScene {
public static let boardTopMargin: CGFloat = PieceNode.pieceSize / 2
private var boardNode: SKShapeNode
private var boardNode: BoardNode
private var cells: [PieceNode]
private var draggablePiece: PieceNode
@ -12,13 +12,10 @@ public class GameScene: SKScene {
let gWidth = CGFloat(s.w) * PieceNode.pieceSize
let gHeight = boardHeight + Self.boardTopMargin + PieceNode.pieceSize
boardNode = SKShapeNode(rect: CGRect(x: 0, y: 0, width: gWidth, height: boardHeight))
boardNode.fillColor = .blue
boardNode.strokeColor = .black
boardNode = BoardNode(cells: s, size: CGSize(width: gWidth, height: boardHeight))
draggablePiece = PieceNode()
draggablePiece.piece = .init(withOwner: .noOne)
draggablePiece.draggable = true
draggablePiece.position = CGPoint(x: 0, y: boardHeight + Self.boardTopMargin + PieceNode.pieceSize / 2)
cells = (0..<(s.w * s.h)).map({ index in
@ -33,6 +30,7 @@ public class GameScene: SKScene {
})
super.init(size: CGSize(width: gWidth, height: gHeight))
draggablePiece.onDragHandler = self.resetDragPiece
// anchorPoint = CGPoint(x: 0.5, y: 0.5)
backgroundColor = .clear
@ -43,11 +41,14 @@ public class GameScene: SKScene {
addChild(cell)
}
draggablePiece.resetDragPosition()
self.resetDragPiece(piece: draggablePiece)
}
public required init?(coder aDecoder: NSCoder) {
fatalError("Unreachable")
}
}
private func resetDragPiece(piece: PieceNode) {
piece.position = CGPoint(x: self.size.width / 2, y: self.size.height - PieceNode.pieceSize / 2)
}
}

@ -4,13 +4,12 @@ import Connect4Core
class PieceNode : SKNode {
static let pieceSize: CGFloat = 100
static let borderFactor: CGFloat = 0.85
private var gameScene: GameScene { self.scene as! GameScene }
private var circle: SKShapeNode
override var isUserInteractionEnabled: Bool {
get { true }
set { /* fatalError("Unsupported operation: set") */ }
}
var onDragHandler: ((PieceNode) -> ())? = nil
var piece: Piece = .init(withOwner: .noOne) {
didSet {
@ -41,13 +40,15 @@ class PieceNode : SKNode {
}
}
}
var draggable: Bool { self.onDragHandler != nil }
var draggable: Bool = false
private var gameScene: GameScene { self.scene as! GameScene }
override var isUserInteractionEnabled: Bool {
get { true }
set { /* fatalError("Unsupported operation: set") */ }
}
override init() {
circle = SKShapeNode(circleOfRadius: Self.pieceSize / 2 * 0.90)
circle = SKShapeNode(circleOfRadius: Self.pieceSize / 2 * Self.borderFactor)
super.init()
@ -55,13 +56,14 @@ class PieceNode : SKNode {
zPosition = 100
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
convenience init(onReleaseFn: @escaping (PieceNode) -> ()) {
self.init()
self.onDragHandler = onReleaseFn
}
public func resetDragPosition() {
let sc = self.scene!.size
self.position = CGPoint(x: sc.width / 2, y: sc.height - Self.pieceSize / 2)
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func dragTo(position pos: CGPoint) {
@ -69,8 +71,8 @@ class PieceNode : SKNode {
}
private func releaseAt(position pos: CGPoint) {
resetDragPosition()
// TODO
self.dragTo(position: pos)
onDragHandler?(self)
}
#if os(macOS)

Loading…
Cancel
Save