summaryrefslogtreecommitdiff
path: root/zombie.gd
blob: aa024c990f675c135baafb96695408ae4ed3ee26 (plain) (blame)
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
class_name Zombie extends RigidBody

enum Dir {
	none
	up
	down
	left
	right
}

var dir = Dir.none
var lastdir
var tlast = 0
var frame_i = 0

var images: Dictionary = {}

# Called when the node enters the scene tree for the first time.
func _ready():
		pass # Replace with function body.

func _physics_process(delta):
	var updown = ((Input.get_action_strength("p1_down")
		- Input.get_action_strength("p1_up")) * 2 * delta)
	var rightleft = ((Input.get_action_strength("p1_right")
		- Input.get_action_strength("p1_left")) * 2 * delta)


	if rightleft:
		if rightleft > 0:
			dir = Dir.right
		else:
			dir = Dir.left
	elif updown:
		if updown > 0:
			dir = Dir.up
		else:
			dir = Dir.down
	else:
		dir = Dir.none

	self.translate(Vector3(rightleft, 0, updown))

func getid() -> String:
	var id = ""

	match dir:
		Dir.none:
			id += "n"
		Dir.up:
			id += "f"
		Dir.down:
			id += "b"
		Dir.left:
			id += "l"
		Dir.right:
			id += "r"

	id += String(frame_i)
	return id

func setimg(id: String):
	var mesh = get_node("MeshInstance")
	var material = mesh.get_surface_material(0).duplicate()

	material.albedo_texture = images[id]
	mesh.set_surface_material(0, material)

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
	tlast += delta

	if tlast > 0.15:
		tlast = 0
		frame_i += 1

		if frame_i >= 8:
			frame_i = 0

	if lastdir != dir:
		tlast = 0
		frame_i = 0

	lastdir = dir
	setimg(getid())

func _init():
	for f in ["n", "f", "b", "l", "r"]:
		for i in range(8):
			var id = f + String(i)
			var path = "res://zombie/" + id + ".png"
			images[id] = load(path)