Add taproot activation fireworks.

This commit is contained in:
Miguel Medeiros
2021-11-09 22:25:03 -03:00
parent a2a8375898
commit dbc56c79d8
7 changed files with 239 additions and 9 deletions

View File

@@ -1,3 +1,10 @@
<ng-container *ngIf="specialEvent">
<div class="pyro">
<div class="before"></div>
<div class="after"></div>
</div>
<div class="warning-label">{{ eventName }}</div>
</ng-container>
<div id="blockchain-container" dir="ltr">
<app-blockchain></app-blockchain>
</div>

View File

@@ -7,5 +7,144 @@
}
#blockchain-container::-webkit-scrollbar {
display: none;
display: none;
}
.warning-label {
position: absolute;
width: 150px;
text-align: center;
font-weight: bold;
font-size: 12px;
padding: 6px 4px;
border-radius: 4px;
margin-top: -10px;
margin-left: 10px;
}
// Fireworks
$particles: 50;
$width: 500;
$height: 500;
// Create the explosion...
$box-shadow: ();
$box-shadow2: ();
@for $i from 0 through $particles {
$box-shadow: $box-shadow,
random($width)-$width / 2 + px
random($height)-$height / 1.2 + px
hsl(random(360), 100, 50);
$box-shadow2: $box-shadow2, 0 0 #fff
}
@mixin keyframes ($animationName) {
@-webkit-keyframes #{$animationName} {
@content;
}
@-moz-keyframes #{$animationName} {
@content;
}
@-o-keyframes #{$animationName} {
@content;
}
@-ms-keyframes #{$animationName} {
@content;
}
@keyframes #{$animationName} {
@content;
}
}
@mixin animation-delay ($settings) {
-moz-animation-delay: $settings;
-webkit-animation-delay: $settings;
-o-animation-delay: $settings;
-ms-animation-delay: $settings;
animation-delay: $settings;
}
@mixin animation-duration ($settings) {
-moz-animation-duration: $settings;
-webkit-animation-duration: $settings;
-o-animation-duration: $settings;
-ms-animation-duration: $settings;
animation-duration: $settings;
}
@mixin animation ($settings) {
-moz-animation: $settings;
-webkit-animation: $settings;
-o-animation: $settings;
-ms-animation: $settings;
animation: $settings;
}
@mixin transform ($settings) {
transform: $settings;
-moz-transform: $settings;
-webkit-transform: $settings;
-o-transform: $settings;
-ms-transform: $settings;
}
body {
margin:0;
padding:0;
background: #000;
overflow: hidden;
}
.pyro > .before, .pyro > .after {
z-index: 100;
position: absolute;
width: 5px;
height: 5px;
border-radius: 50%;
box-shadow: $box-shadow2;
@include animation((1s bang ease-out infinite backwards, 1s gravity ease-in infinite backwards, 5s position linear infinite backwards));
}
.pyro > .after {
@include animation-delay((1.25s, 1.25s, 1.25s));
@include animation-duration((1.25s, 1.25s, 6.25s));
}
@include keyframes(bang) {
to {
box-shadow:$box-shadow;
}
}
@include keyframes(gravity) {
to {
@include transform(translateY(200px));
opacity: 0;
}
}
@include keyframes(position) {
0%, 19.9% {
margin-top: 10%;
margin-left: 40%;
}
20%, 39.9% {
margin-top: 40%;
margin-left: 30%;
}
40%, 59.9% {
margin-top: 20%;
margin-left: 70%
}
60%, 79.9% {
margin-top: 30%;
margin-left: 20%;
}
80%, 99.9% {
margin-top: 30%;
margin-left: 80%;
}
}

View File

@@ -1,10 +1,53 @@
import { Component } from '@angular/core';
import { Component, OnInit } from '@angular/core';
import { WebsocketService } from 'src/app/services/websocket.service';
import { StateService } from 'src/app/services/state.service';
import { specialBlocks } from 'src/app/app.constants';
@Component({
selector: 'app-start',
templateUrl: './start.component.html',
styleUrls: ['./start.component.scss'],
})
export class StartComponent {
constructor() { }
export class StartComponent implements OnInit {
interval = 60;
colors = ['#5E35B1', '#ffffff'];
specialEvent = false;
eventName = '';
optionsLeft = {
particleCount: 2,
angle: 70,
spread: 50,
origin: { x: 0 },
colors: this.colors,
};
optionsRight = {
particleCount: 2,
angle: 110,
spread: 50,
origin: { x: 1 },
colors: this.colors,
};
constructor(
private websocketService: WebsocketService,
private stateService: StateService,
) { }
ngOnInit() {
this.websocketService.want(['blocks', 'stats', 'mempool-blocks']);
this.stateService.blocks$
.subscribe((blocks: any) => {
const block = blocks[0];
if(specialBlocks[block.height]) {
this.specialEvent = true;
this.eventName = specialBlocks[block.height].labelEvent;
setTimeout(() => {
this.specialEvent = false;
}, 60 * 60 * 1000);
}
});
}
}