-
Notifications
You must be signed in to change notification settings - Fork 1
/
Collectible.swift
55 lines (48 loc) · 1.96 KB
/
Collectible.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
//
// Collectible.swift
// star-dash
//
// Created by Lau Rui han on 12/3/24.
//
import Foundation
class Collectible: Entity {
let id: EntityId
private let position: CGPoint
private let sprite: String
private let points: Int
private let size: CGSize
init(id: EntityId, position: CGPoint, sprite: String, points: Int, size: CGSize) {
self.id = id
self.position = position
self.sprite = sprite
self.points = points
self.size = size
}
convenience init(position: CGPoint, sprite: String, points: Int, size: CGSize) {
self.init(id: UUID(), position: position, sprite: sprite, points: points, size: size)
}
func setUpAndAdd(to: EntityManager) {
let positionComponent = PositionComponent(entityId: self.id, position: self.position, rotation: .zero)
let physicsComponent = PhysicsComponent(entityId: self.id, size: self.size)
physicsComponent.affectedByGravity = false
physicsComponent.isDynamic = false
physicsComponent.categoryBitMask = PhysicsConstants.CollisionCategory.collectible
physicsComponent.contactTestMask = PhysicsConstants.ContactMask.collectible
physicsComponent.collisionBitMask = PhysicsConstants.CollisionMask.collectible
let spriteComponent = SpriteComponent(entityId: self.id, image: sprite, textureAtlas: nil, size: size)
let pointsComponent = PointsComponent(entityId: self.id, points: points)
to.add(entity: self)
to.add(component: positionComponent)
to.add(component: physicsComponent)
to.add(component: spriteComponent)
to.add(component: pointsComponent)
}
static func createCoinCollectible(position: CGPoint) -> Collectible {
Collectible(
position: position,
sprite: EntityConstants.CoinCollectible.sprite,
points: EntityConstants.CoinCollectible.points,
size: EntityConstants.CoinCollectible.size
)
}
}