-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathuntitled1.py
126 lines (105 loc) · 4.07 KB
/
untitled1.py
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 03 16:52:24 2012
@author: us997259
"""
#for directx window and functions
import direct.directbase.DirectStart
#for most bus3d stuff
from pandac.PandaModules import *
#for directx object support
from direct.showbase.DirectObject import DirectObject
#for tasks
from direct.task import Task
#for Actors
from direct.actor.Actor import Actor
#for Pandai
from panda3d.ai import *
#for Onscreen GUI
from direct.gui.OnscreenText import OnscreenText
# Globals
speed = 0.75
# Function to put instructions on the screen.
font = loader.loadFont("cmss12")
def addInstructions(pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font = font,
pos=(-1.3, pos), align=TextNode.ALeft, scale = .05)
class World(DirectObject):
def __init__(self):
base.disableMouse()
base.cam.setPosHpr(0,0,55,0,-90,0)
self.loadModels()
self.setAI()
self.setMovement()
def loadModels(self):
# Seeker
ralphStartPos = Vec3(-10, 0, 0)
self.pursuer = Actor("resource/models/cone.egg")
self.pursuer.reparentTo(render)
self.pursuer.setScale(0.5)
self.pursuer.setPos(ralphStartPos)
# Target
self.target = loader.loadModel("resource/models/cone.egg")
self.target.setColor(1,0,0)
self.target.setPos(5,0,0)
self.target.setScale(1)
self.target.reparentTo(render)
# Obstacle 1
self.obstacle1 = loader.loadModel("resource/models/cone.egg")
self.obstacle1.setColor(0,0,1)
self.obstacle1.setPos(2,0,0)
self.obstacle1.setScale(1)
self.obstacle1.reparentTo(render)
# Obstacle 2
self.obstacle2 = loader.loadModel("resource/models/cone.egg")
self.obstacle2.setColor(0,0,1)
self.obstacle2.setPos(5,5,0)
self.obstacle2.setScale(1)
self.obstacle2.reparentTo(render)
# self.pursuer.loop("run")
def setAI(self):
#Creating AI World
self.AIworld = AIWorld(render)
self.AIchar = AICharacter("pursuer",self.pursuer, 100, 0.05, 5)
self.AIworld.addAiChar(self.AIchar)
self.AIbehaviors = self.AIchar.getAiBehaviors()
self.AIbehaviors.pursue(self.target)
# Obstacle avoidance
self.AIbehaviors.obstacleAvoidance(1.0)
self.AIworld.addObstacle(self.obstacle1)
self.AIworld.addObstacle(self.obstacle2)
#AI World update
taskMgr.add(self.AIUpdate,"AIUpdate")
#to update the AIWorld
def AIUpdate(self,task):
self.AIworld.update()
return Task.cont
#All the movement functions for the Target
def setMovement(self):
self.keyMap = {"left":0, "right":0, "up":0, "down":0}
self.accept("arrow_left", self.setKey, ["left",1])
self.accept("arrow_right", self.setKey, ["right",1])
self.accept("arrow_up", self.setKey, ["up",1])
self.accept("arrow_down", self.setKey, ["down",1])
self.accept("arrow_left-up", self.setKey, ["left",0])
self.accept("arrow_right-up", self.setKey, ["right",0])
self.accept("arrow_up-up", self.setKey, ["up",0])
self.accept("arrow_down-up", self.setKey, ["down",0])
#movement task
taskMgr.add(self.Mover,"Mover")
addInstructions(0.9, "Use the Arrow keys to move the Red Target")
def setKey(self, key, value):
self.keyMap[key] = value
def Mover(self,task):
startPos = self.target.getPos()
if (self.keyMap["left"]!=0):
self.target.setPos(startPos + Point3(-speed,0,0))
if (self.keyMap["right"]!=0):
self.target.setPos(startPos + Point3(speed,0,0))
if (self.keyMap["up"]!=0):
self.target.setPos(startPos + Point3(0,speed,0))
if (self.keyMap["down"]!=0):
self.target.setPos(startPos + Point3(0,-speed,0))
return Task.cont
w = World()
run()