hackingLine.py (5511B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\hacking\hackingLine.py 2 import random 3 import geo2 4 import hackingcommon.hackingConstants as hackingConst 5 from carbonui import uiconst 6 from carbonui.primitives.sprite import Sprite 7 from carbonui.primitives.vectorline import VectorLine 8 from carbonui.uicore import uicore 9 from eve.client.script.ui.hacking import hackingUIConst 10 11 class Line(object): 12 13 def __init__(self, parent, tileFrom, tileTo): 14 self.tileFrom = tileFrom 15 self.tileTo = tileTo 16 self.parent = parent 17 k = hackingUIConst.TILE_SIZE / 2.0 18 self.p0 = (self.tileFrom.left + k, self.tileFrom.top + k) 19 self.p1 = (self.tileTo.left + k, self.tileTo.top + k) 20 self.offset = geo2.Vec2Subtract(self.p1, self.p0) 21 self.offset = geo2.Vec2Normalize(self.offset) 22 self.center = geo2.Vec2Lerp(self.p0, self.p1, 0.5) 23 self.lineType = self.GetLineType() 24 self.line = VectorLine(parent=parent, align=uiconst.TOPLEFT) 25 self.bleedSprite = None 26 self.UpdateState() 27 28 def UpdateState(self): 29 tileFromData = self.tileFrom.tileData 30 tileToData = self.tileTo.tileData 31 if not tileFromData.IsFlippable() and not tileToData.IsFlippable(): 32 colorFrom = colorTo = hackingUIConst.COLOR_BLOCKED 33 elif hackingConst.TYPE_NONE in (tileFromData.type, tileToData.type): 34 colorFrom = colorTo = hackingUIConst.COLOR_UNEXPLORED 35 else: 36 colorFrom = colorTo = hackingUIConst.COLOR_EXPLORED 37 self.ShowBleed() 38 widthFrom = widthTo = hackingUIConst.WIDTH_LINE 39 if tileFromData.blocked or tileFromData.type == hackingConst.TYPE_DEFENSESOFTWARE: 40 colorFrom = (0.0, 0.0, 0.0, 0.5) 41 widthFrom = 5.0 42 if not (tileToData.blocked or tileToData.type == hackingConst.TYPE_DEFENSESOFTWARE): 43 widthTo = 0.0 44 if tileToData.blocked or tileToData.type == hackingConst.TYPE_DEFENSESOFTWARE: 45 colorFrom = (0.0, 0.0, 0.0, 0.5) 46 widthTo = 5.0 47 if not (tileFromData.blocked or tileFromData.type == hackingConst.TYPE_DEFENSESOFTWARE): 48 widthFrom = 0.0 49 uicore.animations.SpColorMorphTo(self.line, self.line.colorFrom, colorFrom, attrName='colorFrom') 50 uicore.animations.SpColorMorphTo(self.line, self.line.colorTo, colorFrom, attrName='colorTo') 51 uicore.animations.MorphScalar(self.line, 'widthFrom', self.line.widthFrom, widthFrom) 52 uicore.animations.MorphScalar(self.line, 'widthTo', self.line.widthTo, widthTo) 53 offset1 = self.GetLineOffsetAmount(self.tileFrom.tileData.type) 54 p0 = geo2.Vec2Add(self.p0, geo2.Vec2Scale(self.offset, offset1)) 55 self.line.translationFrom = p0 56 offset2 = self.GetLineOffsetAmount(self.tileTo.tileData.type) 57 p1 = geo2.Vec2Subtract(self.p1, geo2.Vec2Scale(self.offset, offset2)) 58 self.line.translationTo = p1 59 60 def ShowBleed(self): 61 if not self.bleedSprite: 62 texturePath = self.GetBleedTexturePath() 63 width, height = hackingUIConst.LINEBLEED_SIZE_BY_LINETYPE[self.lineType] 64 left, top = self.center 65 left -= width / 2.0 66 top -= height / 2.0 67 if self.lineType == hackingUIConst.LINETYPE_DECLINE: 68 top += height 69 height *= -1 70 self.bleedSprite = Sprite(name='bleedSprite', parent=self.parent, state=uiconst.UI_DISABLED, texturePath=texturePath, align=uiconst.TOPLEFT, pos=(left, 71 top, 72 width, 73 height), opacity=0.0, color=(0.76, 0.2, 0)) 74 uicore.animations.FadeTo(self.bleedSprite, 0.0, 0.5, callback=self.AnimateLine, timeOffset=random.random() * 0.6, loops=3, duration=0.1) 75 76 def AnimateLine(self): 77 uicore.animations.FadeTo(self.bleedSprite, self.bleedSprite.opacity, 0.2, duration=5.0, loops=uiconst.ANIM_REPEAT, curveType=uiconst.ANIM_WAVE) 78 79 def GetBleedTexturePath(self): 80 if self.lineType == hackingUIConst.LINETYPE_HORIZONTAL: 81 return random.choice(hackingUIConst.LINEBLEED_TEXTUREPATHS_HORIZONTAL) 82 else: 83 return random.choice(hackingUIConst.LINEBLEED_TEXTUREPATHS_DIAGONAL) 84 85 def GetLineType(self): 86 y0 = self.tileFrom.top 87 y1 = self.tileTo.top 88 x0 = self.tileFrom.left 89 x1 = self.tileTo.left 90 if y0 == y1: 91 return hackingUIConst.LINETYPE_HORIZONTAL 92 if y0 > y1: 93 if x0 > x1: 94 return hackingUIConst.LINETYPE_INCLINE 95 else: 96 return hackingUIConst.LINETYPE_DECLINE 97 else: 98 if x0 < x1: 99 return hackingUIConst.LINETYPE_INCLINE 100 return hackingUIConst.LINETYPE_DECLINE 101 102 def GetLineOffsetAmount(self, tileType): 103 if tileType == hackingConst.TYPE_SEGMENT: 104 return 10.0 105 elif tileType in (hackingConst.TYPE_DATACACHE, hackingConst.TYPE_UTILITYELEMENTTILE): 106 return 16.0 107 elif tileType in (hackingConst.TYPE_DEFENSESOFTWARE, hackingConst.TYPE_CORE): 108 return 21.0 109 else: 110 return 10.0 111 112 def AnimExit(self, num): 113 uicore.animations.FadeTo(self.line, self.line.opacity, 0.0, timeOffset=0.2 + num * 0.01, duration=0.2) 114 if self.bleedSprite: 115 uicore.animations.FadeTo(self.bleedSprite, self.bleedSprite.opacity, 0.0, timeOffset=0.2 + num * 0.01, duration=1.0)