NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)