Vega strike Python Modules doc  0.5.1
Documentation of the " Modules " folder of Vega strike
 All Data Structures Namespaces Files Functions Variables
go_somewhere_significant.py
Go to the documentation of this file.
1 import unit
2 import universe
3 import VS
4 import faction_ships
5 import vsrandom
6 import launch
7 import Briefing
8 import launch_recycle
9 def moveUnitTo(un,place,radius):
10  where=place.LocalPosition()
11  print "moving "+un.getName() +" to "+place.getName()
12  prsize=place.rSize();
13  prp = VS.getPlanetRadiusPercent()
14  if (place.isPlanet()):
15  prsize*=1+prp
16  where=(where[0]+un.rSize()+prsize+radius,where[1],where[2]);
17  un.SetPosition(VS.SafeEntrancePoint(where,un.rSize()))
18  return un
20 # frameoffset=0 #see note at bottom
21 # begsigdis=1.0 #same note
22  def HaveArrived (self):
23  return self.arrivedarea
24 
25  def SignificantUnit(self):
26  return self.significantun
27 
29  return unit.getUnitFullName(self.significantun,False)
30 
31  def __init__ (self,you, landable_only, distance_away_to_trigger,base_only=0,capshipfaction="", dyn_fg="", showObjective=1, forcestarship=0):
32  self.obj=0
33  self.showObjective=showObjective
34  self.orbitee=""
35  self.capship=0
36  self.you = you
37  self.arrivedarea=0
38  self.distfrombase=distance_away_to_trigger
39  significant=VS.Unit()
40  aroundthe=""
41  self.sysfil=VS.getSystemFile()
42  if (landable_only or base_only):
43  randint=vsrandom.randrange(0,128)
44  lim=1
45  if landable_only and not base_only:
46  lim=10
47  for i in xrange(lim):
48  significant = unit.getSignificant (randint,landable_only,base_only)
49 
50  if significant.isPlanet():
51  break
52  else:
53  randint+=1
54  if (landable_only and not unit.isLandable(significant)) or forcestarship:
55  self.capship=1
56  if (capshipfaction==""):
57  capshipfaction="merchant"
58  if (self.capship and capshipfaction!=""):
59  if (significant.isNull()):
60  significant=you
61  self.orbitee="%s" % (significant.getName())
62  self.capship=1
63  print "orbitee %s " % self.orbitee
64  if (dyn_fg==""):
65  newship=faction_ships.getRandomCapitol(capshipfaction)
66  found=False
67  near=2000.0
68  far=5000.0
69  try:
70  near*=faction_ships.launch_distance_factor
71  far*=faction_ships.launch_distance_factor
72  except:
73  pass
74 
75  i=VS.getUnitList()
76  while i.notDone():
77  testun = i.current()
78  i.advance()
79  if testun.getFactionName()==capshipfaction and faction_ships.isCapital(testun.getName()):
80  significant=moveUnitTo(testun,significant,near)
81  found=True
82  break
83  if (not found):
84  significant=launch.launch_wave_around_unit("Base",capshipfaction,newship,"sitting_duck",1,near,far,significant,"")
85  else:
86  near=5000.0
87  try:
88  near*=faction_ships.launch_distance_factor
89  except:
90  pass
91  found=False
92  aroundthe=" near "+unit.getUnitFullName(significant,True);
93  i = VS.getUnitList()
94  while i.notDone():
95  testun = i.current()
96  i.advance()
97  if testun.getFactionName()==capshipfaction and faction_ships.isCapital(testun.getName()):
98  significant=moveUnitTo(testun,significant,near)
99  found=True
100  break
101  if (not found):
102  significant=launch_recycle.launch_dockable_around_unit(dyn_fg,capshipfaction,"sitting_duck",near,significant,4*near,'','Base')
103  significant.setFullname(dyn_fg)
104  else:
105  significant = universe.getRandomJumppoint ()
106  if (significant.isNull()):
107  print "ERROR: no significants found in starsystem %s" % (self.sysfil)
108  self.significantun=VS.getPlayer()
109  else:
110  self.significantun=significant
111  self.significantun.setMissionRelevant()
112  #qualifier="the "
113  #if (significant.isPlanet() and significant.isDockableUnit()):
114  # qualifier=""
115  if (self.showObjective):
116  self.obj=VS.addObjective("Visit %s %s" % (self.getSignificantFullName (),aroundthe))
117  VS.setOwner(self.obj,VS.getPlayer())
118 # self.begsigdis=self.you.getSignificantDistance(self.significantun) #see note below
119 
120  def Print(self,visitstr,fro,dockstr="\0%s",time=0):
121  if (self.capship):
122  visitstr+=(dockstr % (self.orbitee))
123  thename=unit.getUnitFullName(self.significantun,True)
124  VS.IOmessage(time,fro,universe.getMessagePlayer(self.you),visitstr % (thename) )
125  def DestinationSystem(self):
126  return self.significantun.getUnitSystemFile();
127  def JumpPoints (self):
128  return self.DestinationSystem()
129  def Execute(self):
130  if (self.significantun.isNull() or self.you.isNull() or VS.getSystemFile()!=self.DestinationSystem()):
131  return 0
132 # self.frameoffset+=1 #see note below...
133  sigdis=self.you.getSignificantDistance(self.significantun)
134  if (sigdis<=self.distfrombase):
135  self.arrivedarea=1
136  if (self.showObjective):
137  VS.setCompleteness(self.obj,1.0)
138 # if ((not self.arrivedarea) and (self.frameoffset%25)):
139 # VS.setCompleteness(self.obj,(1-(float(sigdis)/float(self.begsigdis)))) #doesn't work too well... for now, it will be 0 until you dock
140  return self.HaveArrived()
141  def initbriefing (self):
142  self.mytime = VS.GetGameTime();
143  faction=self.you.getFactionName();
144  name=self.you.getName()
145  self.brief_you=Briefing.addShip(name,faction,(40.0,0.0,80.0))
146  faction=self.significantun.getFactionName()
147  name = self.significantun.getName()
148  self.brief_sig=Briefing.addShip(name,faction,(-40,0.0,8000.0))
149  Briefing.enqueueOrder (self.brief_you,(-30,0.0,7900.0),5.0)
150  def loopbriefing (self):
151  if (VS.GetGameTime()-self.mytime>5):
152  return self.brief_you
153  return -1
154  def endbriefing(self):
155  del self.mytime
156  del self.brief_you
157  del self.brief_sig