def OnCollision(self, CollisionEvent): c = CollisionEvent.OtherObject.Sprite.Color dist = (self.Owner.Transform.WorldTranslation - CollisionEvent.OtherObject.Transform.WorldTranslation) dist = abs(dist.x) + abs(dist.y) ld = CollisionEvent.OtherObject.LightReceiver.last_dist should_update = dist < ld or ( dist >= ld and CollisionEvent.OtherObject.LightReceiver.last_dominator == self.Owner) a = dist / 5 if a > self.DefaultAlpha: a = self.DefaultAlpha if should_update: CollisionEvent.OtherObject.LightReceiver.last_dominator = self.Owner CollisionEvent.OtherObject.LightReceiver.last_dist = dist CollisionEvent.OtherObject.Sprite.Color = VectorMath.Vec4( 0, 0, 0, a) elif a < 0.8: now_a = CollisionEvent.OtherObject.Sprite.Color.a modifier = now_a - (1 - a) / 5 modifier = 0 if modifier < 0 else modifier CollisionEvent.OtherObject.Sprite.Color = VectorMath.Vec4( 0, 0, 0, modifier)
def OnLogicUpdate(self, UpdateEvent): self.Owner.Transform.Translation = self.MousePos self.UpdateEnvironmentInfo() if self.AbsorbActive and self.WithInRange: self.PerformAbsorb() target_color = VectorMath.Vec4(1, 1, 1, 1) target_scale = 5 target_sprite = self.ShadeTable.FindValue("OutRange") radius = 1.2 self.Owner.Transform.Rotation = self.init_rotate skillname = self.hero.AbilityStatus.GetTreeSkillName() physskill = self.hero.AbilityStatus.GetPhysSkillName() self.Owner.BurnAnim.Active = False self.Owner.FreezeAnim.Active = False self.Owner.PoisonAnim.Active = False if self.TouchPlant and not self.Deactivated: target_sprite = self.ShadeTable.FindValue("Cross") self.SetPlantAlpha(0.5) elif self.WithInRange and not self.Deactivated: if self.TouchAttackable: target_sprite = self.ShadeTable.FindValue("Attack") radius = 2.4 elif self.TouchAnnihilator or not skillname: target_sprite = self.ShadeTable.FindValue("OutRange") elif self.TouchGrowable and not self.hero.AbilityStatus.NoTreeSkill( ): target_color = VectorMath.Vec4(1, 1, 1, 0.75) target_sprite = self.ShadeTable.FindValue(skillname) if skillname in self.scale_table: target_scale *= self.scale_table[skillname] if not skillname == "TreeSkillWhirlingnut": self.Owner.Transform.RotateByAngles( VectorMath.Vec3( 0, 0, self.touch_normal.angleZ() - math.pi / 2)) if physskill and skillname: if physskill in self.color_table: target_color = self.color_table[physskill] if physskill in self.anim_table: self.anim_table[physskill].Active = True else: target_sprite = self.ShadeTable.FindValue("InRange") self.Owner.SphereCollider.Radius = radius self.Owner.Sprite.Color = target_color self.Owner.Transform.Scale = self.initial_size * target_scale self.Owner.SphereCollider.Radius = self.ball_size / target_scale self.Owner.Sprite.SpriteSource = target_sprite
def SetPlantAlpha(self, alpha): if self.touched_plant: if self.touched_plant.Sprite: self.touched_plant.Sprite.Color = VectorMath.Vec4( 1, 1, 1, alpha) if self.touched_plant.Hierarchy: for child in self.touched_plant.Hierarchy.Children: if child.Sprite: child.Sprite.Color = VectorMath.Vec4(1, 1, 1, alpha)
def Fading(self): self.Owner.SpriteParticleSystem.Tint *= VectorMath.Vec4(1,1,1,0.95) for child in self.Owner.Hierarchy.Children: child.SpriteParticleSystem.Tint *= VectorMath.Vec4(1,1,1,0.95) if self.Owner.SpriteParticleSystem.Tint.a < 0.001: self.CurrentUpdater = self.Fading2 self.Space.FindObjectByName("LevelSettings").LevelStart.HUDManager.ShowScores() self.Owner.DestroyInterface.Destroy()
def Fading(self): self.Owner.SpriteParticleSystem.Tint *= VectorMath.Vec4(1, 1, 1, 0.95) for child in self.Owner.Hierarchy.Children: child.SpriteParticleSystem.Tint *= VectorMath.Vec4(1, 1, 1, 0.95) if self.Owner.SpriteParticleSystem.Tint.a < 0.001: self.Space.SoundSpace.PlayCue("Rain") self.Owner.Destroy() self.Space.FindObjectByName("EndingWord1").FadeAnim.Active = True self.Space.FindObjectByName("EndingWord2").FadeAnim.Active = True
def DownUpdate(self): self.Owner.Sprite.Color *= VectorMath.Vec4(1, 1, 1, 0.9) for child in self.Owner.Hierarchy.Children: if child.Sprite: child.Sprite.Color *= VectorMath.Vec4(1, 1, 1, 0.92) self.Owner.Transform.Scale *= 0.95 destination = self.camera.Transform.Translation + VectorMath.Vec3( 8, -2.2, 0) t = self.Owner.Transform.Translation kept_ratio = 0.95 self.Owner.Transform.Translation = t * kept_ratio + destination * ( 1 - kept_ratio)
def DestroyUpdate(self, UpdateEvent): self.Owner.SpriteText.Color *= VectorMath.Vec4(1, 1, 1, self.DestroySpeed) self.hider.Sprite.Color *= VectorMath.Vec4(1, 1, 1, self.DestroySpeed) if self.emphasizer: self.emphasizer.Sprite.Color *= VectorMath.Vec4( 1, 1, 1, self.DestroySpeed) if self.ShouldBeRealDestroyed: if self.Owner.SpriteText.Color.a < 0.01: if self.Owner.DestroyInterface: self.Owner.DestroyInterface.Destroy() else: self.Owner.Destroy()
def OnMouseDown(self, MouseDownEvent): self.Owner.Sprite.Color = VectorMath.Vec4(1, 0, 0, 0.25) heroClickEvent = Zero.ScriptEvent() heroClickEvent.Target = self.hero heroClickEvent.MaxRangeSqrt = 36 self.Owner.Region.DispatchEvent("heroClickEvent", heroClickEvent)
def HighAttack(self): self.Owner.Teleportable.Active = True self.Owner.Bounceable.Active = False self.Owner.ClickReceiver.Receivable = True if not self.Owner.Sprite.SpriteSource == self.outanim: self.Owner.Sprite.SpriteSource = self.outanim if self.Owner.Sprite.CurrentFrame == 2: hurtbox = self.Space.CreateAtPosition( "HurtBox", self.Owner.Transform.Translation + Vec3(0, .7, 0)) hurtbox.Transform.Scale = Vec3(.26, 0.75, 1) hurtbox.CanHurt.HurtRate = -20 hurtbox.TimedDeath.LifeTime = 0.05 hurtbox.AttachToRelative(self.Owner) self.Owner.RigidBody.ApplyLinearImpulse(VectorMath.Vec3(0, 5, 0)) sandsmoke = self.Space.CreateAtPosition( "SandSmokeParticle", self.Owner.Transform.Translation) t = sandsmoke.SpriteParticleSystem.Tint sandsmoke.SpriteParticleSystem.Tint = VectorMath.Vec4( t.x, t.y, t.z, 0.1) sandsmoke.SphericalParticleEmitter.RandomVelocity *= 0.4 sandsmoke.SphericalParticleEmitter.EmitCount = 3 sandsmoke.SphericalParticleEmitter.ResetCount() if self.Owner.Sprite.CurrentFrame == 3: self.Owner.Sprite.AnimationSpeed = 0 if self.Owner.RigidBody.Velocity.y < 0: self.Owner.Sprite.AnimationSpeed = 1 self.CurrentUpdate = self.GoUnder
def Slamming(self): #initial check if not self.Owner.Sprite.SpriteSource == self.slamanim: self.Owner.Sprite.SpriteSource = self.slamanim if self.Owner.Sprite.CurrentFrame == 3: self.waitcounter = 100 self.CurrentUpdate = self.PreWalk self.Owner.Sprite.AnimationActive = False self.SpeedMultiplier = 1 self.Owner.CanBounce.Active = True dir_modifier = 1 if self.Owner.Sprite.FlipX else -1 hurtbox = self.Space.CreateAtPosition( "HurtBox", self.Owner.Transform.Translation - Vec3(dir_modifier * .5, .5, 0)) hurtbox.Transform.Scale = Vec3(1.5, .5, 1) hurtbox.TimedDeath.LifeTime = 0.1 dx = abs(self.Owner.PlayerDetectorInterface.GetDirection().x) if dx <= 4: self.Space.FindObjectByName( "Camera").CameraFunction.SetCameraShake( True, .05 * (4 - dx), True, .05 * (4 - dx), .18, 0) sandsmoke = self.Space.CreateAtPosition( "SandSmokeParticle", self.Owner.Transform.Translation) t = sandsmoke.SpriteParticleSystem.Tint sandsmoke.SpriteParticleSystem.Tint = VectorMath.Vec4( t.x, t.y, t.z, 0.8) sandsmoke.SphericalParticleEmitter.EmitCount = 25 sandsmoke.SphericalParticleEmitter.ResetCount()
def Attacking(self): self.Owner.Teleportable.Active = True self.Owner.Bounceable.Active = False self.Owner.ClickReceiver.Receivable = True if not self.Owner.Sprite.SpriteSource == self.outanim: self.Owner.SoundEmitter.PlayCue("DigCue") self.Owner.Sprite.SpriteSource = self.outanim if self.Owner.Sprite.CurrentFrame == 2: hurtbox = self.Space.CreateAtPosition( "HurtBox", self.Owner.Transform.Translation + Vec3(0, .6, 0)) hurtbox.Transform.Scale = Vec3(.32, 0.85, 1) hurtbox.CanHurt.HurtRate = -100 hurtbox.TimedDeath.LifeTime = 0.05 hurtbox.AttachToRelative(self.Owner) sandsmoke = self.Space.CreateAtPosition( "SandSmokeParticle", self.Owner.Transform.Translation) t = sandsmoke.SpriteParticleSystem.Tint sandsmoke.SpriteParticleSystem.Tint = VectorMath.Vec4( t.x, t.y, t.z, 0.1) sandsmoke.SphericalParticleEmitter.RandomVelocity *= 0.4 sandsmoke.SphericalParticleEmitter.EmitCount = 3 sandsmoke.SphericalParticleEmitter.ResetCount() if self.Owner.Sprite.CurrentFrame == 3: self.Owner.RigidBody.ApplyLinearImpulse(VectorMath.Vec3(0, 2.5, 0)) if self.Owner.Sprite.CurrentFrame == 5: self.dumbcounter = 20 self.CurrentUpdate = self.Resting
def Slamming(self): #initial check if not self.Owner.Sprite.SpriteSource == self.slamanim: self.Owner.Sprite.SpriteSource = self.slamanim if self.Owner.Sprite.CurrentFrame == 3: self.waitcounter = 100 self.CurrentUpdate = self.PreWalk self.Owner.Sprite.AnimationActive = False self.SpeedMultiplier = 1 self.Owner.CanBounce.Active = True dir_modifier = 1 if self.Owner.Sprite.FlipX else -1 hurtbox = self.Space.CreateAtPosition( "HurtBox", self.Owner.Transform.Translation - Vec3(dir_modifier * .5, .5, 0)) hurtbox.Transform.Scale = Vec3(1.5, .5, 1) hurtbox.TimedDeath.LifeTime = 0.1 sandsmoke = self.Space.CreateAtPosition( "SandSmokeParticle", self.Owner.Transform.Translation) t = sandsmoke.SpriteParticleSystem.Tint sandsmoke.SpriteParticleSystem.Tint = VectorMath.Vec4( t.x, t.y, t.z, 0.8) sandsmoke.SphericalParticleEmitter.EmitCount = 25 sandsmoke.SphericalParticleEmitter.ResetCount()
def RemoveObserver(self, alpha): self.semarphor -= 1 self.last_dist = 9999 self.last_dominator = None if self.semarphor == 0: self.Owner.Sprite.Color = VectorMath.Vec4(0, 0, 0, alpha)
def OnLogicUpdate(self, UpdateEvent): self.UpdateEnvironmentInfo() if self.Active and self.WithInRange: self.PerformAbsorb() target_color = VectorMath.Vec4(1, 1, 1, 0.25) target_scale = 1 if self.WithInRange: if self.TouchAttackable: target_color = VectorMath.Vec4(1, 0, 0, 0.25) target_scale = 5 elif not self.TouchAnnihilator and self.TouchGrowable: target_color = VectorMath.Vec4(0, 1, 0, 0.25) target_scale = 5 self.Owner.Sprite.Color = target_color self.Owner.Transform.Scale = self.initial_size * target_scale self.Owner.SphereCollider.Radius = self.ball_size / target_scale
def OnLogicUpdate(self, UpdateEvent): #number bounces above enemy and then is destroyed afterwards self.Owner.Transform.Translation.y += self.upSpeed * UpdateEvent.Dt self.Owner.SpriteText.Color = self.Owner.SpriteText.Color - VectorMath.Vec4(0, 0, 0, self.alphaTimer) self.destroyTimer -= 1 if(self.destroyTimer == 0): self.Owner.Destroy()
def OnLogicUpdate(self, UpdateEvent): if not self.Activated: if self.StartFreezing: self.FreezeCounter += UpdateEvent.Dt self.Owner.DragEffect.Drag *= 1.1 if self.Owner.FlowEffect: self.Owner.FlowEffect.FlowSpeed *= 0.95 #self.Owner.AddComponentByName("FreezeAnim") if self.FreezeCounter > self.FreezeDelay: freezeflow = Zero.ScriptEvent() self.Owner.Region.DispatchEvent("FreezeFlowEvent", freezeflow) self.Activated = True self.Owner.Collider.Ghost = False self.Owner.DragEffect.Active = False if self.Owner.FlowEffect: self.Owner.FlowEffect.Active = False self.Owner.GravityEffect.Active = True for contactholder in self.Owner.Collider.Contacts: otherobj = contactholder.OtherObject if otherobj.MouseLocationIndicator: continue elif otherobj.CannotBeFrozen: continue elif otherobj.GrowableGround: continue elif otherobj.PlantAnnihilator: continue if otherobj.RigidBody: otherobj.RigidBody.Kinematic= False otherobj.RigidBody.Static= True if otherobj.AIMovementInterface: otherobj.AIMovementInterface.Deactivate() if otherobj.BurnAnim: otherobj.BurnAnim.Active = False if otherobj.PoisonAnim: otherobj.PoisonAnim.Active = False #if otherobj.FreezeAnim: # otherobj.FreezeAnim.Active = False else: effect_active = False for contactholder in self.Owner.Collider.Contacts: if contactholder.OtherObject.CannotBeFrozen: effect_active = True if not effect_active: s = self.Owner.Sprite.Color self.Owner.Sprite.Color = VectorMath.Vec4(s.x * 2.3, s.y * 2.3, s.z * 2.3, 1) self.Owner.GravityEffect.Active = False if self.Owner.CanHurt: self.Owner.CanHurt.Active = False Zero.Disconnect(self.Space, Events.LogicUpdate, self)
def ResetAlpha(self, alpha=1): targetlist = [] if self.Owner.Sprite: targetlist.append(self.Owner.Sprite) if self.Owner.SpriteText: targetlist.append(self.Owner.SpriteText) for target in targetlist: c = target.Color target.Color = VectorMath.Vec4(c.x, c.y, c.z, alpha)
def OnTrigger(self, TriggerEvent): if self.Owner.FadeAnim: self.Owner.FadeAnim.Active = True else: s = self.Owner.Sprite.Color self.Owner.Sprite.Color = VectorMath.Vec4(s.x, s.y, s.z, s.a * 0.5) self.Owner.Collider.Ghost = True if self.Owner.IsSentry: self.Owner.RemoveComponentByName("IsSentry")
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)
def BeginShrink(self, UpdateEvent): self.cached_particle.SphericalParticleEmitter.EmitterSize *= 0.99 self.Space.FindObjectByName("Camera").CameraFunction.SetCameraShake( True, .35, True, .35, 0.1, 0) self.temp_counter += 1 if self.temp_counter > 10: self.temp_counter = 0 self.Space.FindObjectByName( "RandomYeller").RandomYeller.CreateOne() if self.cached_particle.SphericalParticleEmitter.EmitterSize.x < 2.5 and not self.shrink_enough: self.shrink_enough = True self.Space.FindObjectByName("Camera").CameraFunction.SetCameraFade( VectorMath.Vec4(1, 1, 1, 0), VectorMath.Vec4(1, 1, 1, 1), 0.05, 0) seq = Action.Sequence(self.Owner.Actions) Action.Delay(seq, 2) Action.Call(seq, lambda: self.Space.LoadLevel("CreditLevel")) Action.Call( seq, lambda: self.Space.FindObjectByName("LevelSettings"). LevelStart.RemoveHUD())
def IncreaseAlpha(self): self.Soul.SpriteParticleSystem.Tint *= VectorMath.Vec4(1, 1, 1, 0.9) color = self.Owner.Sprite.Color color.w += self.IncreaseAlphaDelta if (color.w >= 1.0): color.w = 1.0 self.CurrentUpdate = None self.DeathActive = True self.Soul.Destroy() self.Owner.Sprite.Color = color
def OnLogicUpdate(self, UpdateEvent): #cameraTimer = 15 randomDirectionX = random.uniform(-3, 3) randomDirectionY = random.uniform(1, 2) #Sends the object flying in a random direction and then destroys it after a certain time self.Owner.RigidBody.ApplyLinearVelocity( VectorMath.Vec3(randomDirectionX, randomDirectionY, 0)) self.Owner.Sprite.Color = self.Owner.Sprite.Color - VectorMath.Vec4( 0, 0, 0, self.alphaTimer) self.destroyTimer -= 1 self.Owner.RigidBody.ApplyLinearVelocity(VectorMath.Vec3(0, 0, 0)) if (self.destroyTimer == 0): self.Owner.Destroy()
def OnLogicUpdate(self, UpdateEvent): if self.Active: if self.blink_tick <= self.BlinkTick: self.blink_tick += 1 if self.blink_tick >= self.BlinkTick: if not self.Owner.Sprite.Color == self.BlinkColor: self.Owner.Sprite.Color = self.BlinkColor else: self.Owner.Sprite.Color = self.oricolor self.blink_tick = 0 else: c = self.Owner.Sprite.Color self.Owner.Sprite.Color = VectorMath.Vec4(self.oricolor.x,self.oricolor.y,self.oricolor.z,c.a)
def OnTrigger(self, TriggerEvent): if self.Owner.FadeAnim: self.Owner.FadeAnim.Active = True if self.Owner.Sprite: s = self.Owner.Sprite.Color self.Owner.Sprite.Color = VectorMath.Vec4(s.x, s.y, s.z, s.a * 0) if self.Owner.Collider: self.Owner.Collider.Ghost = True if self.Owner.Hierarchy: for child in self.Owner.Hierarchy.Children: if child.Sprite.Color: s = child.Sprite.Color child.Sprite.Color = VectorMath.Vec4( s.x, s.y, s.z, s.a * 0) if child.Collider: child.Collider.Ghost = True if self.Owner.IsSentry: self.Owner.RemoveComponentByName("IsSentry")
def OnLogicUpdate(self, UpdateEvent): self.EnsureSetting() if not self.LevelName == self.parentspace.CurrentLevel.Name: self.EnsureAbility() if self.now_ability != self.GetName(): c = self.Owner.Sprite.Color self.Owner.Sprite.Color *= Vec4(1,1,1,0.9) if self.Owner.Sprite.Color.a <= 0.01: self.Owner.Sprite.SpriteSource = self.PicTable.FindValue(self.GetName()) self.now_ability = self.GetName() else: c = self.Owner.Sprite.Color self.Owner.Sprite.Color = VectorMath.Vec4(c.x, c.y, c.z, c.a * 0.9 + 0.1)
def IncreaseAlpha(self): self.Soul.SpriteParticleSystem.Tint *= VectorMath.Vec4(1, 1, 1, 0.9) color = self.Owner.Sprite.Color color.w += self.IncreaseAlphaDelta if (color.w >= 1.0): color.w = 1.0 self.CurrentUpdate = None self.DeathActive = True self.Soul.Destroy() if self.Owner.PlayerController.Mouse: self.Owner.PlayerController.Mouse.MouseLocationIndicator.Deactivated = False self.IsImmune = False self.Owner.Sprite.Color = color
class Checkable: DarkenedColor = Property.Vector4(VectorMath.Vec4(0.5, 0.5, 0.5, 1)) def Initialize(self, initializer): self.CheckOut() Zero.Connect(self.Owner, Events.CollisionStarted, self.OnCollision) def OnCollision(self, CollisionEvent): if CollisionEvent.OtherObject.CanCheck and not self.activated: self.activated = True CollisionEvent.OtherObject.CanCheck.SetCheck(self.Owner) self.Owner.Sprite.Color = VectorMath.Vec4(1, 1, 1, 1) def CheckOut(self): self.activated = False self.Owner.Sprite.Color = self.DarkenedColor
def GoUnder(self): self.Owner.Teleportable.Active = False self.Owner.Bounceable.Active = False self.Owner.Collider.Ghost = True if not self.Owner.Sprite.SpriteSource == self.inanim: self.Owner.Sprite.SpriteSource = self.inanim if self.Owner.Sprite.CurrentFrame == 2: self.dumbcounter = 50 self.CurrentUpdate = self.UndergroundWalking sandsmoke = self.Space.CreateAtPosition( "SandSmokeParticle", self.Owner.Transform.Translation) t = sandsmoke.SpriteParticleSystem.Tint sandsmoke.SpriteParticleSystem.Tint = VectorMath.Vec4( t.x, t.y, t.z, 0.1) sandsmoke.SphericalParticleEmitter.RandomVelocity *= .5 sandsmoke.SphericalParticleEmitter.StartVelocity *= .5 sandsmoke.SphericalParticleEmitter.EmitCount = 10 sandsmoke.SphericalParticleEmitter.ResetCount()
def OnLogicUpdate(self, UpdateEvent): if self.Active: if self.Countdown > 0: self.Countdown -= 1 if self.Countdown == 0: self.Active = False self.Countdown = -1 if self.blink_tick <= self.BlinkTick: self.blink_tick += 1 if self.blink_tick >= self.BlinkTick: if not self.Owner.Sprite.Color == self.BlinkColor: self.Owner.Sprite.Color = self.BlinkColor #self.Owner.Sprite.BlendMode = Zero.BlendMode.Additive else: self.Owner.Sprite.Color = self.oricolor self.blink_tick = 0 else: c = self.Owner.Sprite.Color self.Owner.Sprite.Color = VectorMath.Vec4(self.oricolor.x,self.oricolor.y,self.oricolor.z,c.a)
def Attacking(self): self.Owner.ClickReceiver.Receivable = True if not self.Owner.Sprite.SpriteSource == self.outanim: self.Owner.Sprite.SpriteSource = self.outanim if self.Owner.Sprite.CurrentFrame == 2: hurtbox = self.Space.CreateAtPosition("HurtBox",self.Owner.Transform.Translation + Vec3(0,.5,0)) hurtbox.Transform.Scale = Vec3(1,1.5,1) hurtbox.CanHurt.HurtRate = -20 hurtbox.TimedDeath.LifeTime = 0.3 sandsmoke = self.Space.CreateAtPosition("SandSmokeParticle", self.Owner.Transform.Translation) t = sandsmoke.SpriteParticleSystem.Tint sandsmoke.SpriteParticleSystem.Tint = VectorMath.Vec4(t.x, t.y, t.z, 0.1) sandsmoke.SphericalParticleEmitter.EmitCount = 3 sandsmoke.SphericalParticleEmitter.ResetCount() if self.Owner.Sprite.CurrentFrame == 5: self.dumbcounter = 20 self.CurrentUpdate = self.Resting