Skip to content

Commit

Permalink
Switch to Alchemy API, various fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
caktux committed Feb 14, 2022
1 parent 0564b94 commit 8f133c6
Showing 1 changed file with 104 additions and 96 deletions.
200 changes: 104 additions & 96 deletions src/game.ts
Original file line number Diff line number Diff line change
@@ -1,68 +1,63 @@
import utils from '../node_modules/decentraland-ecs-utils/index'
import { movePlayerTo } from '@decentraland/RestrictedActions'
import { getUserPublicKey } from '@decentraland/Identity'
// import { getUserPublicKey } from '@decentraland/Identity'
import { getParcel } from '@decentraland/ParcelIdentity'

// const nftsUrl = 'https://api.rarible.org/v0.1/items/byOwner?owner=ETHEREUM:0x378BCce7235D53BBc3774BFf8559191F06E6818E'
const nftsUrl = 'https://api.opensea.io/api/v1/assets?' +
'owner=0x378BCce7235D53BBc3774BFf8559191F06E6818E&' +
'asset_contract_addresses=0x3b3ee1931dc30c1957379fac9aba94d1c48a5405&' + // Foundation
'asset_contract_addresses=0xb932a70a57673d89f4acffbe830e8ed7f75fb9e0&' + // SuperRare
'asset_contract_addresses=0xfe21b0a8df3308c61cb13df57ae5962c567a668a&' + // Ephimera
'asset_contract_addresses=0x495f947276749ce646f68ac8c248420045cb7b5e&' + // OpenSea
'asset_contract_addresses=0xdde2d979e8d39bb8416eafcfc1758f3cab2c9c72&' + // KnownOrigin V1
'asset_contract_addresses=0xfbeef911dc5821886e1dda71586d90ed28174b7d&' + // KnownOrigin
'asset_contract_addresses=0x11bdfb09bebf4f0ab66dd1d6b85d0ef58ef1ba6c&' + // MakersPlace
'asset_contract_addresses=0x2d9e5de7d36f3830c010a28b29b3bdf5ca73198e&' + // MakersPlace V2
'asset_contract_addresses=0x2a46f2ffd99e19a89476e2f62270e0a35bbf0756&' + // MakersPlace V3
'asset_contract_addresses=0x6a5ff3ceecae9ceb96e6ac6c76b82af8b39f0eb3&' + // Rarible V1
'asset_contract_addresses=0x60f80121c31a0d46b5279700f9df786054aa5ee5&' + // Rarible
'asset_contract_addresses=0x1b8876b57299bef76edf1bec3ce4328a32841643&' + // Kitteh World of Ethereum
'asset_contract_addresses=0x636c03b3929fb010a846b4877449357a4981fb7a&' + // Haiku book
'asset_contract_addresses=0xcae3c92a6d4b6520e00eedeada982261332d9494&' + // Nelly ethEra
'asset_contract_addresses=0x247cd06b0f06f2c15993c3ab9a2347cebd12434f&' + // Nelly F0x
'asset_contract_addresses=0xd1405914eed5c358c9d8ab150f83bf7ffb7939f7&' + // Mrs Ethereum
'asset_contract_addresses=0x1919f156157924389491002127049abd69a808b5&' + // Surrogates
'asset_contract_addresses=0x3725ca6034bcdbc3c9ada649d49df68527661175&' + // 1559
'asset_contract_addresses=0xabEFBc9fD2F806065b4f3C237d4b59D9A97Bcac7&' // Zora
// 'order_by=sale_date&order_direction=desc&'
const nftsUrl = 'https://eth-mainnet.g.alchemy.com/v2/Z8JNiWNLZTHZoKDcy3F35IvyMw7CPOM9/getNFTs/' +
'?owner=0x378BCce7235D53BBc3774BFf8559191F06E6818E&' +
'contractAddresses[]=0x857F47fEef68289da771Bf9c63532CF8A7A3472B&' + // Tux
'contractAddresses[]=0x3b3ee1931dc30c1957379fac9aba94d1c48a5405&' + // Foundation
'contractAddresses[]=0xb932a70a57673d89f4acffbe830e8ed7f75fb9e0&' + // SuperRare
'contractAddresses[]=0xfe21b0a8df3308c61cb13df57ae5962c567a668a&' + // Ephimera
'contractAddresses[]=0x495f947276749ce646f68ac8c248420045cb7b5e&' + // OpenSea
'contractAddresses[]=0xfbeef911dc5821886e1dda71586d90ed28174b7d&' + // KnownOrigin
// 'contractAddresses[]=0x11bdfb09bebf4f0ab66dd1d6b85d0ef58ef1ba6c&' + // MakersPlace
// 'contractAddresses[]=0x2d9e5de7d36f3830c010a28b29b3bdf5ca73198e&' + // MakersPlace V2
// 'contractAddresses[]=0x2a46f2ffd99e19a89476e2f62270e0a35bbf0756&' + // MakersPlace V3
'contractAddresses[]=0x60f80121c31a0d46b5279700f9df786054aa5ee5&' + // Rarible
'contractAddresses[]=0x1b8876b57299bef76edf1bec3ce4328a32841643&' + // Kitteh World of Ethereum
'contractAddresses[]=0x636c03b3929fb010a846b4877449357a4981fb7a&' + // Haiku book
'contractAddresses[]=0xcae3c92a6d4b6520e00eedeada982261332d9494&' + // Nelly ethEra
'contractAddresses[]=0x247cd06b0f06f2c15993c3ab9a2347cebd12434f&' + // Nelly F0x
'contractAddresses[]=0xd1405914eed5c358c9d8ab150f83bf7ffb7939f7&' + // Mrs Ethereum
'contractAddresses[]=0x1919f156157924389491002127049abd69a808b5&' + // Surrogates
'contractAddresses[]=0x3725ca6034bcdbc3c9ada649d49df68527661175&' + // 1559
'contractAddresses[]=0xabEFBc9fD2F806065b4f3C237d4b59D9A97Bcac7' // Zora

let nfts = []
let data = []

let total = 260 // Set the total for the first tower to split the collection
let total = 300 // Set the total for the first tower to split the collection
let offset_start = 0
let offset = 0
let split = 20
let offset_key = ''
let radius = 24
let per_rotation = 360 / split
let pages = total / split
let per_rotation = 18
let pages = 3
let p = 0
let path = []
let done = false

const sceneMessageBus = new MessageBus()

const green = new Material()
green.albedoColor = Color3.Green()
green.metallic = 0.8
green.roughness = 0.2
// const green = new Material()
// green.albedoColor = Color3.Green()
// green.metallic = 0.8
// green.roughness = 0.2

let base_parcel = ''
executeTask(async () => {
const parcel = await getParcel()
base_parcel = parcel.land.sceneJsonData.scene.base
if (base_parcel === '-123,32') {
offset_start = total
total = 3000
}
if (base_parcel === '-123,32')
offset_start = pages
})

let publicKey = null
let isInCollection = false
const publicKeyRequest = executeTask(async () => {
publicKey = await getUserPublicKey()
})
// let publicKey = null
// let isInCollection = false
// const publicKeyRequest = executeTask(async () => {
// publicKey = await getUserPublicKey()
// })

let showNFTs = function() {
for (let i = 0; i < nfts.length; i++)
Expand Down Expand Up @@ -90,14 +85,14 @@ engine.addEntity(fire)


// Add music
const music = new Entity()
music.addComponent(new Transform({
position: new Vector3(radius * 2, 0.1, -radius)
}))

const source = new AudioStream('https://stream.radio.caktux.ca/radio.mp3')
music.addComponent(source)
source.volume = 0.12
// const music = new Entity()
// music.addComponent(new Transform({
// position: new Vector3(radius * 2, 0.1, -radius)
// }))
//
// const source = new AudioStream('https://stream.radio.caktux.ca/radio.mp3')
// music.addComponent(source)
// source.volume = 0.12


// Floating platforms
Expand Down Expand Up @@ -136,7 +131,7 @@ sceneMessageBus.on("platforms_share", (data) => {

sceneMessageBus.on("platform_new", (data) => {
if (t >= totalPlatforms ||
(t > 0 && platform_list[last_platform] && platform_list[last_platform].getComponent(Transform).position.x < 65))
(t > 0 && platform_list[last_platform] && platform_list[last_platform].getComponent(Transform).position.x < 66.5))
return
newPlatform(data.id, true, {}, 0)
})
Expand Down Expand Up @@ -172,8 +167,8 @@ let newPlatform = function(id: number, followPath: boolean, position: Object, in
position: start_position
}))

if (isInCollection === true && followPath === false)
platform.addComponent(green)
// if (isInCollection === true && followPath === false)
// platform.addComponent(green)

let followCurve = function() {
platform.addComponent(new utils.FollowCurvedPathComponent(path, 900, 30, false, true, () => {
Expand Down Expand Up @@ -231,64 +226,57 @@ let newPlatform = function(id: number, followPath: boolean, position: Object, in

log("Getting NFTs")
let fetching = false

async function loadNFTs() {
try {
if (fetching === true)
if (fetching)
return
fetching = true

if (offset_start > 0 && offset === 0)
offset = offset_start

let response = await fetch(`${nftsUrl}limit=${split}&offset=${offset}`)
let response = await fetch(offset_key ? `${nftsUrl}&pageKey=${offset_key}` : nftsUrl)
let json = await response.json()

data = json['assets']
log(`Got ${data.length} NFTs`)

if (data.length === 0 || p === pages - 1) {
done = true
newPlatform(Date.now() - 10000, false, {}, 0)
showNFTs()
if (json['pageKey'])
offset_key = json['pageKey']

engine.addEntity(music)
if (offset_start) {
if (pages === offset_start) {
pages = Math.ceil(json['totalCount'] / 100)
log(`Total pages set to ${pages}`)
}

platforms.addComponent(
new utils.Interval(1000, () => {
if (t < totalPlatforms &&
last_platform + per_rotation * 1000 < Date.now())
sceneMessageBus.emit("platform_new", {id: Date.now()})
})
)
sceneMessageBus.emit("new_visitor", {})
return
if (p < offset_start) {
fetching = false
p += 1
return
}
}

data = json['ownedNfts']
log(`Got ${data.length} NFTs from a total of ${json['totalCount']} (${p + 1}/${pages})`)

for (let i = 0; i < data.length; i++) {
// Skip animations
// if (data[i]['animation_url'] !== null && data[i]['animation_original_url'] !== null) {
// log(`Skipped animation "${data[i]['name']}" from ${data[i]['asset_contract']['name']}
// with ID ${data[i]['token_id']} at ${data[i]['animation_original_url']}`)
// continue
// }
const tokenId = data[i]['contract']['address'] !== '0x495f947276749ce646f68ac8c248420045cb7b5e' ?
parseInt(data[i]['id']['tokenId'], 16) : data[i]['id']['tokenId']

// Skip super pink moon...
if (data[i]['asset_contract']['address'] === '0xfe21b0a8df3308c61cb13df57ae5962c567a668a' && data[i]['token_id'] === '310') {
log(`Skipped ${data[i]['name']}`)
if (data[i]['contract']['address'] === '0xfe21b0a8df3308c61cb13df57ae5962c567a668a' && tokenId === 310) {
log(`Skipped ${data[i]['contract']['address']}/${tokenId}`)
continue
}

// Set frame color to green for creators
let color = new Color3(1, 1, 1)
if (data[i]['creator'] && data[i]['creator']['address']) {
if (data[i]['creator']['address'] === publicKey) {
if (isInCollection === false)
isInCollection = true
color = new Color3(0.5, 1, 0.5)
}
}
// if (data[i]['creator'] && data[i]['creator']['address']) {
// if (data[i]['creator']['address'] === publicKey) {
// if (isInCollection === false)
// isInCollection = true
// color = new Color3(0.5, 1, 0.5)
// }
// }

// Set NFT pieces
let nft_url = `ethereum://${data[i]['asset_contract']['address']}/${data[i]['token_id']}`
let nft_url = `ethereum://${data[i]['contract']['address']}/${tokenId}`
let entity = new Entity()
let nft = new NFTShape(nft_url, { color: color })
entity.addComponent(
Expand All @@ -299,7 +287,7 @@ async function loadNFTs() {

// Set next point
let point = [radius * Math.sin((per_rotation * i) * (Math.PI / 180)) + radius * 2,
(i * Math.PI) / per_rotation + p * 4 + 2.5,
(i * Math.PI) / per_rotation + (p - offset_start) * 18.25 + 2.5,
radius * Math.cos((per_rotation * i) * (Math.PI / 180)) - radius]

// Calculate difference for platform path
Expand All @@ -323,22 +311,42 @@ async function loadNFTs() {

nfts.push(entity)
}
offset = offset + split
fetching = false
p += 1

log(`Loaded page ${p + 1}`)
log(`Loaded page ${p}`)
} catch {
fetching = false
error("Failed to fetch NFTs")
}
fetching = false
}

const loader = new Entity()
loader.addComponent(
new utils.Interval(1250, () => {
if (p < pages && done !== true && fetching === false)
if (fetching || done)
return

if (p < pages)
loadNFTs()

if (p >= pages && !done) {
done = true

showNFTs()

newPlatform(Date.now() - 5000, false, {}, 0)

sceneMessageBus.emit("new_visitor", {})

// engine.addEntity(music)
}
})
)

platforms.addComponent(
new utils.Interval(1000, () => {
if (done && t < totalPlatforms && last_platform + 5000 < Date.now())
sceneMessageBus.emit("platform_new", {id: Date.now()})
})
)

Expand Down

0 comments on commit 8f133c6

Please sign in to comment.