3d
This commit is contained in:
+107
@@ -0,0 +1,107 @@
|
||||
package main
|
||||
|
||||
import rand "core:math/rand"
|
||||
import rl "vendor:raylib"
|
||||
|
||||
INV_SIZE :: 16
|
||||
|
||||
ItemKind :: enum {
|
||||
None,
|
||||
Weapon,
|
||||
Armor,
|
||||
Amulet,
|
||||
Potion,
|
||||
}
|
||||
|
||||
Item :: struct {
|
||||
kind: ItemKind,
|
||||
name: string,
|
||||
level: i32,
|
||||
dmg: i32,
|
||||
crit: f32,
|
||||
atk_spd: f32,
|
||||
armor: i32,
|
||||
hp_bonus: i32,
|
||||
heal: i32,
|
||||
}
|
||||
|
||||
GroundItem :: struct {
|
||||
using base: BaseEntity,
|
||||
item: Item,
|
||||
}
|
||||
|
||||
item_color :: proc(kind: ItemKind) -> rl.Color {
|
||||
#partial switch kind {
|
||||
case .Weapon:
|
||||
return {200, 120, 60, 255}
|
||||
case .Armor:
|
||||
return {80, 140, 220, 255}
|
||||
case .Amulet:
|
||||
return {180, 100, 220, 255}
|
||||
case .Potion:
|
||||
return {80, 220, 80, 255}
|
||||
case .None:
|
||||
return {120, 120, 120, 255}
|
||||
}
|
||||
return {120, 120, 120, 255}
|
||||
}
|
||||
|
||||
item_kind_name :: proc(kind: ItemKind) -> string {
|
||||
#partial switch kind {
|
||||
case .Weapon:
|
||||
return "Sword"
|
||||
case .Armor:
|
||||
return "Armor"
|
||||
case .Amulet:
|
||||
return "Amulet"
|
||||
case .Potion:
|
||||
return "Potion"
|
||||
case .None:
|
||||
return "Empty"
|
||||
}
|
||||
return "Empty"
|
||||
}
|
||||
|
||||
make_ground_item :: proc(pos: rl.Vector2, item: Item) -> Entity {
|
||||
return Entity {
|
||||
v = GroundItem {
|
||||
base = BaseEntity {
|
||||
pos = pos,
|
||||
col_size = 12,
|
||||
gfx = {0 = GfxCircle{pos = {}, radius = 7, color = item_color(item.kind)}},
|
||||
},
|
||||
item = item,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
random_item :: proc(level: i32) -> Item {
|
||||
kind := ItemKind(rand.int_max(4) + 1)
|
||||
item := Item {
|
||||
kind = kind,
|
||||
name = item_kind_name(kind),
|
||||
level = level,
|
||||
}
|
||||
|
||||
switch kind {
|
||||
case .Weapon:
|
||||
item.dmg = 6 + level * 3 + i32(rand.int_max(6))
|
||||
item.crit = 0.05 + f32(rand.int_max(15)) * 0.01
|
||||
item.atk_spd = f32(rand.int_max(20)) * 0.01
|
||||
case .Armor:
|
||||
item.armor = 3 + level * 2 + i32(rand.int_max(4))
|
||||
item.hp_bonus = 10 + level * 4 + i32(rand.int_max(10))
|
||||
case .Amulet:
|
||||
item.crit = 0.03 + f32(rand.int_max(12)) * 0.01
|
||||
item.hp_bonus = 5 + level * 2 + i32(rand.int_max(8))
|
||||
item.atk_spd = f32(rand.int_max(15)) * 0.01
|
||||
case .Potion:
|
||||
item.heal = 30 + level * 8 + i32(rand.int_max(15))
|
||||
case .None:
|
||||
{}
|
||||
}
|
||||
return item
|
||||
}
|
||||
|
||||
item_update :: proc(state: ^GameState, i: ^GroundItem, h: Handle, dt: f32) {
|
||||
}
|
||||
Reference in New Issue
Block a user