Ejemplo n.º 1
0
class DestroyCreateArchetype:
    Archetype = Property.Archetype()
    EffectLifeTime = Property.Float(0)
    DieDelay = Property.Float(0)
    
    def Initialize(self, initializer):
        self.activated = False
        
    def Destroy(self):
        if not self.activated:
            self.activated = True
            
            created = self.Space.CreateAtPosition(self.Archetype, self.Owner.Transform.Translation)
                    
            if self.EffectLifeTime > 0:
                self.AddDestroyAction(created, self.EffectLifeTime)

            if self.DieDelay > 0:
                self.AddDestroyAction(self.Owner, self.DieDelay)
            else:
                self.Owner.Destroy()
            
    def AddDestroyAction(self, target, countdown):
        def Destroy(self):
            self.Owner.Destroy()
                
        if not target.ActionList:
            target.AddComponentByName("ActionList")
            target.ActionList.EmptyAll()
            target.ActionList.AddCallback(Destroy, has_self=True, blocking=False, countdown=countdown)
Ejemplo n.º 2
0
class CanDropThing:
    Dropped = Property.Archetype()

    def Initialize(self, initializer):
        pass

    def Drop():
        self.Space.CreateAtPosition(self.Dropped,
                                    self.Owner.Transform.Translation)
Ejemplo n.º 3
0
class RainGenerator:
    CoolDown = Property.Float(0.25)
    Timer = 0
    Amount = Property.Int(10)
    SpeedVariation = Property.Float(-10)
    Activatable = Property.Bool(True)
    RainArchetype = Property.Archetype("Rain")
    RainShader = Property.Color(Color.LightBlue)
    ResourceSaver = Property.Bool(True)

    def Initialize(self, initializer):
        self.Active = True
        self.Player = self.Space.FindObjectByName("Player")
        Zero.Connect(self.Space, Events.LogicUpdate, self.OnLogicUpdate)

        self.LowerLeft = self.Owner.Transform.WorldTranslation + Vec3(
            -self.Owner.Transform.WorldScale.x / 2.0,
            -self.Owner.Transform.WorldScale.y / 2.0, 0)
        self.UpperRight = self.Owner.Transform.WorldTranslation + Vec3(
            self.Owner.Transform.WorldScale.x / 2.0,
            self.Owner.Transform.WorldScale.y / 2.0, 0)

    def OnLogicUpdate(self, UpdateEvent):
        if self.Activatable:
            if self.ResourceSaver:
                self.Active = abs(self.Owner.Transform.Translation.x -
                                  self.Player.Transform.Translation.x) < 10
            else:
                self.Active = True

            if self.Active:
                self.Timer += UpdateEvent.Dt

                if self.Timer > self.CoolDown:
                    self.Timer = 0
                    self.Rain()

    def Rain(self):
        tuple(self.GenerateRain() for _ in range(self.Amount))

    def GenerateRain(self):
        creatAt = Vec3(random.uniform(self.LowerLeft.x, self.UpperRight.x),
                       random.uniform(self.LowerLeft.y, self.UpperRight.y), 0)
        created = self.RainArchetype if self.RainArchetype else "Rain"
        obj = self.Space.CreateAtPosition(created, creatAt)
        obj.RigidBody.Velocity = Vec3(0,
                                      random.randint(self.SpeedVariation,
                                                     0), 0)
        for child in obj.Hierarchy.Children:
            child.Sprite.Color = self.RainShader
            child.Sprite.Color *= VectorMath.Vec4(1, 1, 1, 0.2)