Skip to content

Instantly share code, notes, and snippets.

@fowlmouth
Last active December 18, 2015 17:29
Show Gist options
  • Save fowlmouth/5818938 to your computer and use it in GitHub Desktop.
Save fowlmouth/5818938 to your computer and use it in GitHub Desktop.
import json
import fowltek/tmaybe, fowltek/vector_math
type
TRecordID = int
TDataSet* = object ## acts as a counter for the IDs, after data is read, can be used to validate IDs
itemCount, projectileCount, vehicleCount: int
items: seq[PItemRecord]
projectils: seq[int] #pprojectilerecord
vehicles: seq[PVehicleRecord]
PDataRecord* = ref TDataRecord
TDataRecord* = object {.inheritable.}
id*: TRecordID
name*: string
TEmitterRecord = object
cooldown, reloadTime: float
roundsPerClip: int
ammoID: TMaybe[TRecordID]
PItemEffect = ref object {.inheritable.}
PRecoil* = ref object of PItemEffect
force*: float
PCreateProjectile* = ref object of PItemEffect
proj*: TRecordID
angleOffset*: float
PMultiProjectile* = ref object of PItemEffect
projectiles: seq[PCreateProjectile]
PItemRecord = ref object of PDataRecord
emitter: TEmitterRecord
effect: seq[PItemEffect]
PVehicleRecord = ref object of PDataRecord
maxHP, mesh: int
discard """
{
"items": {
"AR 606": {
"emit": {
"cooldown": 80,
"reload": 120,
"roundsPerClip": 3
}, "effects": [
["create-projectile", {
"projectile": "AR 606 Round" }],
["recoil", {
"force": 42 }]
]
}
}
}
"""
proc loadItem (result: var TDataSet; name: string; data: PJsonNode) =
assert data.kind == JObject and data.hasKey("emit") and data.hasKey("effect")
let emit_data = data["emit"]
var emitter = TEmitterRecord()
proc loadItemsFrom (result: var TDataSet; node: PJsonNode) =
assert node.kind == JObject
for key, val in pairs(node):
result.loadItem key, val
proc loadVehiclesFrom (result: var TDataSet; node: PJsonNode) =
nil
proc loadData * (node: PJsonNode): TDataSet =
if node.hasKey("items"):
result.loadItemsFrom node["items"]
if node.hasKey("vehicles"):
result.loadVehiclesFrom node["vehicles"]
type
TVehicleInstance = object
veh: PVehicleRecord
hp: float
pos, vel, acc: TVector2[float]
orientation: float
PItemInstance* = object
item: PItemRecord
quantity: int
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment